Front-end/부스트코스 : 웹 프로그래밍

[부스트코스/back-end] 2. DB연결 웹앱 : forward, servlet&JSP 연동

byolee 2020. 3. 23. 21:41

 

< 포워드(forward) 란? >

  • 요청을 받은 서버가 요청의 일부를 다른 서버에게 넘겨주는 작업
  • forward와 redirect의 차이점? 리다이렉트는 서버가 클라이언트에게 새로 요청할 곳을 알려주는 작업이면서 URL이 변경되고, 포워드는 요청받은 서버가 전부 처리하는 것이 아니라 다른 서버에게 맡기는 것 (URL이 바뀌지 않음)
  • 요청이 1개인지 요청이 2개인지 아는 것이 중요함!

 

#front

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int dice = (int)(Math.random()*6)+1;
request.setAttribute("dice", dice);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/NextServlet");
requestDispatcher.forward(request, response);
}

 

#next

protected void service(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>");

int dice = (Integer)request.getAttribute("dice");
out.println("dice : " + dice);
for(int i = 0; i < dice; i++) {
out.print("<br>hello");
}
out.println("</body>");
out.println("</html>");
}

 

 

URL이 변하지 않음


Servlet과 JSP 연동

  • servlet은 프로그램 로직 수행에 유리함
  • JSP는 결과 출력에 유리함
  • 둘의 장단점을 해결하기 위해 서블릿에서 프로그램 로직을 수행하고 그 결과를 JSP에게 포워딩하는 방법을 사용
  • 이 방법을 '서블릿과 JSP 연동'이라고 함

 

 

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    int v1 = (int)(Math.random()*100)+1;
	    int v2 = (int)(Math.random()*100)+1;
	    int result = v1+v2;
	    request.setAttribute("v1", v1);
	    request.setAttribute("v2", v2);
	    request.setAttribute("result", result);

        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/result.jsp");
        requestDispatcher.forward(request, response);
	}

 

 

<%@ 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 v1 = (int)request.getAttribute("v1");
int v2 = (int)request.getAttribute("v2");
int result = (int)request.getAttribute("result");
%>
<%=v1%> + <%=v2 %> = <%=result %>
</body>
</html>

 

 

 


강의 : https://www.edwith.org/boostcourse-web/lecture/16705/

 

[LECTURE] 2) forward : edwith

들어가기 전에 WAS의 서블릿이나 JSP가 요청을 받은 후 그 요청을 처리하다가, 추가적인 처리를 같은 웹 어플리케이션안에 포함된 다른 서블릿이나 JSP에게 위임하는 경우가 있습니... - 부스트코스

www.edwith.org