본문 바로가기

WEB

[Server] servlet - servlet 통신

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