반응형

웹 애플리케이션은 기본적으로 다음과 같이 동작된다.

 

1. 클라이언트(브라우저)로부터의 request

2. 서버에서 request에 대한 적절한 처리(처리로직 및 DB처리)

3. 서버에서 처리 결과에 대한 response

4. 클라이언트(브라우저)는 받는 response의 데이터를 브라우징(보여줌)

 

결국 브라우저는 사용자가 서버로 요청하고 응답을 받을 수 있는 서비스 창구역할이며 요청을 처리하는 서버의 동작을 정의하는 것이 웹 애플리케이션 개발인 것이다.

 

JSP로 개발 할 때 요청을 처리하기 위해 자동으로 생성되는 기본객체들이 있는데 이를 알아보도록 한다.

 

JSP 내장 객체(기본 객체)
    JSP컨테이너에서 제공해주는 객체(9가지)
    session, exception은 page지시어로 핸들링 가능(그 외 자동 생성)    

 

 

Request 내장객체

클라이언트로부터 요청이 오면 요청 정보를 저장하기 위해 자동으로 생성되는 객체

요청이 오면 생성되고 응답을 하면 없어진다.(요청 당 하나의 객체 생성)

 

예제코드

/WebContent/implicitObject/EX01.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>클라이언트 및 서버정보</title>
</head>
<body>
    클라이언트IP = <%=request.getRemoteAddr() %> <br>
    요청정보 길이 = <%=request.getContentLength() %> <br>
    요청정보 인코딩 = <%=request.getCharacterEncoding() %> <br>
    요청정보 컨텐트 타입 = <%=request.getContentType() %> <br>
    요청정보 프로토콜 = <%=request.getProtocol() %> <br>
    요청정보 전송방식 = <%=request.getMethod() %> <br>
    요청 URL = <%=request.getRequestURL().toString() %> <br>
    요청 URI = <%=request.getRequestURI() %> <br>
    컨텍스트 경로 = <%=request.getContextPath() %> <br>
    서버이름 = <%=request.getServerName() %> <br>
    서버포트 = <%=request.getServerPort() %> <br>
</body>
</html>
cs

 

요청결과

 

request 파라미터 관련 메서드

 

예제코드

/WebContent/implicitObject/EX02.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"%>
<html>
<head>
<title>폼 실습 및 파라미터 요청</title>
</head>
<body>
폼에 데이터를 입력한 후 '전송'버튼을 클릭하세요.
<form action="EX03_viewParameter.jsp" method='post'>
이름 : <input type="text" name="name" size="10"><br></br>
주소 : <input type="text" name="address" size="30"><br></br>
좋아하는 동물 : 
    <input type="checkbox" name="pet" value="dog">강아지<br></br>
    <input type="checkbox" name="pet" value="cat">고양이<br></br>
    <input type="checkbox" name="pet" value="pig">돼지<br></br>
    <br>
<input type="submit" value="전송">
</form>
</body>
</html>
 
cs

 

요청결과

 


위 폼에 입력된 데이터를 서버로 요청 했을 때 parameter를 확인는 테스트

예제코드

/WebContent/implicitObject/EX03_viewParameter.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
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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
    request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<title>요청 파라미터 출력</title>
</head>
<body>
<b>request.getParameter() 메서드 사용</b><br>
 
