Servlet/JSP에서 request와 response 객체

June Lee·2021년 3월 24일
1

Servlet/JSP

목록 보기
3/7

우선, Servlet의 경우 사용자 요청 시 서블릿 컨테이너에서 자동으로 HttpServletRequest 객체와 HttpServletResponse 객체를 생성해준다. 그러면 이 객체들을 doGet()와 doPost() 메서드의 인자로 받아서 이것들을 request와 response 객체로 사용한다.

그 예시는 아래와 같다.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		
		String s1 = request.getParameter("num1");
		String s2 = request.getParameter("num2");
	}

한편, JSP에는 doPost, doGet과 같은 메서드가 없다. 대신 JSP는 page, request, session, application, out 등의 내장 객체를 가지고 있다. 그래서 별도의 객체 생성 과정 없이도 바로 request.메서드이름의 형식으로 이 객체들을 사용할 수 있다.
그 예시는 아래와 같다.

<%
	request.setCharacterEncoding("utf-8");
	String s1 = request.getParameter("num1");
	String s2 = request.getParameter("num2");
%>

Request 객체의 유효 범위

Servlet, JSP에서 사용하는 이런 객체들은 모두 setAttribute(), getAttribute() 메서드를 가진다. 이 말은 이런 객체들에 데이터를 저장하고, 객체들로부터 데이터를 뽑아올 수 있다는 뜻이다.

그리고 이 객체들 중 대표적이 네 가지의 유효 범위는 아래와 같다.

page < request < session < application

유효 범위가 넓을수록 데이터를 오래 사용할 수 있다.

page: 해당 페이지 안에서는 데이터가 유효
request: 같은 요청 내에서는 데이터가 유효.
session: 세션이 만료되기 전까지는 데이터가 유효

Dispatcher와 Redirect

Dispatcher 방식과 Redirect 방식은 모두 다른 페이지로 데이터를 전달하는 방법이다. 그런데 이 둘은 request 객체에 있어서 차이점을 가진다.

우선 Dispatcher 방식은, 자신이 받은 request를 다른 페이지까지 전달해준다.
따라서 이 방식으로 데이터를 전달받은 페이지는 같은 request를 공유하기 때문에, 이전의 데이터가 그대로 남아있게 된다.

그 방법은 아래와 같다.

//CalsServlet.java
request.setAttribute("result", result);
request.setAttribute("name", name);
		
RequestDispatcher rd = request.getRequestDispatcher("basic/result.jsp");
rd.forward(request, response); 

한편, 이 방식에서는 기존 요청을 연장하기 때문에 url을 살펴보면 여전히 CalsServlet이라는 것을 확인할 수 있다.

redirect 방식은 페이지를 바꾸면서, 새로운 요청을 전달해준다. 따라서 바뀐 페이지의 request 객체에는 더 이상 이전의 데이터가 남아있지 않다.

response.sendRedirect("./basic/result.jsp");

또 이 경우, url이 result.jsp로 바뀌는 것을 확인해볼 수 있다.


out 객체

out의 경우에도 Servlet에서는 response.getWriter()를 통해 PrintWriter 객체를 생성해서 out.println()을 해줘야한다.

그러나 JSP에서는 out을 바로 사용할 수 있고, <% %>(스크립트릿) 안에서 바로 html로 출력해주는 용도로 사용한다.

profile
📝 dev wiki

0개의 댓글

관련 채용 정보