2013. 8. 16. 10:11
web.xml 문서를 조작하여 서블릿에 정보를 전달하기 위한 용도로 사용되는 인터페이스.

특징과 설정방법은 다음과 같다 :

구 분

적용

범위 설정


ServletConfig


해당 서블릿에서만 사용할 수 있다.
* 필터에서도 사용 가능

<servlet>
  <servlet-name>    </servlet-name>
  <servlet-class>    </servlet-class>
  <init-param>
    <param-name>   </param-name>
    <param-value>   </param-value>
  </init-param>
</servlet>

ServletContext

동일 웹 애플리케이션 내 모든 서블릿(또는  JSP)에서 사용
할 수 있다.
<context-param>
    <param-name>   </param-name>
    <param-value>   </param-value>
</context-param>


만약 서버의 설정을 변경해야 할 때라고 치자. 
해당 값이 자바파일에 명시되어 있다면 그 클래스를 수정하여 다시 컴파일하고 배포도 다시 해야한다.
하지만 ServletConfig나 ServletContext 인터페이스를 이용해 작성하면 xml 수정 후 서버만 리셋하면 된다. 
어느것이 더 편한지는 개발자 쓰기 나름

MVC2 패턴 구현에도 사용되는 듯 하다. 바로가기


● 예제


    test
    com.test1.TestServlet
    
        name
        han
    
    
        age
        20
    

 

    test
    /test

 

    city
    seoul