name 파라미터 = <%= request.getParameter("name"%> <br>
 
address 파라미터 = <%= request.getParameter("address"%><br>
 
<b>request.getParameterValues() 메서드 사용</b>
 
<%
    String[] values = request.getParameterValues("pet");
    if(values != null){
        for(int i = 0; i < values.length; i++){
%>            
            <%= values[i] %>
<% 
        }
    }
%>
<br>
 
<b>request.getParameterNames() 메서드 사용</b>
<%
    Enumeration enumData = request.getParameterNames();
    while(enumData.hasMoreElements()){
        String name = (String)enumData.nextElement();
%>
        <%= name %>
<%
    }
%>
<br>
 
<b>request.getParameterMap() 메서드 사용</b>
<%
    Map parameterMap = request.getParameterMap();
    String[] nameParam = (String[])parameterMap.get("name");
    if(nameParam != null){
%>
name = <%= nameParam[0%>
<%
    }
%>
</body>
</html>
 
cs

 

요청결과

 

전달한 값이 없으므로 모두 null값이다.

다음과 같이 get방식으로 파라미터를 포함하여 함께 요청해본다.

요청결과

get방식 요청: 요청 url에 이어서  ?파라미터명=파라미터값&파라미터명=파라미터값 ...

 

request헤더 관련 메서드

 

예제코드

/WebContent/implicitObject/EX04.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"%>
<%@ page import="java.util.Enumeration" %>
<html>
<head>
<title>헤더 목록 출력</title>
</head>
<body>
<%
    Enumeration enumData = request.getHeaderNames();
    while(enumData.hasMoreElements()){
        String headerName = (String)enumData.nextElement();
        String headerValue = request.getHeader(headerName);
%>
    <%= headerName %> = <%= headerValue %> <br><br>
<%
    }
%>
</body>
</html>
 
cs

 

요청결과

 

 

Response 내장객체

클라이언트에게 응답할 내용을 처리하는 객체
요청에 대한 실행 결과를 클라이언트 측의 브라우저로 되돌려주는 기능
sendRedirect() 메서드를 사용하여 페이지를 이동 시키는 기능을 자주 사용

 

예제코드

/WebContent/implicitObject/EX05.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title> SendRedirect </title>
</head>
<body>
구글 홈페이지로 이동
<%
response.sendRedirect("http://www.google.com");
%>
</body>
</html>
 
cs

 

요청결과

(클라이언트의 요청을 지정된 URL로 다시 요청하도록 응답하기 때문에 브라우저에서 다시 google로 요청하고 구글로부터의 응답 페이지가 보여진다.)

 

PageContext 내장객체

JSP 페이지에서 다른 기본객체에 접근할 수 있는 메서드를 제공한다.

 

예제코드
/WebContent/implicitObject/EX06.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>page Context 기본 객체</title>
</head>
<body>
<%
    HttpServletRequest httpRequest = 
        (HttpServletRequest)pageContext.getRequest();
%>
request 기본객체와 pageContext.getRequest()의 동일여부:
<%= request == httpRequest %>
<br><br>
pageContext.getOut()메서드를 사용한 데이터 출력:
<% pageContext.getOut().println("안녕하세요~"); %>
</body>
</html>
cs

 

요청결과

 

Application 내장객체

JSP페이지의 서블릿 컨텍스트(톰캣이 하나의 프로젝트를 서비스하면 그 서비스 실행 프로젝트 자체를 의미)

웹 어플리케이션당 하나씩 존재
서비스가 종료될 때까지 존재하는 전역객체의 개념

 

웹애플리케이션 전체 영역에서 사용할 수 있는 파라미터를 저장하는 용도로 사용

초기화 파라미터를 생성하도록 하고 불러오는 예제를 통해 이해하도록 하자.

 

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
<?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>JSP_TEST</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>
 
<!-- 초기화 파라미터 설정 -->
<!-- 이것은 애플리케이션이 구동(서비스)되면 읽어서 Application객체에 저장함 --> 
  <context-param>
    <param-name>파라미터1</param-name>
    <param-value>파라미터 값1</param-value>
  </context-param>
  <context-param>
    <param-name>파라미터2</param-name>
    <param-value>파라미터 값2</param-value>
  </context-param>
</web-app>
cs

 

초기화 파라미터와 Application객체를 테스트하는 예제코드

/WebContent/implicitObject/EX07.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"%>
<%@ page import="java.util.Enumeration" %>
<html>
<head>
<title>초기화 파라미터 읽어오기</title>
</head>
<body>
초기화 파라미터 목록:
<ul>
<%
    Enumeration enumData = application.getInitParameterNames();
    while(enumData.hasMoreElements()){
        String initParamName = (String)enumData.nextElement();
    
    %>
    <li><%= initParamName %> = 
        <%= application.getInitParameter(initParamName) %>
    <%
    }
%>
</ul>
</body>
</html>
 
cs

 

요청결과

 

 

application객체를 통해 서버정보를 불러오는 예제코드

/WebContent/implicitObject/EX08.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"%>
<html>
<head>
<title>서버 정보 출력</title>
</head>
<body>
서버정보 : <%= application.getServerInfo() %> <br><br>
서블릿 규약 메이저 버전 : 
        <%= application.getMajorVersion() %> <br><br>
서블릿 규약 마이너 버전 : 
        <%= application.getMinorVersion() %>
</body>
</html>
 
cs

 

요청결과

 

Out 내장객체

JSP페이지의 처리결과를 브라우저로 출력하기 위핸 기본출력객체

response객체로 브라우저에 보낼 값을 출력하는 기능

 

예제코드

/WebContent/implicitObject/EX09.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"%>
<%
    int bufferSize = out.getBufferSize();
    int remainSize = out.getRemaining();
    int usedSize = bufferSize - remainSize;
%>
<html>
<head>
<title>out객체 버퍼 크기 확인</title>
</head>
<body>
버퍼 전체 크기 : <%= bufferSize %> <br><br>
사용한 버퍼크기 : <%= usedSize %> <br><br>
남은 버퍼 : <% out.println(remainSize); %> byte <br><br>
</body>
</html>
cs

 

요청결과

 

Session 내장객체
세션을 저장하는 객체

브라우저당 하나의 객체가 생성되로 객체에는 Session ID라는 값이 만들어짐

이 Session ID를 통해 브라우저들을 식별하고 인증을 처리

브라우저가 웹 서비스를 이용하는 동안 유지하고 있어야 하는 값을 저장하는 용도로 사용

예) 로그인 상태 유지-다른 페이지로 요청하더라도 로그인된 상태를 기억하도록

중요한 객체이므로 여기서는 눈으로만 봐두고 뒤에서 별도로 학습하도록 한다.


Config 내장객체
JSP페이지에서 사용하는 초기 파라미터를 저장하고 있는 객체


Page 내장객체
jsp페이지 자체를 의미(JAVA class의 this 같은 의미)


Exception 내장객체
JSP페이지에서 발생한 에러(예외)를 처리할 때 사용하는 객체
Page Directive에서 isErrorPage=true가 설정 되어 있어야 사용가능

위의 객체들을 알아두고 다음에 나오는 속성(변수)과 속성이 유지되는 범위를 확인하자.

 

속성(Attribute)과 범위(Scope)

 

예제코드

/WebContent/implicitObject/EX10_1.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    pageContext.setAttribute("name""page man");
    request.setAttribute("name""request man");
    session.setAttribute("name""session man");
    application.setAttribute("name""application man");
    System.out.println("firstPage.jsp : ");
    System.out.println("하나의 페이지 속성 :" + pageContext.getAttribute("name"));
    System.out.println("하나의 요청 속성 : " + request.getAttribute("name"));
    System.out.println("하나의 세션 속성 : " + session.getAttribute("name"));
    System.out.println("하나의 애플리케이션 속성 : " + application.getAttribute("name"));
    request.getRequestDispatcher("EX10_2.jsp").forward(request, response);
%>
cs

설명:
    pageContext, request, session, application 객체에 새로운 속성을 추가한 후, secondPage.jsp로 포워딩한다.
    이 페이지에서 설정한 속성 값은 브라우저에 출력할 수 없기 때문에 4개의 값이 콘솔 창에 출력된다.

 

예제코드

/WebContent/implicitObject/EX10_2.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"%>
<html>
<head><title>secondPage</title></head>
<body>
    하나의 페이지 속성 :
    <%=pageContext.getAttribute("name")%>
    <br> 하나의 요청 속성 :
    <%=request.getAttribute("name")%>
    <br> 하나의 세션 속성 :
    <%=session.getAttribute("name")%>
    <br> 하나의 애플리케이션 속성 :
    <%=application.getAttribute("name")%>
    <br>
    <a href="EX10_3.jsp"> 또 다른 페이지 </a>
</body>
</html>
cs

설명:
    firstPage.jsp에서 설정한 속성 값을 브라우저에 출력한다.
    페이지 속성은 제외한 3개의 값이 출력된다.

 

예제코드

/WebContent/implicitObject/EX10_3.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"%>
<html>
<head><title>thirdPage</title></head>
<body>
    하나의 페이지 속성 :
    <%=pageContext.getAttribute("name")%>
    <br> 하나의 요청 속성 :
    <%=request.getAttribute("name")%>
    <br> 하나의 세션 속성 :
    <%=session.getAttribute("name")%>
    <br> 하나의 애플리케이션 속성 :
    <%=application.getAttribute("name")%>
    <br>
</body>
</html>
cs

설명:
    secondPage.jsp의 [또 다른 페이지]를 클릭하여 리다이렉트 방식으로 요청되는 페이지로     firstPage.jsp에서 설정한 속성 값을 브라우저에 출력한다.
    페이지 속성과 요청 속성이 제외된 2개의 값이 출력된다.

 

 

테스트

EX10_01.jsp 요청결과(콘솔에 출력 됨)


그리고 웹 브라우저에는 포워드 지정 된 EX10_2.jsp페이지 내용이 출력 됨

 

또 다른 페이지를 클릭하면 EX10_3.jsp페이지로 이동 결과

 

위 예제를 통해 page, request, session, application 객체가 유지되는 범위를 알아야 한다.

 

여기까지 JSP에서 기본객체에 대한 내용을 확인하였다.

 

이어지는 내용은 JSP에서 유용하게 사용하도록 만들어진 액션태그를 확인해 본다.

 

Action Tag는 XML문법을 따른다.

시작태그와 종료태그 사용

Action Tag 형식
 <jsp: … 속성=“값”> 내용 </jsp:…>

 

ex)
 <jsp:forward page=“yellow.jsp”>
  <jsp:param name=“url” value=“red.jsp”/>
  <jsp:param name=“news” value=“Hello, Action Tag!”/>
 <jsp:forward>

Action Tag에 속성 값만 지정하고 내용이 없는 경우 XML규칙에 의해
   끝나는 태그를 따로 하지 않고 시작태그의 마지막 부분을 “/>”로 닫는다.
형식
<jsp:… 속성=“값”/>
 
 ex)
  <jsp:forward page=“yellow.jsp”/>

 

