웹개발/jsp

[JSP]#4 내장 객체 및 액션태그 (include, forward)

RBWSN 2015. 3. 23. 03:25
728x90
JSP 의 내장객체중 주로 쓰이는 것들만 보겠다.


우리가 전에썻던 page나 클래스를 상속받지 않고 사용했던것은 내장객체에 이미 정의가 되어있기 때문에 안써도 되는것이다.
내장 객체에는 속성도 따로 있는데


이속성들을 이용하여 서블릿간의 정보를 주고 받을수 있다.

먼저 request 내장객체를 보도록하자


겟파라미터로 파라미터를 얻어올수있는데 리턴값이 각각 다르다.

이 객체를 사용하는 프로그램을 만들어보자 
 먼저 결과창이다


04-1.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
26
<%@ 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>requst 실험 전달폼</title>
</head>
<body>
<h2>성별 나이 선택과목 입력</h2>
<form action="04-1-2.jsp" method="post">
    성별 : <input type="text" name="sex">
    나이 : <input type="text" name="age">
    <br>
    과목 :
    <select name="subject">
        <option value="korean">국어</option>
        <option value="math">수학</option>
        <option value="english">영어</option>
    
    </select><br>
    <input type="submit" value="입력완료">
</form>
 
</body>
</html>
cs

04-1-2.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ 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>requst 결과값 출력폼</title>
</head>
<body>
<% request.setCharacterEncoding("utf-8");%>
<%
String sex = request.getParameter("sex");
String age = request.getParameter("age");
String subject = request.getParameter("subject");
%>
성별 : <%=sex%><br>
나이 : <%=age%><br>
과목 : <%=subject%>
 
</body>
</html>
cs

결과값 출력폼에서 getParameter로 각종정보를 얻어올수 있다.

두번째로는 response 이다.
response객체는 웹 브라우저로의 응답정보를 가지고있다.

주로 헤더정보입력과 리다이렉트등의 기능을 제공하며 기본 메소드는 이렇다


이예제는 리다이렉트를 사용해보도록 하자

리다이렉트는 1의 페이지를 웹 브라우저에 요청하면 sendRedirect에 의해 2의 페이지가 응답되어 화면에 나타나는 방식이다.

요청은1 응답은 2가 한다고 생각하면된다.
결과적으로 1을 실행하면 2가 나타난다



04-2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ 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>리다이렉트 요청</title>
</head>
<body>
<h2>리다이렉트 요청 페이지</h2>
 
<%
response.sendRedirect("04-2-2.jsp");
%>
 
</body>
</html>
cs
04-2-2
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>리다이렉트 응답</title>
</head>
<body>
<h2>리다이렉트 응답페이지</h2>
 
 
 
</body>
</html>
cs
다음의 내장객체는 application내장객체를 보도록 한다.
어플리케이션 객체는 웹 애플리케이션이 실해오디는 서버의 설정정보를 얻거나 이벤트 로그등의 정보와 관련된 기능을 제공한다.

어플리케이션객체의 메소드들이다.
이메소드들을 사용한 예제이다


04-3.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ 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>어플리케이션 메소드 사용</title>
</head>
<body>
<%
String Path = application.getRealPath("/");
String ServerInfo = application.getServerInfo();
%>
 
현재 웹 서버 정보 : <%=ServerInfo%><br>
현재 웹 시스템 경로 : <%=Path%>
 
</body>
</html>
cs

다른 내장객체들은 추후 알아보도록 한다. 

내장객체의 영역은 page, request, session, application 의 유효기간을 가진다.

먼저 page는 웹 브라우저의 페이지로ㅓ 하나의 페이지를 출력한다.

두번째 request 영역은 클라이언트의 요청에따라 그 요청을 공유하는 페이지이다.

session 영역은 하나의 session객체가 생성되고 그 session만의 객체들을 공유하게 된다.


JSP는 페이지의 모듈화 또는 흐름제어를  위해 액션태그를 제공한다. 
또한 자바빈의 사용을위해서도 따로 액션태그를 제공한다.

JSP의 액션태그에 대해서 알아보자.

액션태그는 JSP 페이지의 요소이다. 페이지와 페이지사이의 제어를 이동가능하고 다른페이지의 결과를 현재페이지에 입력도 가능하다.
JSP에서 사용되는 액션태그는 다음과 같다.


여기서는 1,2 번만 알아보도록한다.

액션태그는 XML문법으로써 바디가 있는경우는 시작태그와 종료태그 
바디가 없는경우는 시작태그에 종료태그가 포함되어서 쓰여야한다.

액션태그의 include와 page 의 include는 약간다른데 
액션태그의 include는 처리결과를 포함시키고자 할때 사용한다고 생각하면 될것이다.

include액션태그의 사용법은
포함될 페이지를 
1
2
3
4
<jsp:include page="05-1-2" >
 
</jsp:include>
 
cs

page에 넣으면된다. page는 현재 페이지에 결과가 포함될 페이지명이된다.
page의 값은 표현식사용도 가능하다.
한마디로 
A.jsp에
A코드
include page="B.jsp"
A코드

