요청과 응답
Was는 웹 브라우저로부터 Servlet요청을 받으면,
- 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장합니다.
- 웹 브라우저에게 응답을 보낼 때 사용하기 위해 HttpServletResponse객체를 생성합니다.
- 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달 합니다.
HttpServletRequest
- http 프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용
- 헤더정보, 파라미터, 쿠기, URI, URL등의 정보를 읽어 들이는 메소드를 가지고 있다.
- Body의 Stream을 읽어 들이는 메소드를 가지고 있다.
HttpServletResponse
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServletResponse객체를 생성하여 Servlet에게 전달
- Servlet은 해당 객체를 이용하여 content type, 응답 코드, 응답 메시지 등을 전송
- Web browser가 요청정보에 담아서 보내는 header값을 읽어 들여 브라우저 화면에 출력한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>form</title></head>"); out.println("<body>");
Enumeration<String> headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String headerName = headerNames.nextElement(); String headerValue = request.getHeader(headerName); out.println(headerName + ":" + headerValue + "<br>"); }
out.println("</body>"); out.println("</html>"); }
|
- parameter를 읽어서 browser에 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>from</title></head>"); out.println("<body>"); String name = request.getParameter("name"); String age = request.getParameter("age"); out.println("name:" + name + "<br>"); out.println("age:" + age + "<br>"); out.println("</body>"); out.println("</html>"); }
|
- 그 외 오쳥정보 출력(URI, URL, PATH, Remote host 등에 대한 정보 출력)
- URI: port번호 이하의 내용을 보여 준다.
- URL: 요청 주소 전체가 보여진다.
- contentPath: web application 과 mapping 된 path
- remoteAddr: client의 주소
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>info</title></head>"); out.println("<body>"); String uri = request.getRequestURI(); StringBuffer url = request.getRequestURL(); String contentPath = request.getContextPath(); String remoteAddr = request.getRemoteAddr(); out.println("uri: " + uri + "<br>"); out.println("url: " + url + "<br>"); out.println("contentPath: " + contentPath + "<br>"); out.println("remoteAddr: " + remoteAddr + "<br>"); out.println("</body>"); out.println("</html>"); }
|
JSP(JavaServer Pages)
- JSP의 위치는 기본적으로 WebContent 안에 들어간다.
- JSP는 근본적으로 Servlet으로 변환되어 실행 된다.
JSP 등장 배경
- MS에서 ASP(Active Server Page) 라는 쉽게 웹을 개발 할 수 있는 스크립트(script) 엔진을 발표함(1998년)
- 1997년에 발표된 Servlet은 ASP에 비하여 상대적으로 개발 방식이 불편함 -> HTML 코드를 많이 넣어 주어야 했음
- ASP에 대항하기 위해서 1999sus SUN에서 JSP를 발표
- JSP는 실제로 Servlet기술을 사용
JSP Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body>
<% int total = 0; for (int i = 0; i <= 10; i++) { total = total + i; } %>
1부터 10 까지의 합: <%=total %> </body> </html>
|
JSP Life Cycle
- Browser가 Web server에 JSP에 대한 요청 정보를 전달 한다.
- Browser가 요청한 JSP가 최초로 요청했을 경우만
- JSP로 작성된 코드가 Servlet 코드로 변환 된다. (Java file 생성)
- Servlet 코드를 컴파일해서 실행가능한 bytecode로 변환한다. (class file 생성)
- Servlet class를 로딩하고 인스턴스를 생성한다.
- Servlet이 실행되어 요청을 처리하고 응답 정보를 생성한다.
- JSP life cycle 확인 Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> hello~~ <% System.out.println("_jspService()"); %>
<%!
public void jspInit() { System.out.println("jspInit()!"); }
public void jspDestroy() { System.out.println("jspDestory()"); } %>
</body> </html>
|