요청과 응답

Was는 웹 브라우저로부터 Servlet요청을 받으면,
- 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장합니다.
- 웹 브라우저에게 응답을 보낼 때 사용하기 위해 HttpServletResponse객체를 생성합니다.
- 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달 합니다.
HttpServletRequest
- http 프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용
- 헤더정보, 파라미터, 쿠기, URI, URL등의 정보를 읽어 들이는 메소드를 가지고 있다.
- Body의 Stream을 읽어 들이는 메소드를 가지고 있다.
HttpServletResponse
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServletResponse객체를 생성하여 Servlet에게 전달
- Servlet은 해당 객체를 이용하여 content type, 응답 코드, 응답 메시지 등을 전송
- Web browser가 요청정보에 담아서 보내는 header값을 읽어 들여 브라우저 화면에 출력한다.
| 12
 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에 출력
| 12
 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의 주소
 
| 12
 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
| 12
 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
| 12
 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>
 
 |