Forward 액션태그

현재 JSP 페이지에서 URL로 지정한 특정 페이지로 넘어갈 때 사용
 <jsp:forward page=“이동 할 페이지”>
 <jsp:param name=“변수명” value=“값”/>
 </jsp:forward>
 ex)
  <jsp:forward page="relativeURLspec"/>

 

아래의 기존 forward() 메서드를 사용하는 방식보다 액션 태그를 사용하는 것이 소스 길이가 간단하고 가독성이 높은 페이지를 만들 수 있다.
    RequestDispatcher dispatcher = request.getRequestDispatcher(“url”);
    dispatcher.forward(request, response);

orward 실습예제
WebContent/actionTag/forward/EX01_select.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>옵션 선택 화면</title>
</head>
<body>
<form action="<%= request.getContextPath() %>/actionTag/forward/EX01_view.jsp">
보고 싶은 페이지 선택 : 
    <select name="code">
        <option value="A">A 페이지</option>
        <option value="B">B 페이지</option>
        <option value="C">C 페이지</option>
    </select>
<input type="submit" value="이동">
</form>
</body>
</html>
cs

 

요청결과

 

Forwading을 사용하는 페이지 작성

WebContent/actionTag/forward/EX01_view.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String code = request.getParameter("code");
    String viewPageURI = null;
    
    if(code.equals("A")){
        viewPageURI = "/actionTag/forward/viewModule/a.jsp";
    }
    else if(code.equals("B")){
        viewPageURI = "/actionTag/forward/viewModule/b.jsp";
    }
    else if(code.equals("C")){
        viewPageURI = "/actionTag/forward/viewModule/c.jsp";
    }