protected void process(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    ServletConfig config = getServletConfig(); //해당 서블릿에서만 사용가능
    ServletContext context = getServletContext(); //동일한 웹어플리케이션 어디서든 접근가능
         
    String name = config.getInitParameter("name");
    String age = config.getInitParameter("age");
         
    String city = context.getInitParameter("city");
 
          //로그설정
    context.log("로그를 출력합니드아");
 
    resp.setContentType("text/html;charset=utf-8");
    PrintWriter out = resp.getWriter();
         
    out.print("name:" + name + "
"); out.print("age:" + age + "
"); out.print("city:" + city + "
"); }


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

XML 기본구조  (0) 2013.08.16
Tomcat web.xml  (0) 2013.08.16
자바클래스 메서드에 접근  (0) 2013.08.16
서블릿에서 out.print()  (0) 2013.08.16
tag : core  (0) 2013.08.16
Posted by 1+1은?
2013. 8. 16. 10:07




    
        JAVA
        홍길동
        1000
    
    
        TEST
        이기자
        2000
    

booklist : 루트폴더를 의미하며 어떤 단어 사용하던지 선언시점과 종료지점이 일치하기만 하면 된다.
<root>
    ...
</root>


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

ServletConfig, ServletContext  (0) 2013.08.16
Tomcat web.xml  (0) 2013.08.16
자바클래스 메서드에 접근  (0) 2013.08.16
서블릿에서 out.print()  (0) 2013.08.16
tag : core  (0) 2013.08.16
Posted by 1+1은?
2013. 8. 16. 10:06

- 톰캣의 실행환경에 대한 정보를 담당하는 '환경설정' 파일 이다.

- 각종 servlet의 설정과 servlet 매핑, 필터, 인코딩 등을 담당한다.

- web.xml은 톰캣에 있는 모든 web application의 기본설정을 정의한다. 

- web.xml은 각 application이 deploy될 때 각 application의 'WEB-INF/web.xml' deployment descripter에 따라서 처리가 된다.

- 각 application 마다 설정시, web.xml은 파일을 복사해서 필요한 것만 적으면 된다.



● 기본서식

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">


<display-name>프로젝트명</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>


</web-app>



● 태그 종류

- icon : 웹 애플리케이션을 나타내기 위해 IDE나 GUI 툴에서 사용 되는 하나 또는 두 개의 이미지 파일들의 위치를 지정하는데 사용한다. 

- display-name : GUI 툴이 웹 애플리케이션을 표시하기 위해 사용하는 이름을 지정 하는데 사용 

- description : 웹 어플리케이션에 대한 설명을 나타낸다. 

- distributable : distributable 요소가 있다는 것은 웹 어플리케이션이다 중 서버 간에 분산 배치 될 수 있다는 것을 의미한다. 

- context-param : 어플리케이션의 초기화 파라미터를 선언하는데 사용 

- filter : 서블릿이나 jsp 페이지로 들어오는 요청정보를 사전에 걸러내는 기능 

- filter-mapping : 필터를 지정했다면 filter-mapping을 지정하여 하나 이상의 서블릿과 연결함 

- listener : 서블릿2.3 버전으로부터 세션이나 서블릿 컨텍스트가 생성 또는 수정 되거나 소멸되는 것을 알려주는 이벤트 리스너 

- servlet : 서블릿이나 jsp  페이지에  초기화파라미터나사용자url  들을  할당  할  때 사용되는  서블릿이나 jsp  이름을 지정 

- servlet-mapping : 상대 url  경로를 좀  더 쉽게  다루기 위해  기본 url를  변경 할  때 사용 

- session-config : 일정 시간 동안 세션으로 접근이 없을 경우 서버는 메모리를 절약하기 위해 사용하지 않는 메모리를 삭제한다. 세션의 시간 유지 기능 

- mime-mapping : 특정한 mime형을 가진 파일을 웹 어플리케이션에  넣어 두고 싶은  경우 사용 

- welcome-file-list : url이 파일명이 아닌 디렉토리 명으로 받았을 경우 기본적으로 불러올 파일명을 지정하는데 사용 

- error-page : http 상태코드가 반환되거나 예외가 발생했을 때 그 내용을 출력하는 페이지 

- tag-lib : 태그라이브러리 설명자 파일의 별칭을 지정하는데 사용 

- resource-envref : 자원(resource)과  연관되어 관리되는 객체를 선언하는 역할을 한다. 

- resource-ref : resource-ref 요소는 외부에서 참조해야 할 자원을 선언할  때 사용 

- security-constraint : url이 보호 되도록 지정하는 역할을  한다. login-config와  연결되어 사용 

- login-config : 보안된 페이지로 들어가려는 사용자에 대한 서버의 인증 방식을 지정해 준다. 

- security-role : 통합개발 환경에서 보안정보를 좀 더 조작하기 쉽게 만들어준다. 

- env-entry : 웹 어플리케이션의 환경항목을 선언한다. 

- ejb-ref : 엔터프리이즈 빈의 홈에 대한 레퍼런스를 선언 

- ejb-local-ref : 엔터프라이즈 빈의 로컬 홈에 대한 레퍼런스를 선언 



● web.xml을 작성할때 elements의 순서 

 : Tomcat 5.0 이하에서는  elements의 순서 순서를 지키지 않으면 web.xml 에서 오류가 발생 할 수 있다.

    <icon?>, 

    <display-name?>, 

    <description?>, 

    <distributable?>, 

    <context-param*>, 

    <filter*>, 

    <filter-mapping*>, 

    <listener*>, 

    <servlet*>, 

    <servlet-mapping*>, 

    <session-config?>, 

    <mime-mapping*>, 

    <welcome-file-list?>, 

    <error-page*>, 

    <taglib*>, 

    <resource-env-ref*>, 

    <resource-ref*>, 

    <security-constraint*>, 

    <login-config?>, 

    <security-role*>, 

    <env-entry*>, 

    <ejb-ref*>, 

    <ejb-local-ref*> 


예를 들어 <servlet> 태그들을 모두 먼저 작성하고 <servlet-mapping> 태그를 작성해야 한다 :


<servlet>

<servlet-mapping>

<servlet>

<servlet-mapping> 처럼 작성하지 말고


<servlet>

<servlet>

<servlet-mapping>

<servlet-mapping> 처럼 작성 한다.

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

ServletConfig, ServletContext  (0) 2013.08.16
XML 기본구조  (0) 2013.08.16
자바클래스 메서드에 접근  (0) 2013.08.16
서블릿에서 out.print()  (0) 2013.08.16
tag : core  (0) 2013.08.16
Posted by 1+1은?
2013. 8. 16. 10:00

● 표현 언어(EL)에서 자바 클래스의 메소드에 접근하는 방법

 ① 자바의 클래스 파일을 작성한다.

 ② 클래스  파일을 작성하고 나면 태그라이브러리에 대한 설정정보를 담고 있는  TLD 파일을 작성한다.

 ③ web.xml 파일에  TLD 파일을 사용할 수 있는 설정 정보를 추가한다.

 ④ 자바클래스의 메소드에 접근하는  JSP 페이지를 작성한다.


● 표현 언어(EL)에서 자바 클래스의 메소드에 접근하는 방법

  자바 클래스 파일 ↔  TLD파일 ↔ web.xml ↔  JSP 페이지


● 사용 예

1) 클래스 작성

package com.jsp.test;
 
public class Compute  {
    public static int add(String x, String y)  {
       int a = 0;
       int b = 0;
       try {
         a = Integer.parseInt(x);
         b = Integer.parseInt(y);
       }catch(Exception  e)  {} 
       return a + b;
    }
}
2) "elFunctions.tld" 파일을 작성하여 "웹 루트\WEB-INF\tlds" 폴더에 저장한다.


      
     EL에서 함수실행
     1.0
     ELfunctions
     /ELFunctions
     
          x와 y의 합
         add
         com.jsp.test.Compute
         
              int  add(java.lang.String,  java.lang.String)
         
    

