romworld

Servlet 3 ( request, response, forward,redirect) 본문

JAVA/개념정리

Servlet 3 ( request, response, forward,redirect)

inderrom 2022. 12. 6. 02:57

requestTest01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
	이것은 HTML 주석을 나타낸다.
  -->
  
 <%--
 	이것은 JSP 주석을 나타낸다
 --%> 

<%
	// 이 영역은 JSP문서에서 JAVA명령을 사용할 수 있는 영역으로
	// '스크립트릿'dlfkrh gksek.
	String name = "홍길동";

%>

<%--

	<%= 변수나 수식 %> ==> JSP에서 변수나 수식의 결과를 출력할 때 사용한다.
	
 --%>
<!-- 
	<form>태그의 속성
	 1) action ==> form에서 작성된 데이터를 받아서 처리할 문서명 또는 서블릿 URL
	 2) method ==> 전송방식 (GET 또는 POST ==> (기본 : GET)
	 3) target ==> 응답결과가 나타날 프레임명을 지정한다.
	 4) enctype ==> 서버로 파일을 전송할 때는 이 속성값을 'multipart/form-data'로 지정해야 한다.
	 
 -->

 
 <h2><%= name %>의 Request 연습 form <%= 3 + 4 * 2 %></h2>

<!--  <form action="/webTest/requestTest01.do" method="get"> -->
 <form action="<%=request.getContextPath() %>/requestTest01.do" method="get"> // 이런 방식으로 써도 됨
 	<table border="1">
 		<tr>
 			<td>이 름</td>
 			<td><input type="text" name="username" size="10"></td>
 		</tr>
		<tr>
			<td>직 업</td>
			<td>
				<select name ="job">
					<option value="무직">==무직==</option>
					<option value="회사원">==회사원==</option>
					<option value="전문직">==전문직==</option>
					<option value="학생">==학생==</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>취 미</td>
			<td>
				<input type="checkbox" name="hobby" value="여행">여행 
				<input type="checkbox" name="hobby" value="독서">독서 
				<input type="checkbox" name="hobby" value="게임">게임
				<input type="checkbox" name="hobby" value="배드민턴">배드민턴 
			</td>
		</tr> 
		<tr>
			<td colspan="2" style="text-align : center">
			<input type="submit" value="전송">
			<input type="reset" value="취소">
			</td>
		</tr>	
 	</table>
 
 </form>
 
 
</body>
</html>

RequestTest01.java

package kr.or.ddit.basic.reqNresp;

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("/requestTest01.do")
public class RequestTest01 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//POST방식으로 전달되는 데이터의 문자 인코딩 방식 설정
		request.setCharacterEncoding("utf-8");
		
		// 클라이언트가 요청을 하면서 보내온 데이터 받기
		
		
		
		// getParameter("파라미터명") ==> 해당 파라미터에 설정된 '값'을 가져온다.
		//		==> 가져오는 '값'의 자료형은 'String'이다.
		String userName = request.getParameter("username"); //설정한 name값을 가져옴
		String job = request.getParameter("job");
		
		// getParameterValues("파라미터명") ==> '파라미터명'이 같은 것이 여러개 일 경우에 사용한다.
		//		==> 가져오는 '값'의 자료형이 'String []' (String배열)이다.
		String[] hobbies = request.getParameterValues ("hobby"); // form의 checkbox의 값들 모두 읽어오기
		
		//---------------------------------------------------------
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html charset = 'utf-8'");
		
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8'><title>Request객체 연습</title></head>");
		out.println("<body>");
		
		out.println("<h2>Request 테스트 결과</h2><hr>");
		out.println("<table border='1'>");
		out.println("<tr><td>이 름</td>");
		out.println("<td>" + userName + "</td></tr>");
		
		out.println("<tr><td>직 업</td>");
		out.println("<td>" + job + "</td></tr>");
		
		out.println("<tr><td>취 미</td>");
		out.println("<td>");
			if(hobbies!=null) {
				// 배열 개수만큼 반복처리
				for(String h : hobbies) {
					out.println(h + "<br>");
				}
			}
			
		out.println("</td></tr>");	
		out.println("</table>");	
		
		out.println("<hr>");	
		out.println("<h2>Request 테스트 결과 -2</h2>");	
		
		out.println("<table border='1'>");
		
		out.println("<tr><td>");
		out.println("1. 클라이언트의 IP주소 : " + request.getRemoteAddr() + "<br>");
		out.println("2. 요청 메서드 : " + request.getMethod() + "<br>");
		out.println("3. ContextPath : " + request.getContextPath() + "<br>"); //프로젝트명
		out.println("4. 프로토콜 : " + request.getProtocol() + "<br>");
		out.println("5. URL 정보 : " + request.getRequestURL() + "<br>");
		out.println("6. URI 정보 :" + request.getRequestURI() + "<br>");
		
		out.println("</td></tr>");
		out.println("</table>");
		
			
		out.println("</body></html>");
		
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}

