2013년 11월 18일 월요일

서블릿 체이닝이란? 한서블릿의 출력을 다른 서블릿의 입력으로 이용하는 경우인데 RequestDispatcher를 이용하여 forward 형태로 구현가능하다.


서블릿 체이닝이란? 한서블릿의 출력을 다른 서블릿의 입력으로 이용하는 경우인데 RequestDispatcher를 이용하여 forward 형태로 구현가능하다.
 
아래 예제를 보자.

1. First.java
 
package onj;
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
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 import하려면 이클립스 build path에서 add library -> server runtime 에서
// tomcat 선택해서 톰캣관련 라이브러리 추가해야 한다.

@WebServlet("/first")
public class First extends HttpServlet {
 String subject;
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/plain");
  subject = request.getParameter("subject");
  RequestDispatcher rd = request.getRequestDispatcher("second");
  if (subject != null) {
   request.setAttribute("OnjSubject", subject);
  
   //request에 subject를 매달아서(setAttribute) Second 서블릿으로 보낸다.
   //Second에서는 getAttribute로 받으면 된다.
   //이게 서블릿 체이닝, 한서블릿의 출력이 다른 서블릿의 입력으로...
   rd.forward(request, response);
  } else {
   response.sendError(response.SC_BAD_REQUEST, "UserName Required");
  }
 }
}
 
2. Second.java

package onj;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
@WebServlet("/second")
public class Second extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/plain");
  PrintWriter out = response.getWriter();
  String subject = (String) request.getAttribute("OnjSubject");
  // Extracting the value which is set in FirstServlet
  out.println("Subject : " + subject);
 }
}
 
3. 결과
 
Subject : oraclejava

댓글 없음:

댓글 쓰기