ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RequestDispatcher
    JAVA/웹 프로그래밍 - 서블릿 2020. 11. 3. 22:12

    아래의 글의 말미에 서블릿과 서블릿에서의 데이터 이동 및 다른 서블릿에서의 데이터 처리를 다룬다고 하였다.

    designatedroom87.tistory.com/277

     

    Cookie

    ServletContext와 HttpSession과 달리 아래에서 ServletContext와 HttpSession에 대한 내용을 참고해보자. designatedroom87.tistory.com/276?category=899787 HttpSession HttpSession에 대하여 알아보자. 우선은..

    designatedroom87.tistory.com

     

    서블릿과 서블릿 간의 데이터를 이동할 때 필요한 것이 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

    댓글

Designed by Tistory.