%>
<jsp:forward page="<%= viewPageURI %>"/>
 
cs

 

Forwarding으로 이동할 페이지들 작성(a.jsp, b.jsp, c.jsp)

WebContent/actionTag/forward/viewModule/a.jsp

1
2
3
4
5
6
7
8
9
10
11
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>A 페이지</title>
</head>
<body>
    이 페이지는
    <b><font size="5">A</font></b> 입니다.
</body>
</html>
cs

 

WebContent/actionTag/forward/viewModule/b.jsp
1
2
3
4
5
6
7
8
9
10
11
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>B 페이지</title>
</head>
<body>
    이 페이지는
    <b><font size="5">B</font></b> 입니다.
</body>
</html>
cs

 

WebContent/actionTag/forward/viewModule/c.jsp
1
2
3
4
5
6
7
8
9
10
11
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>C 페이지</title>
</head>
<body>
    이 페이지는
    <b><font size="5">C</font></b> 입니다.
</body>
</html>
cs

 

실행결과(EX01_select.jsp 실행 후 페이지를 선택하면 해당 페이지로 forward된다.)
 

         

 

include 액션태그 
 다른 jsp페이지를 현재 페이지에 삽입하는 태그
 웹 사이트의 페이지 상단에는 로고나 메인 메뉴, 페이지 하단의 저작권 표시 등과 같이 모든 페이지에서 공통적으로 사용 되는 부분이 있다.
 이런 공통된 내용까지 하나의 JSP 페이지에 기술하는 것 보다 페이지 상단의 로고나 메인 메뉴는 header.jsp에 페이지 하단의 저작권 표시 등은 footer.jsp에 나누어 두고, 본문에 해당되는 내용을 기술하는 페이지에서 이들 header.jsp와 footer.jsp를 동적으로 포함하는 것이 좋다.
 header.jsp와 footer.jsp를 포함시킬 때 <jsp:include> 액션 태그를 사용한다.

 

