Servlet 간 통신
1. Dto, forward
public class StudentDto {
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "StudentDto [name=" + name + ", age=" + age + ", address=" + address + "]";
}
public StudentDto(String name, int age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
}
속성을 private을 가진 Dto를 활용.
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.StudentDto;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
int age = Integer.parseInt(req.getParameter("age"));
String address = req.getParameter("address");
// 전송용 object
StudentDto dto = new StudentDto(name, age, address);
req.setAttribute("student", dto); // 짐싸!
RequestDispatcher rd = req.getRequestDispatcher("world"); rd.forward(req,resp); // 잘가!
}
}
StudentDto 객체를 생성하여 입력 받은 값을 넣고 해당 객체 자체를 Attribute에 넣는다.
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
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.StudentDto;
@WebServlet("/world")
public class WorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=utf-8");
// 짐풀어!
StudentDto st = (StudentDto)req.getAttribute("student");
PrintWriter pw = resp.getWriter();
pw.println("<html>");
pw.println("<head>");
pw.println("<title>servlet</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<p>이름 : " + st.getName() + "</p>");
pw.println("<p>나이 : " + st.getAge() + "</p>");
pw.println("<p>주소 : " + st.getAddress() + "</p>");
pw.println("</body>");
pw.println("</html>");
pw.close();
}
}
전달받은 wordlServlet에서는 Dto 객체에서 받은 값을 화면에 출력해준다.
2. Redirect
resp.sendRedirect("world?name=" + name + "&age=" + age + "&address=" + address);
(보내는 쪽) sendRedirect() 는 데이터를 가지고 가지 않기 때문에 데이터를 넣어서 전달을 해야한다.
String name = req.getParameter("name");
int age = Integer.parseInt(req.getParameter("age"));
String address = req.getParameter("address");
(받는 쪽) 다시 데이터를 받는다.
3. Session
StudentDto dto = new StudentDto(name, age, address);
req.getSession().setAttribute("dto", dto);
resp.sendRedirect("world");
(보내는 쪽) Session에 Attribute dto 자체를 넣어 전달한다.
StudentDto st = (StudentDto) req.getSession().getAttribute("dto");
(받는 쪽)
※ Session과 Cookie
- Cache : 잠깐 잠깐 꺼내 쓸 수 있는 창고
- Session : server에 있는 저장공간. 기한 설정 가능하며 object 형태로 저장한다.
- 예 : 로그인 정보 등
- Cookie : client에 있는 저장공간. 기한 설정 가능하며 String 형태로 저장한다. javascript에서 접근 가능하다.
- 예 : id 저장
예제) 한 페이지에 몇 번 방문했는지 Session에 저장하는 예제
<a href="hello">hello servlet</a>
@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>servlet</title>");
pw.println("</head>");
pw.println("<body>");
HttpSession session = req.getSession(false);
if (session == null) {
session = req.getSession(true);
// 기한 설정
session.setMaxInactiveInterval(30); // 365 * 24* 60 * 60 초단위
session.setAttribute("visited", "1");
pw.println("<p>첫번째 방문입니다</p>");
} else {
String visited = (String) session.getAttribute("visited");
int count = Integer.parseInt(visited);
count++;
pw.println("<p>방문 횟수는 " + count + "번째 입니다");
session.setAttribute("visited", count + "");
}
pw.println("</body>");
pw.println("</html>");
pw.close();
}
getSession(false) : session이 존재하면 현재 session을 반환하고 없으면 null을 반환한다.
getSession(true) : session이 존재하면 현재 session을 반환하고 없으면 새로 생성한다.
getSession() : default는 true값
'WEB' 카테고리의 다른 글
[JSP] 내장객체 - out, request, response, session (0) | 2022.07.01 |
---|---|
[JSP] JSP 개념 (0) | 2022.06.30 |
[Server] servlet 개념 (0) | 2022.06.30 |
[JQuery] Jquery란? (0) | 2022.06.29 |
[JSON] JSON이란? (0) | 2022.06.28 |