-
RequestDispatcherJAVA/웹 프로그래밍 - 서블릿 2020. 11. 3. 22:12
아래의 글의 말미에 서블릿과 서블릿에서의 데이터 이동 및 다른 서블릿에서의 데이터 처리를 다룬다고 하였다.
designatedroom87.tistory.com/277
서블릿과 서블릿 간의 데이터를 이동할 때 필요한 것이 RequestDispatcher 이다.
결과만 계산하고 보여주는 서블릿은 따로 만들어서 이를 처리한다.기존의 Add6.java에서 출력될 내용을 자신의 서블릿에서 하였다.
그런데 이를 다른 서블릿 파일이 하도록 하게 할 것이다.
즉, 업무를 나눈다고 보면 된다.
이에 대한 내용을 알아보자.
아래의 Add7.java 서블릿 파일에서 다른 서블릿 파일에 정보를 넘기는 것은 아래와 같이 한다.
add7.html 파일 내용
더보기<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="Add7" method="post"> <input type="text" name="value"> <input type="submit" name="operator" value="+"> <input type="submit" name="operator" value="-"> <input type="submit" name="operator" value="="> <br> 결과 : 0 </form> </body> </html>
Add7.java 서블릿 파일
더보기package com.iot.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Add7") public class Add7 extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); String value_= request.getParameter("value"); String operator = request.getParameter("operator"); int value=0; if(!value_.equals("")) value=Integer.parseInt(value_); //Cookie cookie=new Cookie("c",value_); //Cookie cookie=new Cookie("c",String.valueOf(value)); //클라이언트로 부터 쿠기 받아오기 Cookie[] cookies=request.getCookies(); String v="0"; String op="+"; if(cookies!=null) { //클라이언트가 쿠키가 있으면 받아와서 사용 그렇지 않을 경우 생성 for(Cookie cookie:cookies) { if("v".equals(cookie.getName())) v=cookie.getValue(); else if("op".equals(cookie.getName())) op=cookie.getValue(); } }/*else { //쿠키가 없을 경우 처리 v="0"; op="+"; } */ if(operator.equals("=")) { //연산 후 출력(이전 저장되어 있는 오퍼레이트를 가져와 계산) int result=0; if(op.equals("+")) { result=Integer.parseInt(v)+value; } else if(op.equals("-")) { result=Integer.parseInt(v)-value; } if(cookies!=null) { for(Cookie cookie:cookies) { if("v".equals(cookie.getName())) { cookie.setValue("0"); response.addCookie(cookie); System.out.println(cookie.getValue()); } else if("op".equals(cookie.getName())) { cookie.setValue("+"); response.addCookie(cookie); } } } System.out.println(result); // "result"라는 속성에 result값을 던져준다. request.setAttribute("result", result); // dd7_proc 자바 파일로 넘겨준다. RequestDispatcher dispatcher = request.getRequestDispatcher("/Add7_proc"); dispatcher.forward(request, response); } else { int imsi = 0; //이전 저장되어 있는 오퍼레이트를 가져와 계산만 하는 작업 그리고 결과를 임시 저장 if(op.equals("+")) { imsi=Integer.parseInt(v)+value; Cookie cookie=new Cookie("v",String.valueOf(imsi)); response.addCookie(cookie); } else if(op.equals("-")) { imsi=Integer.parseInt(v)-value; Cookie cookie=new Cookie("v",String.valueOf(imsi)); response.addCookie(cookie); } //실시간으로 저장소에 저장되는 값을 확인 System.out.println(imsi); //System.out.println("redirect before"); Cookie opcookie=new Cookie("op",operator); response.addCookie(opcookie); response.sendRedirect("add7.html"); //값과 상관없이 화면 전환 } //Cookie cookie=new Cookie("op",operator); //response.addCookie(cookie); //System.out.println("redirect after"); } }
Add7_proc.java 서블릿 파일
더보기package com.iot.web; import java.io.IOException; import java.io.PrintWriter; 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("/Add7_proc") public class Add7_proc extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); // add7.html 내용을 복사해서 갖고오기 파일 내용 시작 out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset=\"UTF-8\">"); out.println("<title>Insert title here</title>"); out.println("</head>"); out.println("<body>"); out.println(" <form action=\"Add7\" method=\"post\">"); out.println(" <input type=\"text\" name=\"value\">"); out.println(" <input type=\"submit\" name=\"operator\" value=\"+\">"); out.println(" <input type=\"submit\" name=\"operator\" value=\"-\">"); out.println(" <input type=\"submit\" name=\"operator\" value=\"=\">"); out.println(" <br>"); out.println("결과 : " +request.getAttribute("result")); out.println(" </form> "); out.println("</body>"); out.println("</html>"); // add7.html 파일 내용 끝 } }
'JAVA > 웹 프로그래밍 - 서블릿' 카테고리의 다른 글
서블릿의 doPost,doGet,Init,sevice 함수 (0) 2020.11.03 Cookie (0) 2020.11.02 HttpSession (0) 2020.11.02 ServletContext (0) 2020.11.01 웹 브라우저에서 수의 덧셈을하고 출력하기 (0) 2020.11.01