0%

200828-TIL

요청과 응답

request and response

Was는 웹 브라우저로부터 Servlet요청을 받으면,

  • 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장합니다.
  • 웹 브라우저에게 응답을 보낼 때 사용하기 위해 HttpServletResponse객체를 생성합니다.
  • 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달 합니다.

HttpServletRequest

  • http 프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용
  • 헤더정보, 파라미터, 쿠기, URI, URL등의 정보를 읽어 들이는 메소드를 가지고 있다.
  • Body의 Stream을 읽어 들이는 메소드를 가지고 있다.

HttpServletResponse

  • WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServletResponse객체를 생성하여 Servlet에게 전달
  • Servlet은 해당 객체를 이용하여 content type, 응답 코드, 응답 메시지 등을 전송

Header정보 읽어 들이기

  • 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

  1. Browser가 Web server에 JSP에 대한 요청 정보를 전달 한다.
  2. Browser가 요청한 JSP가 최초로 요청했을 경우만
    1. JSP로 작성된 코드가 Servlet 코드로 변환 된다. (Java file 생성)
    2. Servlet 코드를 컴파일해서 실행가능한 bytecode로 변환한다. (class file 생성)
    3. Servlet class를 로딩하고 인스턴스를 생성한다.
  3. 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>