티스토리 뷰

1. forward

특정 서블릿에 대한 요청을 다른 서블릿이나 JSP로 넘겨준다. (파라미터를 넘길 수 있다.)

상대방에게 페이지 주소를 숨길 때 사용 할 수 있므며, redirect 보다 성능이 좋다.

URL은 바뀌지않으며, 내부에서만 접근이 가능하다.

ex)

RequestDispatcher rd = request.getRequestDispatcher("/result.jsp");

rd.forward(request, response);

 

2. redirect

다른 페이지로 넘어가도록 한다. (직접 파라미터를 넘길 수 없다.)

요청받게되면 url을 클라이언트에게 전달하고, 클라이언트가(web)  새로운 url을 요청하고 그에 따른 응답을 한다.

URL값이 넘어가기 때문에 길이에 제한이 있다.

즉, 성격이 다른 페이지 서블릿이 그 길을 알려주고 브라우저가 값을 받아오게 하는 것이다.

ex)

response.sendredirect("URL");

 

실습1 - forward

AdditionResult2t.java

프로젝트의 src 에 생성

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
package com.ktds.jmj;
 
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;
 
/**
 * Servlet implementation class AdditionResult2
 */
public class AdditionResult2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AdditionResult2() {
        super();
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String f = request.getParameter("f");
        String s = request.getParameter("s");
        
        int firstNumber = Integer.parseInt(f);
        int secondNumber = Integer.parseInt(s);
        
        int additionResult = firstNumber + secondNumber;
        
        RequestDispatcher rd = request.getRequestDispatcher("/result.jsp");
        request.setAttribute("f", firstNumber);
        request.setAttribute("s", secondNumber);
        request.setAttribute("addResult", additionResult);
        rd.forward(request, response);    
        
    }
 
}
 
cs

calc4.jsp

프로젝트의 WebContent에 생성

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>심플 계산기</title>
</head>
<body>
    <!-- 
        화면에서 사용자로부터 정보를 입력받아, 다른 페이지로 보내줄 수 있다. 
        사용자로부터 정보를 입력받기 위해서는 <form>이라는 태그가 필요하다.
        <form>태그 안에는 사용자가 입력할 수 있는 "입력폼"을 만들어야한다.
        일반적으로 많이 사용되는 것이 <input /> <textarea></textarea>가 있다.
    -->
    <form method="post" action = "/AC_HelloServlet/addition2"> <!--method에 아무것도 안적으면 get/ 무조건post로 -->
    <!-- AdditionServlet 로 확장자를 가린다. 확장자를 숨김으로써 보안이 더 강화된다. -->
        <input type="Text" name="f" placeholder="첫 번째 숫자를 입력하세요." />
        <br />
        <input type="Text" name="s" placeholder="두 번째 숫자를 입력하세요." />
        <br />
        <input type="submit" value="더하기!" />
    </form>
</body>
</html>
cs

result.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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
 
<body>
    Result 페이지 입니다. <br/>
    "${}"는 EL 문법입니다. <br/> 
    ${ f } + ${ s } 의 결과는 ${ addResult } ( ${ f + s } )입니다.
</body>
</html>
cs

 

실습2 - redirect

AdditionResult3.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
package com.ktds.jmj;
 
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;
 
/**
 * Servlet implementation class AdditionResult2
 */
public class AdditionResult3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AdditionResult3() {
        super();
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String f = request.getParameter("f");
        String s = request.getParameter("s");
        
        int firstNumber = Integer.parseInt(f);
        int secondNumber = Integer.parseInt(s);
        
        int additionResult = firstNumber + secondNumber;
        
        response.sendRedirect("/AC_HelloServlet/result.jsp);
        
    }
 
}
 
cs

calc4.jsp

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>심플 계산기</title>
</head>
<body>
    <!-- 
        화면에서 사용자로부터 정보를 입력받아, 다른 페이지로 보내줄 수 있다. 
        사용자로부터 정보를 입력받기 위해서는 <form>이라는 태그가 필요하다.
        <form>태그 안에는 사용자가 입력할 수 있는 "입력폼"을 만들어야한다.
        일반적으로 많이 사용되는 것이 <input /> <textarea></textarea>가 있다.
    -->
    <form method="post" action = "/AC_HelloServlet/addition3"> <!--method에 아무것도 안적으면 get/ 무조건post로 -->
    <!-- AdditionServlet 로 확장자를 가린다. 확장자를 숨김으로써 보안이 더 강화된다. -->
        <input type="Text" name="f" placeholder="첫 번째 숫자를 입력하세요." />
        <br />
        <input type="Text" name="s" placeholder="두 번째 숫자를 입력하세요." />
        <br />
        <input type="submit" value="더하기!" />
    </form>
