1. 포워딩 : setAttribute / getAttribute
이는 "같은 요청 내에서만 가능" HttpServletRequest 객체가 같아야 하므로,
서블릿을 두 JAVA 클래스로 따로 만들고, doGet / doPost 등을 각각 오버라이딩 했을때, 사용하기 어려움
1개의 서블릿 내 하나의 메서드 안에서 파라미터를 공유할경우 사용
// A 서블릿
String value = "someValue";
request.setAttribute("key", value);
request.getRequestDispatcher("/BServlet").forward(request, response);
// B 서블릿
String value = (String) request.getAttribute("key");
2. 쿼리 파라미터 사용
같은 요청이 아니더라도 간단한 데이터 이동 가능, 하지만 sendRedirect로 파라미터를 넘기므로 URL 변경이 강제됨.
두 서블릿이 forwarding하는 환경에서는 사용하기 어렵다.
주는 쪽 : /받는쪽Servlet?Key1=Value&Key2=value : 첫 번째 서블릿에서 쿼리 파라미터를 포함한 URL로 리다이렉트
받는 쪽 : String getParam = request.getParameter(Key1);
// A 서블릿
response.sendRedirect(request.getContextPath() + "/insertComment?article_no=" + articleNum);
// B 서블릿
String articleNo = request.getParameter("article_no");
만약 HTML 화면에 EL 표현식으로 출력하고싶으면 ${param.article_no}로 사용하면 된다.
3. HttpSession 사용
모든 요청에 걸쳐서 데이터를 유지할 수 있다.
// A 서블릿
HttpSession session = request.getSession();
session.setAttribute("article_no", articleNum);
// B 서블릿
HttpSession session = request.getSession();
Integer articleNo = (Integer) session.getAttribute("article_no");
// 세션 삭제
HttpSession session = request.getSession();
session.removeAttribute("key");
//※ 모든 세션 삭제
HttpSession session = request.getSession();
session.invalidate();
※ 상세 게시글 화면에서 댓글을 달수있는 기능이 같이 있다면
(View = boardOne) (servlet = board/selectOne + comment/insert)
클라이언트에서 post방식으로 요청을 할 것 -> response/sendRedirect(URL)?param="" 으로 값을 넘기면서 boardOne 화면으로 복귀
'JSP_Servlet' 카테고리의 다른 글
JSP 용 깜지 (0) | 2024.10.24 |
---|---|
서블릿에서 설정한 세션 HTML로 가져오기 (0) | 2024.10.23 |
[Web] Forward와 Redirect 차이 (0) | 2024.10.20 |
Servlet(서블릿) (0) | 2024.10.20 |