Step01_Hello(HttpServlet)
HttpServlet
HttpServletRequest
HttpServletResponse
PrintWriter
현 게시글은 이전 게시글을 연장하였다.
2022.08.10 - [시작하기] - eclipse로 웹서비스 준비하기(tomcat과 경로 설정)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- bootstrap css 로딩 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<h1>인덱스 페이지 입니다</h1>
<ul>
<li><a href="play.html">놀러가기</a></li>
<li><a href="./play.html">놀러가기</a></li>
<li><a href="http://localhost:8888/Hello/play.html">놀러가기</a></li>
<li><a href="/Hello/play.html">놀러가기</a></li>
<li><a href="sub/study.html">공부하기</a></li>
</ul>
<form action="/Hello/send" method="post">
<input type="text" name="msg" placeholder="서버에 할말 입력..."/>
<button type="submit">전송</button>
</form>
<p>
김구라 이미지를 보고 싶으면 주소창에 <br>
http://localhost:8888/Hello/images/kim1.png<br>
를 입력해 보세요
</p>
<!-- 웹에서의 절대경로와 상대경로 -->
<img src="http://localhost:8888/Hello/images/kim1.png">
<img src="images/kim1.png">
<img src="./images/kim1.png">
<!-- Tomcat 서버가(현재서버) 서비스하는 서비스 중에서 절대 경로로 이미지 로딩하기 -->
<img src="/Hello/images/kim1.png">
</div>
</body>
</html>
input type의 폼태그와 버튼을 만들었을때 send 요청을 처리할 수 있는 코드를 작성하고자 한다.
1. HttpServlet 상속(extends)받는다.
2. service 메소드를 오버라이드한다(ctrl+space)
3. 요청 맵핑 (처리할 요청 경로를 작성한다) 반드시 /로 시작을 해야 하고 프로젝트명은 쓰지 않는다.
HttpServletRequest - 요청객체, HttpServletResponse - 응답객체
HttpServletResponse (응답객체)의 getWriter() 메소드를 활용하여 웹브라우저에 원하는 글을 출력할 수 있다.
System.out.println 이 콘솔창에 출력하는 것과 비교할 수 있다.
String a=req.getParameter("msg");
msg 라는 파라미터명으로 전송되는 문자열 읽어온다.
한글이 깨지지 않도록 하려면 아래의 코드를 작성해야한다.
req.setCharacterEncoding("utf-8");
파라미터에서 글을 읽어올때 한글이 깨지지 않도록 해준다.
resp.setCharacterEncoding("utf-8");
응답 인코딩시 한글을 호환해준다.
resp.setContentType("text/html; charset=utf-8");
응답 컨텐츠 설정시 한글을 호환해준다.
ipconfig - 가상 ip 주소를 확인할 수 있다.
package test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//3. 요청 맵핑 (처리할 요청 경로를 작성한다) 반드시 / 로 시작을 해야 하고 프로젝트명은 쓰지 않는다.
@WebServlet("/send")
public class SendServlet extends HttpServlet{//1. HttpServlet 클래스를 상속 받는다.
//2. service() 메소드 오버라이드
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("요청이 오네?");
//한글 깨지지 않도록
req.setCharacterEncoding("utf-8");
// msg 라는 파라미터명으로 전송되는 문자열 읽어오기
String a=req.getParameter("msg");
System.out.println("msg:"+a);
//응답 인코딩 설정
resp.setCharacterEncoding("utf-8");
//응답 컨텐츠 설정
resp.setContentType("text/html; charset=utf-8");
//요청을 한 클라이언트에게 문자열을 응답할 객체 얻어오기
PrintWriter pw=resp.getWriter();
pw.println("<!doctype html>");
pw.println("<html>");
pw.println("<head>");
pw.println("<meta charset='utf-8'>");
pw.println("<title>제목 입니다</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<p>oh</p>");
pw.println("<p>who are you?</p>");
pw.println("<p>안녕하세요</p>");
pw.println("<img src='images/kim1.png'>");
pw.println("<img src=\"images/kim1.png\">");
pw.println("<br>");
pw.println("<a href=\"/Hello/index.html\">인덱스로</a>");
pw.println("</body>");
pw.println("</html>");
pw.flush();//방출
pw.close();//닫아주기
}
}
사실 resp.setContentType("text/html; charset=utf-8");에서 응답 컨텐츠 형식을 html 형식으로 지정해놓았기 때문에 당장은 텍스트만 입력해도 작동하지만 정석은 html 형식으로 입력하는 것이다.
img를 첨부할때 ""는 java에서 텍스트로 인식하기 때문에 ''로 대신하거나 앞뒤에 \\로 감싸줘서 표시하는 방법이 있다.