JSP_Servlet

두 서블릿 간 속성/속성값 공유

silver-w 2024. 10. 23. 17:13

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