include Directive & include Actiontag
 두 태그는 같은 기능을 하지만 동작원리가 다르다.

 

include 지시자 : <%@ include file=‘url’ %>
 지정된 페이지가 현재 페이지에 포함되어 하나로 합쳐서 컴파일한 후 실행되는 구조. 

 포함되는 페이지를 독립적인 형태가 아니라 페이지의 일부분으로 구성한다.

 즉, 변수를 서로 공유할 수 있다.

 

include 액션 태그 : <jsp:include>
 컴파일할 때 두 페이지가 하나로 합쳐지지 않고, 제어권이 지정한 페이지로 넘어갔다가 다시 되돌아온다. 서로 독립적으로 컴파일되고 실행되기 때문에 변수를 서로 공유할 수 없다.

 

include 실습 예제코드
WebContetn/actionTag/temp/module/top.jsp
1
2
3
4
5
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
상단 메뉴
<a href="#">HOME</a>
<a href="#">INFO</a>
cs

 

WebContetn/actionTag/temp/module/bottom.jsp
1
2
3
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
하단메뉴: 소개 | 도움말 | 약관 | 사이트맵
cs


 WebContetn/actionTag/temp/module/left.jsp

1
2
3
4
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
좌측메뉴:
 
cs

 

WebContetn/actionTag/temp/template/template.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
29
30
31
32
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String pageTitle = (String) request.getAttribute("PAGETITLE");
    String contentPage = request.getParameter("CONTENTPAGE");
%>
<html>
<head>
<title><%=pageTitle%></title>
</head>
<body>
<table width="400" border="1" cellpadding="2" cellpacing="0">
       <tr>
        <td colspan="2">
        <jsp:include page="/actionTag/temp/module/top.jsp" flush="false" /></td>
       </tr>
       <tr>
        <td width="100" align="top">
        <jsp:include page="/actionTag/temp/module/left.jsp" flush="false" /></td>
        <td width="300" align="top">
                <!-- 내용부분 시작 --> 
        <jsp:include page="<%=contentPage%>" flush="false" />
                <!-- 내용부분 끝 -->
        </td>
       </tr>
       <tr>
        <td colspan="2">
        <jsp:include page="/actionTag/temp/module/bottom.jsp" flush="false" /></td>
       </tr>
