본문 바로가기
✨ Back-end/Servlet

[Servlet] JSP -> Servlet -> JSP (데이터 받기, 데이터 적재, 데이터 전달)

by 환풍 2023. 2. 13.
728x90

이번에는 좀 어려운 내용으로 공부해보았다.

JSP파일에서 데이터를 Servlet으로 보내고, 데이터를 새로 적재한 후 다시 JSP파일로 전달하는 것이다.

jsp01.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ 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>
<form action="Servlet01" method="get">
    이름 <input type="text" name="name"> <br>
    나이 <input type="text" name="age"> <br>
    <input type="submit" value="전송">
</form>
</body>
</html>
cs

먼저 기본 페이지를 하나 생성해주었다. 이름과 나이로 데이터를 보낼 input 박스를 만들어 전송시킨다.

 

Servlet01.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
 
 
public class Servlet01 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
  
    public Servlet01() {
        super();
       
    }
 
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet() 메소드 실행");
        
        //데이터 받기.
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        System.out.println(name);
        System.out.println(age);
 
        //jsp로 페이지 이동 (2가지 방법)
        
        // 1. result1.jsp로 페이지 이동. 잘안씀.(왜냐? 데이터 못 가져감)
        //response.sendRedirect("result1.jsp");
        
        //데이터 적재
        request.setAttribute("id","java" );
        request.setAttribute("score",80);
        //데이터를 받은 name변수에 있는 것을 js에 다시 보내준다.
        request.setAttribute("name",name);
        
        
        // 2.데이터를 전달할 수 있는 페이지 이동 기법
        RequestDispatcher dispatcher = request.getRequestDispatcher("result1.jsp");
        dispatcher.forward(request, response);
        
        
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }
 
}
 
cs

1.   jsp파일에서 method를 "get"으로 표시해주었기 때문에 doGet( ) 메소드가 실행된다.

2. 24번째 줄과 같이 request.getParameter를 사용하여 jsp01.jsp파일 에서 전달한 데이터를 받아준다.

 

데이터를 적재한 후 다시 jsp파일에 보낼 수도 있고, 하지 않고 보내는 방법도 있다.

데이터 적재는 35번째 줄과 같이 request.setAttribute("String와야함", "Object가능"); 을 이용하여 저장할 수 있다.

 

JSP로 페이지를 이동하는 방법에는 2가지가 있는데,

첫번째, response.sendRedirect("result1.jsp"); 로 할 수 있는 방법이 있다. 하지만 잘 사용하지 않는다.

왜냐하면, JSP파일로 데이터를 못가져가기 때문이다.

두번째, RequestDispatcher dispatcher = request.getRequestDispatcher("result1.jsp");

             dispatcher.forward(request, response); 를 사용할 수 있는 방법이 있다. 이걸로 사용한다..

 

result1.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ 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>
페이지 이동 완료.<br>
${id } <!--서블릿으로 넘어올땐 param.이 필요가없다.  --> <br>
${score } <br>
${name }
</body>
</html>
cs

마지막으로, Servlet에서 데이터를 적재, 전달한 데이터를 result1.jsp에 불러왔다.

11번째 줄의 ${id }와 같이, 원래 js끼리 데이터를 주고 받을 때에는 ${param.id}를 사용해왔다.

하지만 Servlet에서 JSP로 데이터를 전달할 때에는 param을 제외하고 ${id }만 사용해준다.

 

최종 결과화면

JSP - Servlet - JSP

jsp01.jsp  ->  Servlet01.java  -> result1.sjp 로 데이터를 주고 받은 최종 결과화면이다.

위와 같은 방식으로,

객체에서 받은 정보가 맞는지 안맞는지 Sevlet에서 체크하여 접근 가능, 불가 시스템도 만들어보면 좋을것 같다.

반응형

댓글