requestTest02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2> Request연습 Form(숫자 입력은 정수형으로 입력하세요.)</h2>
	<form action="/webTest/requestTest02.do" method="post">
	<table>
	<tr>
	<td><input type="text" name="num1" size="10"></td>
	<td>
	<select name ="calc">
		<option value="+">+</option>
		<option value="-">-</option>
		<option value="*">*</option>
		<option value="/">/</option>
		<option value="%">%</option>
	</select> 
	</td>
	<td><input type="text" name="num2" size="10"></td>
	<td><input type="submit" value="확인"></td>
	</tr>
	</table>
	</form>
	
</body>
</html>

<!-- 어머 새롬씨 키보드 너무 좋다 나 주라~ 안돼 내꺼야 -->

RequestTest02.java

package kr.or.ddit.basic.reqNresp;

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("/requestTest02.do")
public class RequestTest02 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");	
		
		
		String calc = request.getParameter("calc");
		
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		
		double res = 0.0; // 계산될 결과가 저장될 변수 선언
		boolean calcOk = true; // 계산 성공 여부를 저장하는 변수(계산 실패 : false저장)
		
		switch(calc) {
		
		case "+" :
			res = num1 + num2;
			break;
		case "-" :
			res = num1 - num2;
			break;
		case "*" :
			res = num1 * num2;
			break;
		case "/" :
			if(num2!=0) {
			res = (double) num1 / num2;
			}else {
				calcOk = false;
			}
			break;
		case "%" :
			if(num2 != 0) {
			res = num1 % num2;
			}else {
				calcOk = false;
			}
			break;
		
		}
		
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8'><title>Request객체 연습2</title></head>");
		out.println("<body>");
		out.println("<h2>계산 결과</h2>");
	//	out.println("<p>" +num1 + calc + num2 + "=" + res + "</p>");
		out.printf("%d %s %d =", num1, calc, num2);
		
		if(calcOk ==true) {
			out.println(res);
		}else {
			out.println("계산 불능 (0으로 나누기...)");
		}
		
		out.println("</body>");
		out.println("</html>");
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

 

Forward, Redirect

 

responseTest01.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>페이지 이동하기 연습</title>
</head>
<body>
<h3>forward방식, redirect방식 연습</h3><hr>

<form action="<%=request.getContextPath() %>/responseTest01.do" method="post">
	forward방식 : <input type="text" name="username">
	<input type="submit" value="확인">
</form>

<hr>

<form action="<%=request.getContextPath() %>/responseTest02.do" method="post">
	redirect방식 : <input type="text" name="username">
	<input type="submit" value="확인">
</form>


</body>
</html>

ResponseTest01.java (forward방식 이용)

package kr.or.ddit.basic.reqNresp;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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("/responseTest01.do")
public class ResponseTest01 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		/*
		 - forward
		    ==> 특정 서블릿에 대한 요청을 다른 서블릿이나 JSP로 넘겨준다.
		    	(같은 Request객체와 Response객체를 사용한다.)
		    ==> URL주소는 처음 요청할 때의 주소가 변경되지 않으며 redirect보다 성능이 좋다.
		    ==> 서버 내부에서만 접근이 가능하다.
		    
		    ==> 이동되는 페이지로 값을 넘기려면 Request객체의 setAttribute()메서드를 이용하여
		        데이터를 저장해서 보낸다.
		        형식) request객체변수.setAttribute("key값", 저장할데이터)
		 */
		
		//String userName = request.getParameter("username");
		
		// Request객체에 데이터 저장하기
		request.setAttribute("tel", "010-1234-5678");
		
		//forward방식으로 이동하기
		// 형식) request.getRequestDispatcher("이동할 문서의 경로");
		//		'이동할 문서의 경로'는 전체 URL중에서 ContextPath이후의 경로를 지정하면 된다.
		//		아래 문서의 전체 URL주소 : http://localhost/webtest/responseForwardTest.do
		
		RequestDispatcher rd = request.getRequestDispatcher("/responseForwardTest.do");
		rd.forward(request, response);
		
		
		
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);
	}

}