</table>
</body>
</html>
cs

 

WebContetn/actionTag/temp/template/infoView.jsp
1
2
3
4
5
6
7
8
9
10
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<table width="100%" border="1" cellpadding="0" cellpacing="0">
    <tr> <td>제품번호    </td>    <td>XXXX    </td> </tr>
    <tr> <td>가격    </td>    <td>10,000원    </td> </tr>
</table>
<jsp:include page="infoSub.jsp" flush="false">
    <jsp:param name="type" value="A" />
</jsp:include>
cs

 

WebContetn/actionTag/temp/template/infoSub.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
29
30
31
32
33
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String type = request.getParameter("type");
    if(type != null){
        
%>
<html>
<head></head>
<body>
<br>
<table width="100%" border="1" cellpadding="0" cellpacing="0">
<tr>
    <td>타입</td>
    <td><b><%= type %></b></td>
</tr>
<tr>
    <td>특징</td>
    <td>
<%
        if(type.equals("A")){ %>
            강한 내구성.
<%        } else if(type.equals("B")){ %>
            뛰어난 대처능력
<%        } %>
    </td>
</tr>
</table>
<% 
    }
%>
</body>
</html>
cs

 

WebContetn/actionTag/temp/template/mainPage.jsp

1
2
3
4
5
6
7
8
9
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setAttribute("PAGETITLE""정보 보기");
%>
<jsp:forward page="template.jsp">
    <jsp:param name="CONTENTPAGE" value="infoView.jsp" />
</jsp:forward>
 
cs

 

 

mainPage.jsp 요청 결과

 

 

자바빈즈(JavaBeans)

자바 클래스 중에서 자바빈즈 규약에 맞게 작성된 클래스다.
멤버 변수와 get/set 메서드로 이루어져 있다.
값을 저장하는 VO로 사용한다.

 

<jsp:useBean>
객체의 이름/사용범위/저장위치 등으로 통해서 객체 생성
JSP의 자바코드에서 action의 id특성에 지정된 값을 통해 객체를 참조한다.

 

형식
<jsp:useBean id="Bean 이름" scope="범위" class="Bean의 저장위치"/>
id : 객체 식별자
scope : 객체 참조 범위
class : 완전한 형태의 클래스 이름

 

<jsp:setProperty>
함께 사용되는 액션태그
Bean의 속성에 값을 설정하는 태그

 

형식
<jsp:useBean id-"Bean 이름" property="속성이름" value="저장할 값"/>
name :  <jsp:useBean> 태그에 정의된 Bean 인스턴스 이름
property : 값을 설정할 Bean 속성이름
(' * '설정 시 ServletRequest안의 모든 인자 중 Bean 속성과
자료형이 일치하는 것을 찾아 모두 지정된다.)
value : Bean 속성에 설정할 값

<jsp:getProperty>
Bean의 속성 값을 얻을 때 사용하는 태그

 

형식
<jsp:getProperty name="Bean 이름" property="속성 이름" />
name : 얻을 Bean객체 이름
property :가져올 속성의 이름

 

자바빈즈 실습예제
/src/javaBeans/sample/SimpleData.java

1
2
3
4
5
6
7
8
9
10
11
12
13
package sample;
 
public class SimpleData {
    private String message;
    public SimpleData(){}
    public void setMessage(String message){
        this.message = message;
    }
    public String getMessage(){
        return message;
    }
}
 
cs

 

WebContent/javaBeans/sample/simpleForm.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<body>
    <h1>간단한 자바빈즈 프로그램</h1>
    <hr color="red"></hr> <br></br>
    <form method="post" action="simpleBean.jsp">
        메시지 :     <input type="text" name="message"> 
                <input type="submit" value="전송">
    </form>