3) "웹 루트\WEB-INF\web.xml" 파일 수정


    :
   
         
             /WEB-INF/tlds/elFunctions.tld
         
         
             /WEB-INF/tlds/elFunctions.tld
         
     

4) JSP 페이지 작성 - elFunctionTest.jsp
<%@page contentType="text/html;charset=utf-8"%>
<%@taglib prefix="test" uri="/WEB-INF/tlds/elFunctions.tld" %>
<%request.setCharacterEncoding("utf-8");%>

표현 언어에서 함수사용하기 -두 숫자의 덧셈

X :
/ Y :

합은 : ${test:add(param["x"],param["y"])} 입니다.




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

XML 기본구조  (0) 2013.08.16
Tomcat web.xml  (0) 2013.08.16
서블릿에서 out.print()  (0) 2013.08.16
tag : core  (0) 2013.08.16
서버 도메인 확인  (0) 2013.08.16
Posted by 1+1은?
2013. 8. 16. 09:58


다른 객체들과 마찬가지로 JSP는 내장객체를 톰캣이 미리 생성해두지만

서블릿에서는 작성자가 객체를 직접 구해야한다. out의 PringWriter는 리스폰스에서 가져온다.


PrintWriter out = resp.getWriter();
out.print(" ");


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

Tomcat web.xml  (0) 2013.08.16
자바클래스 메서드에 접근  (0) 2013.08.16
tag : core  (0) 2013.08.16
서버 도메인 확인  (0) 2013.08.16
None Annotation 스프링 MVC 예제 (abstract, multiaction)  (0) 2013.07.29
Posted by 1+1은?
2013. 8. 16. 09:55

core, 코어

기능  : 변수지원, 흐름제어, URL처리

접두어(Prefix)  :  c

directive : <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


EL 지원 기능 : catch, out, remove, set

흐름 제어 기능 : choose, forEach, forTokens, if

URL 관리기능 : import, param, redirect, param, url



목차

■ catch
■ choose, when, otherwise
■ forEach
■ forTokens
■ import
■ if
■ out
■ param
■ redirect
■ set, remove
■ url


■ catch

body 위치에서 실행되는 코드의 예외를 잡아내는 역할을 담당한다.

<c:catch  var="name">

     body  content

</c:catch>

<%@ page contentType = "text/html; charset=utf-8" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<h3>코어</h3>

<h4><c:out></h4>

<pre>

${1+2} <c:out value="${1+2}"/>

${1>3} <c:out value="${1>3}"/>

${1 gt 3} <c:out value="${1 gt 3}"/>


\$표시 <c:out value="${'${'}test}"/>


● escapeXml 속성 기본 값은  false

false:  <c:out value="<b>bold</b>  <,>,&,',\"  "  escapeXml="false"/>

true:   <c:out value="<b>bold</b>  <,>,&,',\"  "  escapeXml="true"/>


● " 큰따옴표 사용주의  ' 작은따옴표로 대치

<c:out  value='<font  color="blue">파랑</font>'/>

<c:out  value='<font  color="blue">파랑</font>'  escapeXml="false"/>


● 기타 예제

<hr><h4><c:set></h4>

set  session  scope  var  "name":  <c:set  var="name"  value="하늘"  scope="session"/>

c:out  name:  <c:out  value="${name}"/>

expression  name:  <%=  session.getAttribute("name")%>

set  page  scope  var  "name":  <c:set  var="name">

   hello

</c:set>

c:out  name:  <c:out  value="${pageScope.name}"/>

c:out  sessionScope.name:  <c:out  value="${sessionScope.name}"/>

expression  name:  <%=  session.getAttribute("name")%>

<hr><h4><c:remove></h4>

remove  session  scope  var  "name":  <c:remove  var="name"  scope="session"/>

expression  name:  <%=  session.getAttribute("name")%>

c:out  sessionScope.name:  <c:out  value="${sessionScope.name}"/>


<hr><h4><c:catch></h4>

<c:catch  var="errmsg">

line1

<%=1/0 %>

line2

</c:catch>

<c:out  value="${errmsg}"/>

</pre>




■ choose - when - otherwise