ResponseForwardTest.java

package kr.or.ddit.basic.reqNresp;

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("/responseForwardTest.do")
public class ResponseForwardTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
     
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		
		// 처음 요청할 때 가져왔던 파라미터값 구하기
		String userName = request.getParameter("username");
		
		// Request객체의 setAttribute()메서드로 저장했던 데이터는 getAttribute()메서드를 이용해서 가져온다.
		// 형식) Request객체변수.getAttribute("key값");
		String tel = (String) request.getAttribute("tel");
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset=utf-8><title>forward방식연습</title></head>");
		out.println("<body>");
		
		out.println("<h3>Forward 방식 결과</h3><hr>");
		out.println("<table border='1'>");
		out.println("<tr><td>이름</td>");
		out.println("<td>" + userName +"</td></tr>");
		out.println("<tr><td>전화</td>");
		out.println("<td>" + tel +"</td></tr>");
		out.println("</table>");
		out.println("</body></html>");
		
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	
	
	}

}

 

ResponseTest02.java ( Redirect방식 이용)

package kr.or.ddit.basic.reqNresp;

import java.io.IOException;
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("/responseTest02.do")
public class ResponseTest02 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		- redirect방식
			==> 다른 페이지로 제어가 넘어 가도록 한다.
			==> 처음 요청 받은 문서에서 응답시 브라우저에게 '이동할 URL'을 전송하여 브라우저가
				해당 URL로 자동으로 이동 시키는 방식을 말한다.
				이 때의 이동은 무조건 GET방식으로 요청하기 때문에 URL의 길이에 제한이 있다.
			==> 처음 요청할 때 만들어진 Request객체와 Response객체는 redirect할 때 삭제되고
				새로운 Request객체와 Response객체가 만들어져서 재요청을 한다.
				
			==> 현재 문서에 만들어진 데이터를 redirect방식으로 새로운 문서에 전달하려고 하면
				'이동할 URL주소'뒤에 데이터를 붙여서 보내야 한다.
		*/
		
		// 이동할 URL주소 : http://localhost/webTest/responseRedirectTest.do
		
		// redirect는 Request객체를 유지하지 못한다.( 브라우저에서 새롭게 요청하기 때문에...)
		//request.setAttribute("key", "010-9999-7878");
		
		// redirect방식으로 이동하기
		// 형식) Response객체변수.sendRedirect("이동할 URL주소");
		//		'이동할 URL주소'는 전체 URL주소를 기술한다.
		//response.sendRedirect(request.getContextPath() + "/responseRedirectTest.do");
		
		
		// 데이터를 이동할 문서로 보내려면 GET방식으로 보낼 수 있다.
		String name = request.getParameter("username");  // 클라이언트가 보낸 데이터를 받는다.
		String tel = "010-9999-7878";   // 전달할 데이터 
		
		response.sendRedirect(
			request.getContextPath() + "/responseRedirectTest.do?username=" + name + "&tel=" + tel );
		
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

ResponseRedirectTest.java

package kr.or.ddit.basic.reqNresp;

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("/responseRedirectTest.do")
public class ResponseRedirectTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
request.setCharacterEncoding("utf-8");
		
		// redirect 요청할 때 가져왔던 파라미터값 구하기
		String userName = request.getParameter("username");
		String tel = request.getParameter("tel");
		
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html><head><meta charset=utf-8><title>redirect방식연습</title></head>");
		out.println("<body>");
		
		out.println("<h3>sendRedirect 방식 결과</h3><hr>");
		out.println("<table border='1'>");
		out.println("<tr><td>이름</td>");
		out.println("<td>" + userName +"</td></tr>");
		out.println("<tr><td>전화</td>");
		out.println("<td>" + tel +"</td></tr>");
		out.println("</table>");
		out.println("</body></html>");
		
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


		doGet(request, response);
	}

}

 

'JAVA > 개념정리' 카테고리의 다른 글

Cookie 2 ( login)  (0) 2022.12.06
Cookie  (0) 2022.12.06
Servlet 2  (0) 2022.12.06
Servlet  (0) 2022.12.06
Log4j  (0) 2022.12.06
Comments