반응형
- redirect 방법
src/main/java에 FirstServlet과 SecondServlet 만들어줌
sendRedirect() 할때는 컨텍스트패스를 붙여줘야함
- HttpServletResponse객체의 sendRedirect() 메소드 이용
- 웹 브라우저에 재요청하는 방식
package sec01.ex01;
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("/first")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("첫 번째 서블릿");
response.sendRedirect("/pro09/second");
}
}
package sec01.ex01;
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("/second")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<h1>sendRedirect 실습</h1>");
}
}
- Refresh 방법
- HttpServletResponse객체의 addHeader() 메소드 이용
- 웹 브라우저에 재요청하는 방식
package sec01.ex02;
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("/first2")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("첫 번째 서블릿");
response.addHeader("Refresh", "3;url=/pro09/second2");
// response.addHeader("Refresh", 경과시각(초);url=요청할 서블릿 또는 JSP);
// 3초후 지정된 페이지로 이동
}
}
package sec01.ex02;
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("/second2")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<h1>Refresh를 이용한 실습</h1>");
}
}
- location 방법
- 자바스크립트 location객체의 href 속성 이용
- 자바스크립트에서 재요청하는 방식
package sec01.ex03;
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("/first3")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("첫 번째 서블릿");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<script>");
out.print("location.href='/pro09/second3");
out.print("</script>");
}
}
package sec01.ex03;
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("/second3")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<h1>location.href를 이용한 실습</h1>");
}
}
- redirect 방식으로 다른 서블릿에 데이터 전달하기
한글이 깨지므로 encode(파라미터 두개 있는것) 해줘야함
package sec01.ex04;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
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("/first4")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = URLEncoder.encode("고길동","utf-8");
response.sendRedirect("/pro09/second4?user_id=admin&user_name="+name);
}
}
package sec01.ex04;
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("/second4")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("user_id");
String name = request.getParameter("user_name"); // 고길동
out.print("<h1>아이디 : " + id + "</h1>");
out.print("<h1>이름 : " + name + "</h1>");
}
}
- dispatch를 이용한 포워딩
- 웹 브라우저를 거치지 않고 바로 서버에 포워딩이 진행됨
- RequestDispatcher 클래스의 forward() 메소드 이용
- 일반적으로 포워딩 기능을 지칭함
- 서블릿이 직접 요청하는 방법
package sec03.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
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("/first5")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
System.out.println("첫 번째 서블릿");
// 매개값 : 이동할 경로
// 컨텍스트 패스를 붙이지 않는다.
RequestDispatcher rd = request.getRequestDispatcher("/second5");
rd.forward(request, response);
}
}
package sec03.ex01;
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("/second5")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<h1>RequestDispatcher 객체 이용</h1>");
}
}
- 바인딩
- 서블릿에서 다른 서블릿 또는 JSP로 대량의 데이터를 공유하거나 전달하고 싶을때 사용
package sec04.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
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("/first6")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
System.out.println("첫 번째 서블릿");
request.setAttribute("address", "서울시 성북구");
response.sendRedirect("/pro09/second6");
}
}
package sec04.ex01;
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("/second6")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String addr = (String) request.getAttribute("address");
out.print("<h1> 주소 : " + addr + "</h1>");
}
}
HttpServletRequest의 유효범위 : 다음 요청까지
- sendRedirect 흐름
첫 번째 서블릿 -> 웹브라우저 -> 두 번째 서블릿(여기서 유효범위 바뀜)
첫 번째 서블릿 -> 두번째 서블릿
forward() 바로 전달하면 유효범위가 바뀌지 않아서 출력됨
- MemberServlet와 ViewServlet 만듬
- setAttribute()
- getAttribute()
package sec04.ex03;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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("/member/list")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<MemberVO> memberList = new ArrayList<MemberVO>();
memberList.add(new MemberVO("김범수", "kim@example"));
memberList.add(new MemberVO("나얼", "na@example"));
memberList.add(new MemberVO("박효신", "park@example"));
memberList.add(new MemberVO("이수", "lee@example"));
request.setAttribute("members", memberList);
RequestDispatcher rd = request.getRequestDispatcher("/member/view");
rd.forward(request, response);
}
}
class MemberVO{
private String name;
private String email;
public MemberVO(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
package sec04.ex03;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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("/member/view")
public class ViewServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
List<MemberVO> list = (List<MemberVO>) request.getAttribute("members");
System.out.println(list);
for(MemberVO vo : list) {
String name = vo.getName();
String email = vo.getEmail();
out.print("<h1>이름 : " + name + "</h1>");
out.print("<h1>이름 : " + email + "</h1>");
}
}
}
반응형
'학습 > JSP' 카테고리의 다른 글
11. ServletContext (0) | 2022.11.08 |
---|---|
10. JSP파일에 출력하기 (0) | 2022.11.08 |
8. 데이터베이스 데이터 조회, 추가, 삭제 (0) | 2022.11.04 |
7. 서블릿의 데이터베이스 연동하기(오라클) (0) | 2022.11.03 |
6. 서블릿 (서블릿으로 요청 시 구구단 출력하기) (0) | 2022.11.02 |
댓글