</body>
</html>
 
cs

 

WebContent/javaBeans/sample/simpleBean.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"%>
<%
    request.setCharacterEncoding("UTF-8");
    //String message = request.getParameter("message");
%>
<jsp:useBean id="msg" class="javaBeans.sample.SimpleData" />
<%-- SimpleData msg = new SimpleData(); --%>
<jsp:setProperty name="msg" property="message" />
<%--msg.setMessage(?); --%>
<!-- 주의점 : 기본자료형, String -->
<html>
<head>
<title>빈즈 실습</title>
</head>
<body>
    <h1>간단한 빈즈 프로그램 결과</h1>
    <hr color="red"></hr>
    <br>
    <br>
    <font size="5"> 메세지 : <jsp:getProperty name="msg"
            property="message" /> <%--<=message %> --%>
    </font>
</body>
</html>
cs

 

요청결과

 

위와같이 문자를 입력하고 전송버튼을 클릭한 결과

전달한 파라미터를 빈즈액션태그로 자동으로 처리되어 동작된다.

폼 태그에서 작성한 input태그의 이름이 중요하다.

빈즈로 사용하는 클래스의 멤버 필드이름과 동일해야 자동으로 값이 매핑되어 저장된다.

 

빈즈 종합 예제
/src/javaBeans/Customer.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
package javaBeans;
 
import java.io.Serializable;
 
public class Customer implements Serializable {
    private String name;
    private String email;
    private String phone;
 
    public String getName() { 
        return name; 
    }
    public void setName(String name) { 
        this.name = name; 
    }
    public String getEmail() { 
        return email; 
    }
    public void setEmail(String email) { 
        this.email = email; 
    }
    public String getPhone() { 
        return phone; 
    }
    public void setPhone(String phone) { 
        this.phone = phone; 
    }
}
cs

위 빈즈로 사용할 Customer클래스를 보면 멤버필드의 이름과 getter, setter메서드의 이름 규칙이 중요하다. 나중에 form태그의 input태그들의 name을 위 멤버필드 이름과 동일하게 맞춰주어야 한다.

 

WebContent/javaBeans/register.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
29
30
31
32
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>Customer 가입 페이지</title>
</head>
<body>
<form method="post" action="add.jsp">
    <table border="1" width="300">
        <tr>
            <td width="100">이름</td>
            <td width="200"><input type="text" name="name" size="25" /></td>
        </tr>
 
        <tr>
            <td width="100">이메일</td>
            <td width="200"><input type="text" name="email" size="25" /></td>
        </tr>
 
        <tr>
            <td width="100">전화</td>
            <td width="200"><input type="text" name="phone" size="25" /></td>
        </tr>
 
        <tr>
            <td colspan="2" align="center"><input type="submit" value="가입" />
            </td>
        </tr>
    </table>
</form>
</body>
</html>
cs

 

WebContent/javaBeans/add.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="javaBeans.Customer"%>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="customer" class="javaBeans.Customer" scope="page" />
<jsp:setProperty property="*" name="customer" />
<html>
<head>
<title>Customer 가입 정보</title>
</head>
<body>
    <ul>
        <li>이름 : <jsp:getProperty property="name" name="customer" />
        <li>이메일 : <jsp:getProperty property="email" name="customer" />
        <li>전화 : <jsp:getProperty property="phone" name="customer" />
    </ul>
</body>
</html>
cs

 

register.jsp 요청결과

 

form에 값 입력하고 가입을 눌러본다.

 

위와 같이 클라이언트로부터 전달받는 파라미터를 객체 단위로 사용할 수 있게 해주는 기능이 자바빈즈이다. 이름 매칭을 꼭 중요하게 기억해야 한다. 그렇지 않으면 파라미터가 제대로 전달되지 않을 수 있기 때문이다.

 

추가내용>

앞에서 잠깐씩 나온 forwarding과 redirection의 개념을 다음 슬라이드로 이해하도록 하자.

012345678910111213141516

 

 

반응형

+ Recent posts