서블릿 naming convention / naming rule 확인하기
org.bitcamp.myweb.servlet.TempServlet.class
=> 별칭 : name항목(보통 서블릿 클래스 이름과 동일하게)
"TempServelet"(별칭)
=> URL mapping(사상) = URL pattern
http://www.naver.com
http://localhost:8090/~~~~~~~~ => URI(~~~) 를 잘 이해해야 한다!
=> URI : 클라이언트가 요구하는 자원의 식별자(indicator)
URI = /Context Root(path)/Servlet 의 호출 이름.
예 > /ex00/Temp
url 매핑되는 uri 는 클래스명에서 Servlet지워줌!!
Context Root >> 우리가 만든 웹 어플리케이션의 위치까지 도달 가능하게 만드는 것이 ContextPath.
/ >> Root (우리가 만든 웹 어플리케이션에 도달하려면 /ex00 을 작성해주어야 함.)
/Temp >> ex00 안의 수많은 서블릿 중에, 원하는 서블릿에 도달하려면 URL mapping을 알려주어야 함.
별칭 name은 내부적으로 사용하는 이름일 뿐, 웹 브라우저(사용자)에서는 아무런 역할을 하지 못한다.
URI를 지정해야만 사용할 수가 있는데, URI 지정하는 것을 mapping 이라고 한다.
<servlet>
<servlet-name>helloServlet</servlet-name> <!--서블릿 클래스명과 똑같이 하되, 앞글자만 소문자로!-->
<servlet-class>org.bitcamp.myweb.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<!-- 웹 브라우저에서 어떻게 경로를 지정해야,
이 서블릿이 요청을 받고, 처리하고, 응답을 보낼지 지정 -->
<url-pattern>/hello</url-pattern> <!--url mapping과 같은 의미-->
</servlet-mapping>
// 1.
res.setCharacterEncoding("UTF-8");
res.setContentType("text/html");
// 2.
res.setContentType("text/html; charset=utf8");
1번은 2번과 같이 한 줄로 작성할 수 있다.
(UTF-8, UTF8, utf-8, utf8 다 사용 가능)
@Log4j
@NoArgsConstructor
@WebServlet("/Response")
public class ResponseServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
log.debug("service(req, res) invoked.");
////////////////
//응답문서 만들 때의 코드
res.setContentType("text/html; charset=UTF-8");
PrintWriter out = res.getWriter();
out.print("<html><body>");
out.print("ResponseServlet 요청성공");
out.print("</body></html>");
out.flush(); //아직 브라우저쪽으로 나가지 못한 응답 데이터가 있을 수도 있어서 flush 해주어야 함.
//남아있는 전송 데이터가 있다면 전송하고 비워라(flush).
//출력버퍼에 잔류하는 데이터를 강제로 방출
out.close(); //PrintWriter객체는 자원객체라, 마지막에 close해주어야 자원낭비를 없앨 수 있다. (자원해제)
} //service
} //end class