<c:choose/> 태그는 java의 switch 문과 같지만, 조건에 문자열 비교도 가능하고 쓰임의 범위가 넓다. 또한 <c:if/> 태그에 else가 없기 때문에 이의 대체 기능도 수행한다.

<c:choose>

     body  content 

     (하나 이상의  <when>과 하나 이하의  <otherwise> 서브태그)

       <c:when  test="조건_1">

           body  content

       </c:when>

       <c:when  test="조건_2">

           body  content

       </c:when>

          :

       <c:otherwise>

           conditional  block

       </c:otherwise>

   </c:choose>


● 조건을 판단하는 간단한 예

<%@  page  contentType  =  "text/html;  charset=utf-8" %>

<%@  taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>


<h3>조건</h3>

파라미터 없음:<c:out  value="${empty  param.name}"  />

<h4><c:if test=""></h4>

<c:if  test="${empty  param.name}">

<form>

이름을 적어주세요.<br/>

     <input  type="text"  name="name"/>  <input  type="submit"  value="확인"/>

</form>

</c:if>

<c:if  test="${!empty  param.name}">

    안녕하세요.  <c:out  value="${param.name}"/>님.

</c:if>


<h4><c:choose> <c:when  test="">  <c:otherwise></h4>

<c:choose>

     <c:when  test="${empty  param.name}">

         <form>

        이름을 적어주세요.<br/>

             <input  type="text"  name="name"/>   <input  type="submit"  value="확인"/>

         </form>

     </c:when>

     <c:when  test="${param.name=='admin'}">

        안녕하세요. 관리자님.

     </c:when>

     <c:otherwise>

        안녕하세요.  <c:out  value="${param.name}"/>님.

     </c:otherwise>

</c:choose>


● 기타 예제

<c:choose>

<c:when test="${param.num1%12==0}">

${param.num1 }은 3과 4의 배수<br/>

</c:when>

<c:when test="${param.num1%3==0}">

${param.num1 }은 3의 배수<br/>

</c:when>

<c:when test="${param.num1%4==0}">

${param.num1 }은 4의 배수<br/>

</c:when>

<c:otherwise>

${param.num1 }은 3또는 4의 배수가 아님<br/>

</c:otherwise>

</c:choose>



■ forEach

반복실행 태그

- Syntax 1 : 객체 전체에 걸쳐서 반복

   <c:forEach  [var="varName"]  items="collection"  [varStatus="varStatusName"]

            [begin="begin"]  [end="end"]  [step="step"]>

       body  content

   </c:forEach>


- Syntax 2 : 지정한 횟수만큼 반복

   <c:forEach  [var="varName"]  [varStatus="varStatusName"]

            begin="begin"  end="end"  [step="step"]>

       body  content

   </c:forEach>


<c:forEach/> 태그는 여러 가지로 활용이 가능하다. 원하는 구간만큼 반복할 수도 있고, 객체를 받아와서 그 객체의 길이만큼 반복할 수도 있다.  

begin, end 속성은 시작번호와 끝 번호를 지정하고, step 속성을 이용해서 증가 구간을 정할 수 있다.  var 속성에서 정한 변수로 반복되는 내부 구간에서 사용할 수 있다.


● begin - end

<table>

     <tr><td>Value</td>

       <td>Square</td></tr>

   <c:forEach  var="x"  begin="0"  end="10"  step="2">

     <tr><td><c:out  value="${x}"/></td>

         <td><c:out  value="${x  *  x}"/></td></tr>

   </c:forEach>

</table>


● 컬렉션의 멤버들 사이를 반복할 때 <c:forEach> 태그의 추가 애트리뷰트인 items 애트리뷰트가 사용된다.

<c:forEach var="dto" items="${list}">

이름:${dto.name}, 제목:${dto.subject}<br/>

</c:forEach>


● varStatus은 상태 값을 의미하며 다음의 값을 갖는다.

- current : 현재 아이템

- index : 0부터의 순서

- count : 1부터의 순서

- first : 현재 루프가 처음인지 반환

- last : 현재 루프가 마지막인지 반환

- begin : 시작값

- end : 끝값

- step : 증가값

<c:forEach items="${RESULT}" var="RESULT" varStatus="status"> 

       forEach의 현재 아이템은 : ${status.current}

</c:forEach>


● 기타 예제

<c:forEach var="n" begin="1" end="9">

${param.num}*${n}=${param.num*n}<br/>

</c:forEach>



<c:forEach var="dto" items="${list}">

이름:${dto.name},

제목:${dto.subject}<br/>

</c:forEach>



<c:forEach var="dto" items="${list}" varStatus="s">

이름:${dto.name},

