들어가기 전에
서블릿과 JSP는 서로 상호 보완적인 관계를 가지고 있습니다.
서블릿은 로직을 구현하기에 알맞지만, HTML을 출력하기엔 불편합니다.
JSP는 로직을 구현하는 것은 불편하지만 HTML을 출력하기엔 편리합니다.
이러한 서블릿과 JSP를 좀 더 잘 사용하기 위해서 forward가 사용되는 경우가 많습니다.
이번 시간엔 서블릿과 JSP의 연동에 대해 알아보도록 하겠습니다.
학습 목표
- 서블릿과 JSP를 적절히 이용해서 포워딩을 효율적으로 사용할 수 있다.
핵심 개념
- forward
- request.setAttribute()
- request.getAttribute()
학습하기
실습코드
LogicServlet.java
package examples;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LogicServlet")
public class LogicServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LogicServlet() {
super();
}
protected void doGet(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);
}
}
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
EL표기법으로 출력합니다.<br>
${v1} + ${v2} = ${result} <br><br>
스클립틀릿과 표현식을 이용해 출력합니다.<br>
<%
int v1 = (int)request.getAttribute("v1");
int v2 = (int)request.getAttribute("v2");
int result = (int)request.getAttribute("result");
%>
<%=v1%> + <%=v2 %> = <%=result %>
</body>
</html>
생각해보기
- 객체지향에서 객체는 관련된 것들을 모아서 가지고 있는 특징이 있습니다. 웹 페이지 URL도 관련된 URL이 있습니다. 예를 들어, 게시판 글쓰기, 읽기, 목록 보기 등은 모두 게시판과 관련된 URL일 것입니다. 하지만 지금까지의 예제들을 보면 서블릿은 하나의 URL만 처리하고 있습니다. 하나의 서블릿이 여러 개의 요청을 받을 수는 없을까요?
(힌트 : 서블릿 URL mapping에서 와일드카드('*'기호)를 사용하는 방법에 대해서 조사해보세요.)
참고 자료
comment
24.04.02.
최고의 강의
2022.03.17
이해가 쏙쏙 잘됩니다!
질문. 왜 servlet에서 포워딩한 값을 jsp에서 받을 때 requestDispatcher가 아니라 request에서 꺼내나요? 서블릿에서 request.setAttribute로 value 값을 넣긴했지만 실질적으로 jsp에 포워딩하는 역할을 하는건 디스패처 아니었나요? 값을 보낼 때도 request에 넣고 꺼낼때도 request에서 꺼낼거면 디스패처는 뭐하러 만든건지? 그리고 jsp에서 int v1 = (int) request.getAttribute("v1"); 이부분 할 때 왜 선언식(<%! ~~ %>)이 아니라 스크립틀릿(<% ~~ %>을 사용했나요? 변수나 메서드 선언할 때는 선언식 써야한다면서요?
20220216
redirect : url 변함 o
forward : url 변함 x
RequestDispatcher re = request.getRequestDispatcher("이동jsp");
re.forward(request, response);
jsp페이지에서
request 내장함수로 servlet에서 선언된 값을 가져올 수 있음
21.8.29
210810
> [참고링크] https://help.perforce.com/hydraexpress/3.5.0/html/rwsfservletug/4-3.html
21.05.09
출처: https://dololak.tistory.com/740 [코끼리를 냉장고에 넣는 방법]
최고의 강의 감사합니다 항상
2020.05.28 완료!
20.05.22
프로그램 로직 수행은 Servlet에서, 결과 출력은 JSP에서 하는 것이 유리
서로의 장단점을 연결시켜주기 위해 서블릿의 결과를 jsp에게 포워딩하는 방법을 사용 -> servlet과 jsp 연동하기
프로그램 로직수행은 Servlet, 결과출력은 JSP가 유리함.
서로의 장단점을 해결하기 위해 Servlet에서 프로그램 로직이 수행되고, 그 결과를 JSP에게 포워딩하는 방법이 사용됨.
>>> 이를 servlet&jsp연동이라고 한다.
2019.12.27
완료
오늘 강의를 정말 잘들었습니다. 너무 감사합니다!!!!