JSP-포워딩/리다이렉트 관련 문제

2019년 10월 24일 by Xion

    JSP-포워딩/리다이렉트 관련 문제 목차

Send15.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	
<!--  포워딩 / 리다이렉트 관련한 ★ 중요한 ★실습 -->
<!--  사칙 연산 수행을 위항 정수 입력 페이지를 구성한다. -->
<!--  이 과정에서 연산자를 함께 입력받을 수 있도록 한다. -->
<!--  사용자 최초 요청 페이지 -->
<!--  ->http://localhost:8090/WebApp05/Send15.jsp -->

<!--  데이터 수신 및 연산 전용페이지(send15에서 수신한 데이터로) -->
<!--  ->http://localhost:8090/WebApp05/Forward15.jsp -->
<!--  ->java ->Servlet담당으로 나중에는 변환할 것임. -->

<!--  최종 결과 출력 페이지 -->
<!--  구성한 내용을 최종적으로 -->
<!--  ->http://localhost:8090/WebApp05/Receive15.jsp-->
	<div>
		<h1>JSP를 이용한 데이터 송수신 실습</h1>
		
	</div>
	
	<div>
		<h2>Send15.jsp ● -> Forward15.jsp ○ ->Receive15.jsp ○</h2>
		
	</div>
	
	<div>
		<!-- <form action="Forward15.jsp" method="post"> -->
		<form action="Forward15_1.jsp" method="post">
			정수1<input type="text" name="num1" class="txtNumber">
			<select name="calResult">
				<option value="0" selected="selected">연산선택
				<option value="+">더하기</option>
				<option value="-">빼기</option>
				<option value="*">곱하기</option>
				<option value="/">나누기</option>
			</select>
			정수2<input type="text" name="num2" class="txtNumber">
			
			<button type="submit" >확인</button>
		</form>
	</div>
</body>
</html>

Forward15.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%

	int num1=Integer.parseInt(request.getParameter("num1"));
	int num2=Integer.parseInt(request.getParameter("num2"));
	String calResult=request.getParameter("calResult");
	
	String result="";
	
	if(calResult.equals("+"))
	{
		result=String.format("%d+%d=%d",num1,num2,num1+num2);
	}
	else if(calResult.equals("-"))
	{
		result=String.format("%d-%d=%d",num1,num2,num1-num2);
	}
	else if(calResult.equals("*"))
	{
		result=String.format("%d*%d=%d",num1,num2,num1*num2);
	}
	else if(calResult.equals("/"))
	{
		result=String.format("%d/%d=%d",num1,num2,num1/(double)num2);
	}
	
	request.setAttribute("message",result);
	

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:forward page="Receive15.jsp"></jsp:forward>
</body>
</html>

Receive15.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%

	String strResult=(String)request.getAttribute("message");


%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div>
		<p>최종 페이지</p>
	</div>
	
	
	<div>
		<h2><%=strResult %></h2>	
	
	</div>
</body>
</html>

 

 

------------------------------------------------------------------------------------------------------------------------------

<%@ page contentType="text/html; charset=UTF-8"%>
<%

	request.setCharacterEncoding("UTF-8");
	

	int num1=Integer.parseInt(request.getParameter("num1"));
	int num2=Integer.parseInt(request.getParameter("num2"));
	String calResult=request.getParameter("calResult");
	
	String result="";
	
	if(calResult.equals("+"))
	{
		result=String.format("%d+%d=%d",num1,num2,num1+num2);
	}
	else if(calResult.equals("-"))
	{
		result=String.format("%d-%d=%d",num1,num2,num1-num2);
	}
	else if(calResult.equals("*"))
	{
		result=String.format("%d*%d=%d",num1,num2,num1*num2);
	}
	else if(calResult.equals("/"))
	{
		result=String.format("%d/%d=%d",num1,num2,num1/(double)num2);
	}
	
	request.setAttribute("message",result);
	
	
	//check ~~ 자바 문법으로 바꿔주는 역할.
	RequestDispatcher dispatcher=request.getRequestDispatcher("Receive11.jsp");
	dispatcher.forward(request,response);
	
	/*------------------------------------------------------------------------------------
	■■■ RequestDispatcher 인터페이스 ■■■
	※ 이 인터페이스는 『forward()』와 『include()』만 있다.
	
	※ 처리 과정 및 개념
	 
	   일반적으로 HttpServlet 을 상속받는 클래스... 서블릿
	   
	   이렇게 작성된 클래스 내부에는
	   실제 요청을 서비스하는 『doGet()』과 『doPost()』 메소드가
	   정의되어 있으며 (service() 메소드가 상위 메소드)
	   
	   Servlet Container는 『HttpServlet』의 인스턴스를 생성하고,
	   『init()』 메소드를 실행해주고,
	   이 메소드에 의해 매핑된 URL에 (페이지 요청 방식에 따라)
	   doGet()과 doPost()중 메소드를 호출해 주고(실행시켜 주고)
	   Container가 종료될 때 『destroy()』 메소드를 호출해 주고,
	   관련된 처리 과정이 마무리 된다.
	   
	   즉,Servlet Container가
	   init() ->처음
	   service() ->중간중간 요청이 있을 때 마다
	   destroy() ->마지막
	   메소드를 호출한다
	   (절대 우리가 직접 호출하는 것이 아님 ~!!!!)
	   
	   결국 『HttpServlet은』
	   하나의 인스턴스만 생성되어 멀티 스레딩으로 돌아가게 된다.
	   
	   이렇게 구성되는 『HttpServlet』의 상속된 클래스의 인스턴스는
	   스레드에 안전하게 설계되어야 하고 따라서 스레드를 안전하게 설계하지 않은 경우
	   상위 클래스를 마구 접근하게 되어 에러가 발생할 수 밖에 없다.
	   
	   이와 같은 이유로 환경 설정이나 J2EE 서비스에 관한 냐용은
	   『ServletContext』에서 할 수 있게 된다.
	   (서블릿에 대한 환경 설정, 상태 등을 설정할 수 있는 객체)
	   이 『ServletContext』는 『getServletContext』로만 받을 수 있다.
	   이 『getServletContext』는 동기화가 제대로 구현되어 있을 것이라고
	   예측할 수 있다.
	   그 이유는 멀티 스레드에 안전하게 설계되어 있어야
	   우리가 『ServletConetxt』의 『setAttribute()』나 getAttribute()를 
	   스레드 걱정 없이 마음대로 읽고 쓸 수 있기 때문이다.
	   
	   『ServletContext』의 또다른 커다란 기능 중 하나는
	   다른 서블릿 인스턴스를 가져올 수 있다거나
	   서블릿 환경 설정값을 가져올 수 있는 기능이다.
	   
	   『RequestDispatcher』역시 그 기능 중 하나이다.
	   사전적인 의미로는 ... 요청을 제공하는 도구
	   즉,요청을 보내주는 인터페이스이다.
	-------------------------------------------------------------------------------------*/
%>
<jsp:forward page="Receive15.jsp"></jsp:forward>

'Web(국비) > JSP' 카테고리의 다른 글

[JSP]post방식 데이터 값 넘기기  (0) 2019.10.25
[JSP]RequestDispatcher인터페이스란?  (0) 2019.10.25
JSP  (0) 2019.10.24
포워딩 리다이렉트 차이  (0) 2019.10.24
포워딩과 리다이렉트란?  (0) 2019.10.24