제목:${dto.subject}<br/>

현재아이템:${s.current}<br/>

0부터의순서:${s.index}<br/>

1부터의순서:${s.count}<br/>

처음이냐?:${s.first}<br/>

마지막이냐?:${s.last}<br/>

</c:forEach>



<c:forEach var="dto" items="${lists}">

<dl>

<dd class="num">${dto.num}</dd>

<dd class="subject"><a href="">${dto.subject}</a></dd>

<dd class="name">${dto.name}</dd>

<dd class="created">${dto.created}</dd>

<dd class="hitCount">${dto.hitCount}</dd>

</dl>

</c:forEach>



■ forTokens

<c:forTokens/> 는  java.util.StringTokenizer 를 이용한 것이다

<c:forTokens items="stringOfTokens" delims="delimiters" 

     [var="varName"] [varStatus="varStatusName"]  [begin="begin"]  [end="end"]  [step="step"]>

     body  content

</c:forEach>

<%@  page  contentType  =  "text/html;  charset=utf-8" %>

<%@  taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>


<h3>반복</h3>

<h4><c:forEach></h4>


<c:forEach  var="one"  begin="1"  end="10">

     <c:out  value="${one}"/>

</c:forEach>

<p><b>header</b></p>

<c:forEach  var="h"  items="${header}">

     <c:out  value="${h.key}:${h.value}"/><br/>

</c:forEach>


<h4><c:forTokens></h4>

<c:forTokens  var="one"  items="서울|인천,대전,대구,부산,광주,평양"

             delims=","  varStatus="sts">

     <c:out  value="${sts.count}:${one}"/>·

</c:forTokens>

<hr/>


<c:forTokens  var="one" 

             items="서울|인천,대전,대구,부산,광주,평양"

             delims=",|"  varStatus="sts">

     <c:out  value="${sts.count}:${one}"/>•

</c:forTokens>



■ import

<c:import/> 는 아주 강력한 도구로 웹 어플리케이션 내부의 자원 접근은 물론이고, http, ftp 같은 외부에 있는 자원도 가져와서 페이지 내에 귀속시킨다. 자유롭게 가공할 수도 있고, 편집도 가능하다.

- Syntax 1 : 해당 주소를 바로 출력하거나 String 에 담아놓는다.

<c:import url="url" [context="context"]

         [var="varName"]  [scope="{page|request|session|application}"]

         [charEncoding="charEncoding"]>

    <c:param> 서브 태그 위치

</c:import>


- Syntax 2 : 해당 주소의 컨텐츠를  Reader 객체로

<c:import url="url" [context="context"]

         varReader="varReaderName"

         [charEncoding="charEncoding"]>

     varReader 를 사용하는 액션

</c:import>

<%@  page  contentType  =  "text/html;  charset=utf-8" %>

<%@  taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>


<c:set  var="url"  value="http://www.daum.net/"/>

<c:import  url="${url}"  var="u"/>

<c:out  value="${url}"/> 가져옵니다.

<hr/>

-- 홈페이지 결과 출력<br/>

  <c:out  value="${u}"  escapeXml="false"/>

<hr/>

<c:set  var="url"  value="http://www.naver.com"/>

<c:import  url="${url}"  var="u"/>

<c:out  value="${url}"/> 가져옵니다.

<hr/>

-- 소스 출력<br/>

<pre><c:out  value="${u}"/></pre>

<hr/>

<c:set  var="url"  value="gugu.jsp"/>

<c:import  url="${url}"  var="u">

     <c:param  name="su"  value="5"/>

</c:import>

<c:out  value="${url}"/> 가져옵니다.

<hr/>

<c:out  value="${u}"  escapeXml="false"/>

<hr/>



■ if

조건문을 사용할 때 쓴다.

- Syntax 1 : Body 없는 경우

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>


- Syntax 2 : Body 있는 경우

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>

    body content

</c:if>

<form method="post">

수: <input type="text" name="num">

<input type="submit" value="결과">

</form>

//액션이 없어서 자기 자신에게 parameter를 전송하는 폼


<c:if test="${not empty param.num }">

<c:if test="${param.num % 2 == 0}">

${param.num}은 짝수<br/>

</c:if>

<c:if test="${param.num % 2 != 0 }">

${param.num}은 홀수<br/>

</c:if>



<c:if test="${dataCount==0}">

등록된게시물이음슴

</c:if>


<c:if test="${dataCount!=0}">

${pageIndexList}

