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>");
}
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