sendRedirect란?

java Servlet에서 이동을 위한 메소드이다. 오직 이동만 한다. 데이터를 가지고 가지 않는다.

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.sendRedirect("sample");
	}

 

forward란?

java Servlet에서 이동을 위한 메소드이다.  클라이언트에게 받은 데이터를 가지고 이동한다.

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		RequestDispatcher rd = req.getRequestDispatcher("sample");
		rd.forward(req, resp);
	}        

forward 사용예시

 

html 예시

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

 <h1>정보를 입력해주세요.</h1>
 <form action="packing" method="get">
 이름 : <input type="text" name="name" size="5"><br><br>
 연령대 :
 <select name="age">
 	<option value="10대">10대</option>
 	<option value="20대">20대</option>
 	<option value="30대">30대</option>
 	<option value="40대">40대</option>
 	<option value="50대">50대</option>
 </select><br><br>
 성별 :  
 <input type="radio" name="trans" value="남자">남자
 <input type="radio" name="trans" value="여자">여자<br><br>
 취미 : 
 <input type="checkbox" name="hobby" value="독서">독서
 <input type="checkbox" name="hobby" value="코딩">코딩
 <input type="checkbox" name="hobby" value="영화감상">영화감상
 <input type="checkbox" name="hobby" value="게임">게임
 <input type="checkbox" name="hobby" value="운동">운동<br><br>
 
 <input type="submit" value="제출">
 </form> 
 
</body>
</html>

Java Servlet 예시1 (forward사용)

package server;

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;

import dto.Dto;
@WebServlet("/packing")
public class Packing extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String name = req.getParameter("name");
		String age = req.getParameter("age");
		String trans = req.getParameter("trans");
		String[] hobby = req.getParameterValues("hobby");
		
		// 콘솔에 찍어보기
		System.out.println(name);
		System.out.println(age);
		System.out.println(trans);
		
		if(hobby != null) {
			for (int i = 0; i < hobby.length; i++) {
				System.out.println(hobby[i]);
			}
		}
		
		Dto dto = new Dto(name, age, trans, hobby); // 데이터 연결객체
		req.setAttribute("data", dto); //포장하기 포장박스 : data
		
		//resp.sendRedirect("sample"); 사용시 데이터는 가지고 가지 않습니다.
        
		// 이민가기
		RequestDispatcher rd = req.getRequestDispatcher("sample");
		rd.forward(req, resp);
	}
}

checkbox는 데이터를 배열로 넘겨주기 때문에 getParameterValues를 사용하여야 한다.


Java Dto 예시

package dto;

public class Dto {
	private String name;
	private String age;
	private String trans;
	private String hobby[];
	
	Dto(){
		
	}

	public Dto(String name, String age, String trans, String []hobby) {
		super();
		this.name = name;
		this.age = age;
		this.trans = trans;
		this.hobby = hobby;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getTrans() {
		return trans;
	}

	public void setTrans(String trans) {
		this.trans = trans;
	}

	public String[] getHobby() {
		return hobby;
	}

	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}
}

Java Servlet 예시2

package server2;

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;

import dto.Dto;
@WebServlet("/sample")
public class Unpacking extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html; charset=utf-8");
		
		PrintWriter pw = resp.getWriter();
		
		pw.println("<html>");
		
		pw.println("<head>");
		pw.println("<title>제목</title>");
		pw.println("</head>");
		
		pw.println("<body>");
		
		pw.println("<h1>회원정보</h1>");
		
		// 출력하기
		Dto dto = (Dto) req.getAttribute("data");
		pw.println("<h3>이름 : " + dto.getName() + "</h3>");
		pw.println("<h3>연령대 : " + dto.getAge() + "</h3>");
		pw.println("<h3>성별 : " + dto.getTrans() + "</h3>");
		
		if(dto.getHobby() != null) {
			pw.print("<h3>취미 : ");
			for (int i = 0; i < dto.getHobby().length; i++) {
				if(i < dto.getHobby().length-1)
						pw.print(dto.getHobby()[i]+", ");
				else if(i == dto.getHobby().length-1) 
					pw.print(dto.getHobby()[i]);	
			}
		}
		pw.println( "</h3>");	
			
		pw.println("</body>");
			
		pw.println("</html>");
		pw.close();
	
	}
}

위 예시는 html파일에 작성을 하고 제출을 하면 Packing class에서 데이터를 받고 forward를 사용하여 Unpacking class에서 데이터를 출력하는 예시이다. 위에 언급대로 Packing class에서 sendRedirect 사용할 경우 페이지 이동은 하되, 데이터는 가져가지 않는다. 그렇기 때문에 forword를 사용한다.

 

실행화면

html 화면

 

Packing class 이클립스 console화면

 

Unpacking class 실행화면

 

+ Recent posts