</c:if>


  <c:if/> 에서 나온 결과를  varName 변수에 넣고, 나중에 활용이 가능하다. 

  변수의 scope는 임의로 지정할 수 있고, 생략될 경우 기본 값은  page 이며 else 문은 존재 하지 않는다.



● 자바스크립트 제어 

// 자바스크립트가 특정조건에 외부노출되는 것을 막음

<c:if test="${sessionScope.session.userId == dto.userId}">

    function updateBoard(boardNum)

    {

     var url = "<%=cp%>/board/update.action"

    

     location.href = url;

    }

</c:if>



■ out

JSP의 표현식을 대체하는 것으로 가장 많이 사용된다.

- Syntax 1 : body 없는 경우

<c:out value="value" [escapeXml="{true|false}"] [default="기본_값"]  />


- Syntax 2 : body 있는 경우

<c:out value="value" [escapeXml="{true|false}"]  />

     기본_값

</c:out>

  Hello  <c:out  value="${user.username}"  default="Guest"/>!


   <c:out  value="${user.company}"  escapeXml="false"/>


   <c:set  var="timezone"  scope="session">

      <c:out  value="${cookie['tzPref'].value}"  default="CST"/>

   </c:set>


 escapeXml 애트리뷰트 또한 선택사항이다.  

"<",  ">",  "&" 같은 캐릭터가  <c:out> 태그에 의해 아웃풋 될 때 종료되는지의 여부를 제어한다.  

escapeXml이  true로 설정되어 있다면 이 캐릭터들은 상응하는  XML 인터티(<,  >,  &)로 바뀐다.(escapeXml 기본값  true)

 


■ param

보통 import, redirect, url 태그와 같이 쓰이는 태그. "파라미터=값" 형식을 표현한다.

<c:param 속성="값".../>

<c:import  url="/exec/doIt">

   <c:param  name="action"  value="register"/>

</c:import>


// 이 방법은 아래 태그와 같은 효과가 있다 :

<c:import  url="/exec/doIt?action=register"/>



■ redirect

response.sendRedirect()를 대체하는 태그. 컨텍스트를 지정해서 다른 컨텍스트로 이동이 가능하다.

- Syntax 1 :  Body 없는 경우

<c:redirect url="value" [context="context"]/>


- Syntax 2 :  Body 있는 경우 쿼리 스트링 파라미터 지정

<c:redirect url="value" [context="context"]/>

    <c:param> 서브태그

</c:redirect>

<%  response.setContentType("text/html"); %>

<%@  taglib  uri="http://java.sun.com/jstl/core"  prefix="c"%>


<c:redirect url="/test.jsp"/>



■ set, remove

set는 JSP의 setAttribute()와 같은 역할을  한다.  (page|request|session|application) 범위의 변수(속성)를 설정한다.

remove는 JSP의 removeAttribute()와 같은 역할을 한다.  (page|request|session|application) 범위의 변수(속성)를 제거한다. 


- Syntax 1 : scope 에 해당하는 변수에 속성 값을 정한다.

<c:set value="value" var="varName" [scope="{page|request|session|application}"]/>


- Syntax 2 : scope 에 해당하는 변수에  body 값을 정한다.

<c:set var="varName" [scope="{page|request|session|application}"]>

       body  content

</c:set>


- Syntax 3 : 속성 값으로  target 객체의 프로퍼티 값을 정한다.

<c:set value="value" target="target" property="propertyName"/>


- Syntax 4 : body 값으로  target 객체의 프로퍼티 값을 정한다.

<c:set target="target" property="propertyName">

      body  content

</c:set>


scope 속성이 생략될 경우 기본 값은 page 이다.

 


■ url

<c:url/> 태그는 컨텍스트를 자동으로 추가해서 주소를 자동으로 생성해준다.  context 속성이 지정되었을 경우 value와 context 의 값은 /로 시작을 해야  된다. context 속성이 생략되면 당연히 현재의 컨텍스트가 적용된다.

- Syntax 1 : Body 없는 경우

<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"]/>


- Syntax 2 : Body 있는 경우 쿼리 스트링 파라미터 지정

<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"]>

     <c:param> 서브태그

</c:url>

<%  response.setContentType("text/html"); %>

<%@  taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>


<c:url  value="/images/tomcat.gif"/>

<img  src='<c:url  value="/images/tomcat.gif"/>'  />


Posted by 1+1은?
2013. 8. 16. 09:42


 String path = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+cp;


위에서 각 메서드는


getScheme() → http

getServerName() → localhost

getServerPort() → 9090

getContextPath() → test


처럼 값을 가져오며 아래처럼 출력한다.


http://localhost:9090/test

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