</body>
</html>
cs

result.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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
 
<body>
    Result 페이지 입니다. <br/>
    "${}"는 EL 문법입니다. <br/> 
    ${ f } + ${ s } 의 결과는 ${ addResult } ( ${ f + s } )입니다.
</body>
</html>
cs

 

실습3 - forward + redirect

AdditionResult3.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
package com.ktds.jmj;
 
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;
 
/**
 * Servlet implementation class AdditionResult2
 */
public class AdditionResult3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AdditionResult3() {
        super();
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String f = request.getParameter("f");
        String s = request.getParameter("s");
        
        response.sendRedirect("/AC_HelloServlet/list?f="+ f + "&s=" + s); // /list는  web.xml의 url pattern
        //response.sendRedirect("/AC_HelloServlet/result.jsp");
        
        
    }
 
}
 
cs

 

AdditionResult4.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
package com.ktds.jmj;
 
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;
 
/**
 * Servlet implementation class AdditionResult2
 */
public class AdditionResult4 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AdditionResult4() {
        super();
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String f = request.getParameter("f");
        String s = request.getParameter("s");
        
        int firstNumber = Integer.parseInt(f);
        int secondNumber = Integer.parseInt(s);
        
        int additionResult = firstNumber + secondNumber;
        
        RequestDispatcher rd = request.getRequestDispatcher("/list.jsp");
        request.setAttribute("f", firstNumber);
        request.setAttribute("s", secondNumber);
        request.setAttribute("addResult", additionResult);
        rd.forward(request, response);
        
    }
 
}
 
cs

 

calc4.jsp

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>심플 계산기</title>
</head>
<body>
    <!-- 
        화면에서 사용자로부터 정보를 입력받아, 다른 페이지로 보내줄 수 있다. 
        사용자로부터 정보를 입력받기 위해서는 <form>이라는 태그가 필요하다.
        <form>태그 안에는 사용자가 입력할 수 있는 "입력폼"을 만들어야한다.
        일반적으로 많이 사용되는 것이 <input /> <textarea></textarea>가 있다.
    -->
    <form method="post" action = "/AC_HelloServlet/addition3"> <!--method에 아무것도 안적으면 get/ 무조건post로 -->
    <!-- AdditionServlet 로 확장자를 가린다. 확장자를 숨김으로써 보안이 더 강화된다. -->
        <input type="Text" name="f" placeholder="첫 번째 숫자를 입력하세요." />
        <br />
        <input type="Text" name="s" placeholder="두 번째 숫자를 입력하세요." />
        <br />
        <input type="submit" value="더하기!" />
    </form>
</body>
</html>
cs

list.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    list 페이지 입니다. <br/>
    "${}"는 EL 문법입니다. <br/> 
    ${ f } + ${ s } 의 결과는 ${ addResult } ( ${ f + s } )입니다.
 
</body>
</html>
cs

공통 - web.xml

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
54
55
56
57
58
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>AC_HelloServlet</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 
  <servlet>
    <servlet-name>AdditionServlet</servlet-name>
    <servlet-class>com.ktds.jmj.AdditionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AdditionServlet</servlet-name>
    <url-pattern>/addition</url-pattern>
  </servlet-mapping>
  
  
  
  
  <servlet>
    <servlet-name>AdditionResult2</servlet-name>
    <servlet-class>com.ktds.jmj.AdditionResult2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AdditionResult2</servlet-name>
    <url-pattern>/addition2</url-pattern>
  </servlet-mapping>
  
  
  
  
  
  <servlet>
    <servlet-name>AdditionResult3</servlet-name>
    <servlet-class>com.ktds.jmj.AdditionResult3</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AdditionResult3</servlet-name>
    <url-pattern>/addition3</url-pattern>
  </servlet-mapping>
  
  
  
  
  <servlet>
    <servlet-name>AdditionResult4</servlet-name>
    <servlet-class>com.ktds.jmj.AdditionResult4</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AdditionResult4</servlet-name>
    <url-pattern>/list</url-pattern>
  </servlet-mapping>
</web-app>
cs

'BackEnd > JSP' 카테고리의 다른 글

[JSP] JSTL, taglib  (0) 2016.02.05
[JSP] JSTL 설치  (0) 2016.02.05
[JSP] list를 이용해서 table 만들기 , import  (0) 2016.02.02
[JSP] table, input, javascript를 이용한 계산기만들기  (2) 2016.02.02
[JSP] 기본적인 JSP 사용법  (3) 2016.02.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함