이렇게 구성되어있다면
A코드를 실행하던중 B.jsp를 실행하고 다시 다음줄의 A코드부터 시작한다고 보면된다.

 


이름과 나이를 입력후 A.jsp내에서 B.jsp를 호출하는것이다.
코드를 보도록하자

05-1.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ 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>include 초기 입력폼</title>
</head>
<body>
<h2>초기 입력폼</h2>
 
<form action="05-1-2A.jsp" method="post" > <%-- A.jsp로 입력값을 보냄 --%>
이름 : <input type="text" name="name">
나이 : <input type="text" name="age"><br>
<input type="submit" value="완료">
</form>
 
 
</body>
</html>
 
cs
05-1-2A.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
26
27
28
 
<%@ 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">
<% request.setCharacterEncoding("utf-8");%>
<title>A.jsp</title>
</head>
<body>
<h2>A.jsp</h2>
<%
String name = request.getParameter("name");
String age = request.getParameter("age");
%>
A페이지 에서의 인클루드 전 출력 이름 : <%=name%> , 나이 : <%=age%>
<hr>
<jsp:include page="05-1-2B.jsp"/<%--액션태크 include B.jsp 호출 --%>
<hr>
A페이지 에서의 인클루드 후 출력 나이 : <%=age%> , 이름 : <%=name%> 
 
 
 
 
 
</body>
</html>
cs
05-1-2B.jsp
<%@ 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> B.jsp</ title>
</head>
<body>
<h2> B.jsp</ h2>
<%
String name = request.getParameter("name"); //B.jsp에서도 A.jsp로 보낸값 사용가능
String age = request.getParameter("age"); //B.jsp에서도 A.jsp로 보낸값 사용가능
%>
B.jsp에서의 이름 : <%=name %> , 나이 <%=age %>



</body>
</html>



B.jsp에서는 한글을 사용할수있는 코드를 넣지않았지만
include로 A.jsp에서 페이지가 보여지므로 한글이 잘나온다.


이번에는 include를 보내는곳에서 값을 전달해보자.

< jsp:param value ="" name=""/>

값을 value 이름은 name에 지정하면된다.

05-2.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
<%@ 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>
<% request.setCharacterEncoding("utf-8");%>
</head>
<body>
<%
String name = "김개동";
String age = "nana";
%>
A페이지 에서의 인클루드 전 출력 이름 : <%=name%> , 나이 : <%=age%>
<hr>
<jsp:include page="05-2-1.jsp" flush="false">
<jsp:param value="<%=name %>" name="nameb"/>
<jsp:param value="<%=age %>" name="ageb"/>
</jsp:include>
<hr>
A페이지 에서의 인클루드 후 출력 나이 : <%=age%> , 이름 : <%=name%> 
</body>
</html>
cs


05-2-1.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 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>
<%
String name = request.getParameter("nameb"); // A.jsp에서 보낸값 사용
String age = request.getParameter("ageb"); //A.jspd에서 보낸값 사용
%>
B.jsp에서의 이름 : <%=name%> , 나이 <%=age%>
</body>
</html>
cs
이렇게 사용이가능하다.

이번에는 forward  액션태그를 보자.

forward는 태그가 지정하는 페이지로 이동하게된다.
사용자가 입력한 값에따라 여러페이지로 이동해야 할 경우 쓰면 좋다.

A가 B를 호출했지만 B안에 forward C가 있어 최종적으로 응답하는 페이지는 C이다.
이페이지를 코드로 나타내어 보자

결과는 이렇다.


입력을 B에서 받은뒤 B에서는 C를 호출하여 최종적으로 C.jsp가 나타내게된다. 코드를보자


05-3.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
26
27
<%@ 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>사용자 입력폼</title>
</head>
<body>
<form action="05-3-1B.jsp" method="post">
이름 : <input type="text" name="name"><br>
나이 : <input type="text" name="age"><br>
 
<select name="subject">
<option value="Korean">국어</option>
<option value="Math">수학</option>
<option value="English">영어</option>
</select>
<input type="submit" value="완료">
 
</form>
 
 
 
 
</body>
</html>
cs


05-3-1B.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ 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">
<%request.setCharacterEncoding("utf-8");%>
<title>B.jsp 호출 페이지</title>
</head>
<body>
호출되지 않습니다.
 
<jsp:forward page="05-3-2C.jsp"/<%-- 포워딩 실행 --%>
 
 
</body>
</html>
cs

05-3-1C.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
<%@ 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>C.jsp 포워딩페이지</title>
</head>
<body>
<h2>포워딩 페이지</h2>
<%
String name = request.getParameter("name");
String age = request.getParameter("age");
String subject = request.getParameter("subject");
%>
포워딩 페이지 C.jsp입니다.<br>
이름 : <%=name%><br>
나이 : <%=age%><br>
과목 : <%=subject%>
 
 
 
</body>
</html>
cs
Forward도 include와 마찬가지로 값전달을 param으로 가능하다.

다음 차에는 JSP페이지의 에러처리를 한번 적어보겠다.




728x90