서블릿에서 out.print()  (0) 2013.08.16
tag : core  (0) 2013.08.16
None Annotation 스프링 MVC 예제 (abstract, multiaction)  (0) 2013.07.29
MVC 관련 핸들러 매핑 및 컨트롤러  (0) 2013.07.29
액션 태그와 커스텀 태그  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 15:50

AbstractController을 이용한 스프링 컨트롤러 작성

설명


MultiActionController을 이용한 스프링 컨트롤러 작성

예제

설명


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

tag : core  (0) 2013.08.16
서버 도메인 확인  (0) 2013.08.16
MVC 관련 핸들러 매핑 및 컨트롤러  (0) 2013.07.29
액션 태그와 커스텀 태그  (0) 2013.07.29
파입업로드/다운로드  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 15:40




■ Spring MVC의 주요 구성 요소

 

 

- DispatcherServlet

클라이언트의 요청을 전달받는다. Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴 한 결과 값을 View에 전달하여 알맞은 응답을 생성하도록 한다.

 

- HandlerMapping

클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다.

 

- Controller

클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려준다. 스트럿츠의 Action과 동일한 역할을 수행한다.

 

- ViewResolver

Commander의 처리 결과를 보여줄 View를 결정한다.

 

- View

Commander의 처리 결과를 보여줄 응답을 생성한다.

 

 

 

■ HandlerMapping

클라이언트의 요청을 Spring의 DispatcherServlet이 처리하도록 설정했다면, 다음으로 해야 할 작업은 어떤 HandlerMapping을 사용할지의 여부를 지정하는 것이다. HandlerMapping은 클라이언트의 요청을 어떤 Controller가 수행할 지의 여부를 결정해주는데, 구현 클래스는 다음과 같다.

 

- BeanNameUrlHandlerMapping : 요청 URI와 동일한 이름을 가진 Controller 빈을 매핑 한다.

- SimpleUrlHandlerMapping : 패턴과 컨트롤러의 이름을 비교 URI가 패턴에 매칭될 때 지정한 컨트롤러를 사용 한다.

- ControllerClassNameHandlerMapping : URI와 매칭 되는 클래스 이름을 갖는 빈을 컨트롤러로 사용 //잘 쓰지 않음

- DefaultAnnotationHandlerMapping : @RequestMapping 어노테이션을 이용하여 요청을 처리할 컨트롤러를 구한다. //annotation을 사용할 경우 핵심

 

ο  BeanNameUrlHandlerMapping

BeanNameUrlHandlerMapping은 요청 URI와 동일한 이름을 갖는 Controller 빈으로 하여금 클라이언트의 요청을 처리하도록 한다. 예를 들어,http://host/hello.action 과 같은 요청 URL에 대해 "/hello.action" 라는 이름을 가진 Controller 빈이 해당 요청을 처리하도록 한다.

 

다음과 같이 alwaysUseFullPath를 true로 설정 하고 다음과 같이 빈을 설정 한 경우


 
         
     
 
     
     

 이 경우 요청 URL을 처리하는 컨트롤 빈은 다음과 같이 매핑 된다.

 

     - /content/**/*.action 빈

       /content/1/test.action

       /content/top/exam.action

 

    -  /hello/hello.action 빈

       /hello/hello.action

 

     - Ant 경로 패턴

       Ant는 자바 기반의 빌드 도구로서 『?』, 『*』, 『**』를 이용하여 경로 패턴을 명시하고 있으며, BeanNameUrlHandlerMapping과 SimpleUrlHandlerMapping은 Ant의 경로 패턴을 이용하여 요청 URL과 컨트롤의 매핑을 처리 한다.

 

       ? : 1개의 문자와 매칭

       * : 0개 이상의 문자와 매칭

       ** : 0개 이상의 디렉토리와 매칭

 

 

ο  SimpleUrlHandlerMapping

SimpleUrlHandlerMapping은 가장 많이 사용되는 HandlerMapping으로 패턴 매칭을 이용해서 다양한 URL 경로를 컨트롤러에 매핑 시켜준다.

 

SimpleUrlHandlerMapping은 다음 처럼 mappings 프로퍼티를 이용하여 패턴과 컨트롤러 사이의 매핑을 지정한다.


 
          
             contentController
             helloController
         
     
 
     
     

SimpleUrlHandlerMapping의 mappings 프로퍼티는 java.util.Properties 타입이다. mappings 프로퍼티의 값에 전달되는 <prop>의 key는 요청 URL과 매칭 될 Ant 경로 패턴을 입력하며 <prop>의 값에는 매핑될 컨트롤러의 이름을 입력 한다.

 

 

■ MVC 관련 컨트롤러

   ο  Controller 종류

     - Controller (interface)

     - AbstractController

     - MultiActionController

 

 

   ο Controller 인터페이스

Controller를 구현하는 가장 간단한 방법은 Controller 인터페이스를 implements 하는 것이지만, Controller 인터페이스를 직접적 implements 하기 보다는, Controller 인터페이스를 implements 하고 몇 가지 추가적인 기능을 구현하고 있는 클래스들을 상속받아 Controller를 구현하는 것이 일반적이다.

 

org.springframework.web.servlet.mvc.Controller 인터페이스는 다음과 같이 정의되어 있다.


public interface Controller {
           ModelAndView handleRequest(HttpServletRequest request,   HttpServletResponse response)    throws Exception
      }

ο AbstractController 추상 클래스

      Controller 인터페이스를 구현한 추상 클래스로 단순히 클라이언트의 요청을 처리한 뒤 ModelAndView 를 리턴할 경우에 AbstractController 클래스를 상속 받아 컨트롤러를 구현 한다.

 

      AbstractController 클래스는 다음과 같이 handleRequestInternal() 추상 메소드를 선언하고 있으며 AbstractController 클래스를 상속받는 컨트롤러 클래스는 이 메소드를 구현해야 한다.


protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception  

ο MultiActionController

     1) 하나의 Controller에서 여러 개의 요청 처리 지원

         - 연관 된 request를 하나의 controller로 묶을 경우 사용

 

     2) 작성

        - MultiActionController 상속

       - client의 요청을 처리할 메소드 구현

    public[ModelAndView|Map|void] 메소드이름(HttpServletRequest req, HttpServletResponse res[HttpSession|Command])[throws Exception]{

  

    }

 

       - return type : ModelAndView, Map, void 중 하나

       - argument : 

        1번 - HttpServletRequest

        2번 - HttpServletResponse

        3번 - 선택적이며  HttpSession 또는 Command 또는 3번 HttpSession

        4번 - Command

 

    3) MethodNameResolver 등록

       - 역할 : 어떤 메소드가 클라이언트의 요청을 처리할 것인지 결정

       - Spring 설정파일에 <bean>으로 등록

       - controller에서는 property로 주입 받는다.

       - 종류 

         - parameterMethodNameResolver : parameter로 메소드 이름 전송

         - InternalPathMethodNameResolver : url 마지막 경로 메소드 이름으로 사용

         - PropertiesMethodNameResolver : URL과 메소드 이름 mapping을 property로 설정



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

서버 도메인 확인  (0) 2013.08.16
None Annotation 스프링 MVC 예제 (abstract, multiaction)  (0) 2013.07.29
액션 태그와 커스텀 태그  (0) 2013.07.29
파입업로드/다운로드  (0) 2013.07.29
포워딩과 리다이렉트  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 15:21

액션 태그와 커스텀 태그


액션 태그

:  JSP  액션  태그는 클라이언트  혹은  서버에게  어떠한 동작을  행하도록  명령을  내리는  태그로 JSP  페

이지  안에서  자바  빈즈를  사용할  수  있도록  하는  액션  태그와  페이지를  활용할  수  있도록  하는  액션  

태그로 나눌 수  있다.



■  형식

 <jsp:액션태그 속성="값">태그에 들어  있는  내용</jsp:액션태그>

또는

<jsp:액션태그 속성="값" />

JSP  액션  태그는 JSP  태그  형식을  따르지  않고 XML형식을  따른다.  그러므로  시작  태그가

있으면 반드시 끝나는 태그가 있어야 한다. 그리고 액션 태그는 접두어 "jsp:"이  붙어서  "<jsp:"으로  시작해야 한다.


액션  태그에 속성  값만  지정하고  내용이  없을  경우에는, XML규칙에  의해  끝나는  태그를  따로

하지  않고 시작  태그의 마지막 부분을  "/>"으로  마무리 한다.



 //useBean : 객체생성
 //setProperty : 생성된 객체의 property 할당

//DemoVO vo = new DemoVO();
//int num1 = Integer.parseInt(request.getParameter("num1"));
//vo.setNum1(num1);

이름 : <%=vo.getName()%>
내용 : <%=vo.getContent()%>



<jsp:include page="포함시킬 문서 경로" /> //특정 문서를 현재 위치에 포함 시킨다.



커스텀 태그

: 개발자가 직접 개발. 중복되는 것들을 모듈화하며, 복잡한 소스를 간편화 시켜준다.

Posted by 1+1은?