'Language/JSP'에 해당되는 글 49건

  1. 2014.11.11 config 내장 객체
  2. 2014.11.11 application 기본 객체
  3. 2014.11.11 session 내장 객체
  4. 2014.11.11 out 내장 객체
  5. 2014.11.11 response 내장 객체
  6. 2014.11.11 request 내장 객체
  7. 2014.11.11 pageContext 내장 객체
  8. 2014.11.10 Custom Tag(JSP 1.2, 2.0 변경 사항)
  9. 2014.11.06 커스텀 태그
  10. 2014.01.14 JSP 파라미터[Parameter] 값의 인코딩과 디코딩

config 내장 객체

Language/JSP 2014. 11. 11. 14:14

- config 내장 객체는 javax.servlet.ServletConfig 객체 타입이다.


- ServletConfig 객체는 서블릿이 초기화되는 동안 참조해야 할 정보를 전달해주는 역할을 한다.


- 즉, 서블릿이 초기화될 때 참조해야 하는 정보를 가지고 있다가 전달해 준다.


- config 내장 객체는 컨테이너 당 1개의 객체가 생성된다.


- 같은 컨테이너에서 서비스되는 모든 페이지는 같은 객체를 공유한다.


- config 내장 객체의 메소드


 메소드

설명 

Enumeration getInitParameterNames() 

 모든 초기화 파라미터 이름을 리턴한다.

 String getInitParameter(name)

이름이 name인 초기화 파라미터의 값을 리턴한다. 

String getServletName() 

서블릿의 이름을 리턴한다. 

ServletContext getServletContext() 

실행하는 서블릿 ServletContext 객체를 리턴한다. 


출처 - http://hyeonstorage.tistory.com/85

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

exception 내장 객체  (0) 2014.11.11
page 기본 객체  (0) 2014.11.11
application 기본 객체  (0) 2014.11.11
session 내장 객체  (0) 2014.11.11
out 내장 객체  (0) 2014.11.11
:

application 기본 객체

Language/JSP 2014. 11. 11. 14:14

- application 내장 객체는 웹 어플리케이션의 설정 정보를 갖는 context 와 관련이 있는 객체로, 웹 어플리케이션과 연관이 있다.


- application 객체는 웹 어플리케이션이 실행되는 서버의 설정 정보 및 자원에 대한 정보를 얻어내거나 어플리케이션이 실행되고 있는 동안에 발생할 수 있는 이벤트 로그 정보와 관련된 기능들을 제공한다.


- application 객체는 javax.servlet.ServletContext 객체 타입으로 제공하고 application 객체 형태로 사용한다.


- application 내장 객체의 메소드


 메소드

설명 

String getServerInfo() 

웹 컨테이너의 이름과 버전을 리턴한다. 

String getMimeType(fileName) 

지정한 파일의 MIME 타입을 리턴한다. 

String RealPath(path) 

지정한 경로를 웹 어플리케이션 시스템상의 경로로 변경하여 리턴한다. 

void log(message) 

로그 파일에 message를 기록한다. 


<%


String info = application.getServerInfo();        // Apache Tomcat/5.5.25


String path = application.getRealPath("/");     // C:\project\.......     웹 어플리케이션 루트에 대한 로컬상의 실제 경로를 얻는다.


application.log("로그 기록 : ");                //  C:\apache-tomcat-5.5.25\logs 폴더에 localhost.날짜.log 파일에 로그를 기록한다.


%>


출처 - http://hyeonstorage.tistory.com/84

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

page 기본 객체  (0) 2014.11.11
config 내장 객체  (0) 2014.11.11
session 내장 객체  (0) 2014.11.11
out 내장 객체  (0) 2014.11.11
response 내장 객체  (0) 2014.11.11
:

session 내장 객체

Language/JSP 2014. 11. 11. 14:13

- session 객체는 웹 브라우저의 요청 시, 요청한 웹 브라워저에 관한 정보를 저장하고 관리하는 내장 객체이다.


- session 객체는 javax.servlet.http.HttpSession 객체 타입으로, JSP에서는 session 객체로 사용된다.


- session 객체는 웹 브라우저(클라이언트)당 1개가 할당된다.


- 다른 내장 객체들은 물론 session 객체도 별도의 생성 없이 암묵적으로 사용된다. (page 디렉티브의 session 속성이 'true'로 설정되어야 한다.)


- session 내장 객체의 메소드


 메소드

설명 

String getId() 

해당 웹 브라우저에 대한 고유한 세션 ID를 리턴한다. 

long getCreationTime() 

해당 세션이 생성된 시간을 리턴한다. 

long getLastAccessedTime()

웹 브라우저의 요청이 시도된 마지막 접근시간을 리턴한다. 

void setMaxInactiveInterval(time)

 해당 세션을 유지할 시간을 초단위로 설정한다.

int getMaxInactiveInterval() 

기본값은 30분으로 setMaxInactiveInterval(time) 로 지정된 값을 리턴한다. 

boolean isNew() 

현재의 웹 브라우저가 새로 부른 즉, 새로 생성된 세션의 경우 true 값을 리턴한다. 

void invalidate() 

현재 정보의 유지로 사용 시, 설정된 세션의 속성 값을 모두 제거한다. 주로 세션을 무효화 시킬때 사용 



출처 - http://hyeonstorage.tistory.com/83

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

config 내장 객체  (0) 2014.11.11
application 기본 객체  (0) 2014.11.11
out 내장 객체  (0) 2014.11.11
response 내장 객체  (0) 2014.11.11
request 내장 객체  (0) 2014.11.11
:

out 내장 객체

Language/JSP 2014. 11. 11. 14:12

- out 객체는 JSP 페이지가 생성한 결과를 웹 브라우저에 전송해 주는 출력 스트림이며, JSP 페이지가 웹 브라우저에게 보내는 모든 정보는 out 객체를 통해서 전송된다.


- 여기서 모든 정보는 JSP 스크립트 요소뿐만 아니라 비 스크립트 요소인 HTML, 일반 텍스트도 모두 포함된다.


- out 객체는 javax.servlet.jsp.jspWriter 클래스 타입으로, 주로 많이 사용되는 메소드는 웹 브라우저에 출력을 하기 위한 pritnln() 메소드이다.


out.println("str");    // out 객체가 제공하는 웹 브라워저에 출력하기 위해 사용되는 println() 메소드


- out 기본 객체는 출력 버퍼와도 밀접한 관련이 있다. JSP 페이지가 사용하는 출력 버퍼는 out 기본 객체가 내부적으로 사용하는 버퍼이다.


- out 내장 객체에서 자주 사용되는 메소드


메소드 

설명 

boolean isAutoFlush() 

출력 버퍼가 다 찼을 때 처리 여부를 결정하는 것으로, 자동으로 플러시 할 경우에는 true를 리턴하고, 그렇지 않을 경우 false를 리턴한다. 

int getBufferSize() 

출력 버퍼의 전체 크기를 리턴한다. 

int getRemaining() 

현재 남아 있는 출력 버퍼의 크기를 리턴한다. 

void clearBuffer() 

현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하지 않고 비운다. 

String println(str) 

주어진 str 값을 웹 브라워저에 출력한다. 이때 줄 바꿈은 적용되지 않는다. 

void flush() 

현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고 비운다. 

void close() 

현재 출력 버퍼에 저장되어 있는 내용을 웹 브라우저에 전송하고 출력 스트림을 닫는다. 



<%


out.println("출력 내용 <b> 테스트 </b> 입니다.");    // 출력내용 테스트 입니다.     출력


%>


출처 - http://hyeonstorage.tistory.com/81

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

application 기본 객체  (0) 2014.11.11
session 내장 객체  (0) 2014.11.11
response 내장 객체  (0) 2014.11.11
request 내장 객체  (0) 2014.11.11
pageContext 내장 객체  (0) 2014.11.11
:

response 내장 객체

Language/JSP 2014. 11. 11. 14:11

- response 객체는 웹 브라우저로 응답할 응답 정보를 가지고 있다. 웹 브라우저에 보내는 응답 정보는 HttpServletResponse 객체를 사용한다.


- response 객체는 응답 정보와 관련하여 주로 헤더 정보 입력, 리다이렉트 하기 등의 기능을 제공한다.


- response 내장 객체에서 자주 사용되는 메소드


메소드 

설명 

void setHeader(name, value) 

헤더 정보의 값을 수정하는 메소드로, name에 해당하는 헤더 정보를 value값으로 설정한다. 

void setContentType(type) 

웹 브라우저의 요청의 결과로 보일 페이지의 contentType을 설정한다. 

void sendRedirect(url) 

페이지를 이동시키는 메소드로, url로 주어진 페이지로 제어가 이동한다. 


<%


response.sendRedirect("responseRedirectTest.jsp");    // responseRedirectTest.jsp 로 리다이렉트 시킨다.


%>


출처 - http://hyeonstorage.tistory.com/80

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

session 내장 객체  (0) 2014.11.11
out 내장 객체  (0) 2014.11.11
request 내장 객체  (0) 2014.11.11
pageContext 내장 객체  (0) 2014.11.11
Custom Tag(JSP 1.2, 2.0 변경 사항)  (0) 2014.11.10
:

request 내장 객체

Language/JSP 2014. 11. 11. 14:11

- request 객체는 웹 브라우저에서 JSP 페이지로 전달되는 정보의 모임으로 HTTP 헤더와 HTTP 바디로 구성되어 있다.


- 웹 컨테이너는 요청된 HTTP 메시지를 통해 HttpServletRequest 객체를 얻어내서, 이로부터 사용자의 요구사항을 얻어낸다.


- request 내부 객체의 요청 파라미터 관련 메소드


 메소드

설명 

String getParameter(name) 

파라미터 변수 name에 저장된 변수를 얻어내는 메소드로, 이때 변수의 값은 String으로 리턴된다. 

String[] getParameterValues(name) 

파라미터 변수 name에 저장된 모든 변수값을 얻어내는 메소드로, 이때 변수의 값은 String 배열로 리턴된다. checkbox에서 주로 사용된다.

Enumeration getParameterNames() 

요청에 의해 넘어오는 모든 파라미터 변수를 java.util.Enumeration 타입으로 리턴한다. 




- request 내장 객체의 웹 브라우저, 웹 서버 및 요청 헤더의 정보 관련 메소드


메소드

설명 

String getProtocol() 

 웹 서버로 요청 시, 사용 중인 프로토콜을 리턴한다.

String getServerName() 

웹 서버로 요청 시, 서버의 도메인 이름을 리턴한다. 

String getMethod() 

웹 서버로 요청 시, 요청에 사용된 요청 방식(GET, POST, PUT 등)을 리턴한다. 

String getQueryString() 

웹 서버로 요청 시, 요청에 사용된 QueryString을 리턴한다. 

String getRequestURI() 

웹 서버로 요청 시, 요청에 사용된 URL 로부터 URI 값을 리턴한다. 

String getRemoteAddr() 

웹 서버로 정보를 요청한 웹 브라우저의 IP주소를 리턴한다. 

int getServerPort() 

웹 서버로 요청 시, 서버의 Port번호를 리턴한다. 

String getContextPath() 

해당 JSP 페이지가 속한 웹 어플리케이션의 콘텍스트 경로를 리턴한다. 

String getHeader(name) 

웹 서버로 요청 시, HTTP 요청 헤더(header)의 헤더 이름인 name에 해당하는 속성값을 리턴한다. 

Enumeration getHeaderNames() 

웹 서버로 요청 시, HTTP 요청 헤더(header)에 있는 모든 헤더 이름을 리턴한다. 


<%


String name = request.getParameter("name");       //  "하이언"


String protocol = request.getProtocol();            // HTTP/1.1


String serverName = request.getServerName();     // localhost


String method    = request.getMethod();    // GET


String contextPath = request.getContextPath();    // /hyun/project


String uri    = request.getRequestURI();    // /hyun/project/jsp/requestTest.jsp


String remoteAddr    = request.getRemoteAddr();    // 127.0.0.1

%>


출처 -http://hyeonstorage.tistory.com/79

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

out 내장 객체  (0) 2014.11.11
response 내장 객체  (0) 2014.11.11
pageContext 내장 객체  (0) 2014.11.11
Custom Tag(JSP 1.2, 2.0 변경 사항)  (0) 2014.11.10
커스텀 태그  (0) 2014.11.06
:

pageContext 내장 객체

Language/JSP 2014. 11. 11. 14:10

- pageContext 객체는 현재 JSP 페이지의 컨텍스트(Context)를 나타내며, 주로 다른 내장 객체를 구하거나 페이지의 흐름 제어 그리고 에러 데이터를 얻어낼 때 사용된다.


- pageContext 내장 객체는 javax.servlet.jsp.PageContext 객체 타입으로 ,JSP에서는 pageContext 객체로 사용된다.


- pageContext 내장 객체의 메소드


 메소드

설명 

 ServletRequest getRequest()

페이지 요청 정보를 가지고 있는 request 내장 객체를 리턴한다. 

ServletResponse getResponse() 

페이지 요청에 대한 응답 정보를 가지고 있는 response 내장 객체를 리턴한다. 

JSPWriter getOut() 

페이지 요청에 대한 출력 스트림인 out 내장 객체를 리턴한다. 

HttpSession getSessoin() 

요청한 웹 브라우저의 세션 정보를 담고 있는 session 내장 객체를 리턴한다. 

ServletContext getServletContext() 

페이지에 대한 서블릿 실행 환경 정보를 담고 있는 application 내장 객체를 리턴한다. 

Object getPage() 

page 내장 객체를 리턴한다. 

ServletConfig getServletConfig() 

해당 페이지의 서블릿 초기 정보 설정 정보를 담고 있는 config 내장 객체를 리턴한다. 

Exception getException() 

페이지 실행 중에 발생되는 에러 페이지에 대한 예외 정보를 갖고 있는 exception 내장 객체를 리턴한다. 



<%


JSPWriter outObject = pageContext.getOut();        // out 내장 객체 리턴


%>


출처 - http://hyeonstorage.tistory.com/82

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

response 내장 객체  (0) 2014.11.11
request 내장 객체  (0) 2014.11.11
Custom Tag(JSP 1.2, 2.0 변경 사항)  (0) 2014.11.10
커스텀 태그  (0) 2014.11.06
JSP 파라미터[Parameter] 값의 인코딩과 디코딩  (0) 2014.01.14
:

Custom Tag(JSP 1.2, 2.0 변경 사항)

Language/JSP 2014. 11. 10. 10:04

Custom Tag
-JSTL 에서 지원하지 못하는 Tag 형식을 사용자가 정의해서 사용하는 Tag

1. 장점
-재사용성 : 한번 작성한 tag는 언제든지 재 사용이 가능하다.
-package 배포 : 표준화해서 다른 개발자가에게 package로 배포가 가능하다.
-가독성 : 프로그램의 가독성이 높아진다.
-의존성 : Scriptlet 을 사용하지 않기 때문에 자바 문법에 의존적이지 않는다.

2. 종류
a. JSP 1.2 스타일로 구현한 커스텀 태그
b. JSP 2.0 또는 그 이상 버전의 SimpleTag 를 사용한 커스텀 태그
c. JSP 2.0 또는 그 이상 버전의 태그 파일을 사용한 커스텀 태그

3. 자바 클래스를 기반으로 한 커스텀 태그 만들기
1) 작성순서
a. 커스텀 태그를 정의하는 자바파일의 작성
b. TLD(Tag Library Description) 파일 - 자바의 클래스 파일 등록
c. JSP 페이지에서 Custom Tag 사용

2) javax.servlet.jsp.tagext Interfaces
a. BodyTag
-JSP1.2 에서 제공하는 기존의 Custom Tag 구현시 사용
-태그의 body 내용이 있을 때 사용하는 Custom Tag
b. IterationTag
-JSP 1.2에서 제공하는 기존의 Custom Tag 구현시 사용
-반복적인 작업을 처리하는 Tag
c. Tag
-JSP 1.2에서 제공하는 기존의 Custom Tag 구현시 사용
-단순한 태그 처리시 사용하는 Custom Tag
d. SimpleTag
-JSP 2.0에서 제공하는 기존의 Custom Tag 구현시 사용
-Tag, IterationTag를 하나로 묶어서 쉽게 구현이 가능한 태그

4. JSP 1.2 기반
1) Tag Interface
-단순한 태그 처리시 사용하는 Custom Tag
-TagSupport class 지원
-int doEngTag() : 끝 태그를 만날때 실행됨
-int doStartTag() : 시작 태그를 만날때 실행됨
-Tag getParent() : 부모태그를 구한다.
-void release() : custom tag 를 사용하지 않을 때 실행됨
-void setPageContext(PageContext pc) : custom tag가 포함된 JSP page context를 전달 받는다.
-void setParent(Tag t) : 해당 태그의 부모태그가 존재할 때 부모태그를 설정한다.

2) Iteration Tag
-반복적인 작업을 처리하는 Custom Tag
-Tag interface를 상속받으므로 Tag Interface의 모든 멤버 사용가능
-TagSupport지원
-int doAfterBody() : 태그의 body 내용을 처리한 뒤에 실행

3) BodyTag
-IterationTag 인터페이스를 상속받으므로 IterationTag 인터페이스의 모든 멤버 사용 가능
-BodyTagSupport 지원
-void doInitBody() : body 를 수행하기 위한 준비
-void setBodyContent(BodyContent b) : bodycontent 속성을 지정

4) 사용예
a. Java Class 정의 : WEB-INF/src/
package com.javasoft.libs;
public class HelloTag extends TagSupport {
     public void doStartTag() throws JspException {
           JspWriter out = pageContext.getOut();
           try {
                 out.print("<font size='7' color='red'>");
                 out.print("Hello Custom Tag");
                 out.print("</font>");
           } catch(Exception ex) {
                throw new JspTagException ("Exception Occurrance : " + ex.getMessage());
           }
           return SKIP_BODY;
     }
     public int doEndTag() throws JspTagException{
           return EVAL_PAGE;
     }
}

b. TLD 파일 정의 : WEB-INF/tlds/
<Hello.tld>
<?xml version="1.0" encoding="UTF-8"?>

<taglib xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://java.sun.com/xml/ns/j2ee"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
            version="2.0">
                 <description>JSP1.2 Custom Tag Example</description>
                 <display-name>간단한 JSP 1.2 커스텀 태그 예제</display-name>
 <tlib-version>1.0.0.0</tlib-version>
 <short-name>mytag</short-name>
 
 <tag>
  <name>hello</name>
  <tag-class>com.javasoft.libs.HelloTag</tag-class>
  <body-content>empty</body-content>
 </tag>      
</taglib>

c. web.xml 수정 <----JSP 2.0 이상에서는 할 필요없음
<taglib>
    <taglib-uri>/WEB-INF/tlds/hello.tld<taglib-url>
    <taglib-location>/WEB-INF/tlds/hello.tld<taglib-url>
</taglib>

d. JSP 에서 사용
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="mytag" uri="/WEB-INF/tlds/mytaglib.tld" %>
<html>
<body>
 <mytag:hello/>.
</body>
</html>

5. JSP 2.0 기반 
1) Simple Tag
-body 의 사용여부와 상관없이 simpleTag 인터페이스 사용
-SimpleTagSupport 클래스를 사용하여 Custom tag 작성
-void doTag() : custom tag 를 만나면 살행된다.
-protected JspFragment getJspBody() : JspFrament 객체로 customtag의 body를 처리
-protected JspContext getJspContext() : JspContext 객체를 얻는다.

2) 사용예
a.  Java Class 정의 <--여기만 틀림
package com.javasoft.libs;
public class SimpleTag extends SimpleTagSupport {
     public void doTag() throws JspException {
           JspWriter out = getJspContext().getOut();
           try {
                 out.print("<font size='7' color='red'>");
                 out.print("Simple Custom Tag");
                 out.print("</font>");
           } catch(Exception ex) {
                throw new JspTagException ("Exception Occurrance : " + ex.getMessage());
           }
           return SKIP_BODY;
     }
}

6. Tag 파일을 기반으로 하는 Custom Tag
1) 개요
a. Tag File
-Custom Tag를 정의한 파일로 Custom Tag 당 하나의 Tag File이 매핑됨
b. Jsp Page
-해당 Custom Tag를 사용하는 Jsp Page

2) 작성방법
- Custom Tag 를 정의한다.
- 확장자는 .tag 를 사용한다.
-<%@ tag %> directive 를 사용한다.
-Tag Handler 로 변환되어 처리된다.
-jsp와 동일한 방식으로 같은 문법을 사용하여 작성한다.

3) Tag File Directive
a. taglib : JSP 페이지의 taglib와 동일한 기능을 수행
b. include :JSP 페이지의 include 와 동일한 기능, 단 tag file 에 맞는 문법 사용해야
c. tag : JSP 페이지의 page directive 와 동일, tag 파일의 설정 지원
d. attribute : tag file 에서 custom tag의 속성을 명시
e. variable : EL을 명시

4) tag Directive
-display-name : tag file의 확장자를 제외한 파일명
-body-content : 태그의 body의 내용에 대한 정보를 제공, empty | tagdependent | scriptless 중 하나의 값을 설정
-dynamic-attributes : 해당 태그의 동적인 속성을 지원, 이름과 값의 쌍이 map 으로 저장
-small-icon : 이미지 파일의 태그소스파일로부터 상대적인 경로를 기술
-large-icon : 이미지 파일의 태그소스파일로부터 상대적인 경로를 기술
-description : 태그의 설명
-example : 해당 액션이 사용될 때의 예제
-lanaguge
-import
-pageEncoding

7. body 가 있는 tag file 작성하기
1) body-content 속성 설정
a. tagdependent - custom tag의 내용을 처리하지 않고 그대로 사용
b. scriptless : EL 요소나 action tag 의 처리결과를 사용
2)<jsp:doBody> tag 를 사용함
a. <jsp:invoke>tag 와 유사
b. var : 속성의 이름을 저장하기 위한 변수
c. scope : 속성변수가 유지되는 범위를 설정

8. <%@ attribute %> tag
1) custom tag의 속성을 명시
2) 속성
a. description : 속성에 대한 설명
b. name : 속성의 이름, 중복을 허용하지 않음, 필수 항목
c. required : 속성의 필수여부를 설정, true | false로 설정
d. rtexprvalue : 속성의 값으로 표현식이 사용 가능한가의 여부를 결정
e. type : 속성의 타입을 기술, java.lang.String 이 기본
f. fragment : 속성값을 전달할 때 사용, JspFragment를 사용하는 경우,  true로 설정

9. <%@ variable %> Directive
1) EL 변수를 명시하는 경우에 사용
2) 속성
a.  description : 속성에 대한 설명
b. name-given / name-from-attribute : 태그파일을 사용할 페이지에서 사용할 EL의 변수이름, 두가지 속성중 하나만 기술
c. alias name-from-attribute : 속성을 사용하는 경우 반드시 기술해야 하는 속성, custom tag의 body 에서 사용될 변수를 정의
d. declare : 변수의 선언과 관계없이 기본값은 true
e. scope : 변수의 범위를 설정, AT_BEGIN | AT_END | NESTED(default)


출처 - http://seemoon.tistory.com/138

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

request 내장 객체  (0) 2014.11.11
pageContext 내장 객체  (0) 2014.11.11
커스텀 태그  (0) 2014.11.06
JSP 파라미터[Parameter] 값의 인코딩과 디코딩  (0) 2014.01.14
JSP 내부 _jspService 메서드의구조  (0) 2013.12.15
:

커스텀 태그

Language/JSP 2014. 11. 6. 14:01

사용자 정의 태그를 만들어서 사용할 수 있다.
사용 방법은 EL에서 함수를 만드는 방법과 유사하나 조금 더 복잡한 부면이 있다.
커스텀 태그를 만들기 위해서는 tld 파일과 java class 파일이 필요하다.
예제로 유저에게 랜덤하게 조언을 해 주는 커스텀 태그 소스를 보면 이해하는데 도움이 된다.(소스는 역시 Head & First Servelet & JSP에서 사용된 것이다.)

우선 tld 파일은 EL과 마찬가지로 WEB-INF 밑에 작성한다. 이름은 myCustomTag.tld로 한다.

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

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">

<tlib-version>0.9</tlib-version>

<short-name>RandomTags</short-name>
<function>
    <name>rollIt</name>
    <function-class>com.example.DiceRoller</function-class>
    <function-signature>int rollDice()</function-signature>
</function>

<uri>randomThings</uri>
<tag>
    <description>random advice</description>
    <name>advice</name>
    <tag-class>com.example.AdvisorTagHandler</tag-class>
    <body-content>empty</body-content>
    <attribute>
        <name>user</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
</tag>
</taglib>


태그 이름은 <name> 태그의 내용을 사용하며 해당 태그가 호출될 경우 사용하는 java class 파일은 <tag-class> 태그에 있는 클래스를 사용한다.
<body-content>가 empty인 것은 몸체가 없이 사용한다는 뜻이며, 속성으로 사용되는 것으로 user라는 것이 있다는 의미이다.
rtexprvalue가 true인 것은 EL과 같은 표현식(스크립팅, 표준액션 포함) 값이 들어갈 수 있다는 뜻이다. 만일 rtexprvalue가 false라면 EL 표현식은 사용 불가이다.
위 내용을 jsp 페이지에서 커스텀 태그로 사용한다면 아래와 같이 사용할 수 있다.

<%@ taglib prefix="mine" uri="randomThings" %>

<c:set var="userName" value="오봉근"></c:set>
<mine:advice user="${userName}" />


위와 같이 쓰게 된다면 AdvisorTagHandler 클래스에서는 user라는 변수를 사용하여 어떤 액션을 하게 될 것이다.
AdvisorTagHandler 클래스의 소스는 아래와 같다.

com.example.DiceRoller.java 파일
package com.example;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class AdvisorTagHandler extends SimpleTagSupport {
    private String user;
    
    public void doTag() throws JspException, IOException {
        getJspContext().getOut().write("Hello " + user + " <br>");
        getJspContext().getOut().write("Your advice is : " + getAdvice());
    }
    
    public void setUser(String user) {
        this.user = user;
    }
    
    String getAdvice() {
        String[] adviceStrings = {"That color's not working for you", "You should call in sick", "You might want to rethink that haircut."};
        int random = (int) (Math.random() * adviceStrings.length);
        
        return adviceStrings[random];
    }
}


위 클래스에서 주의 해야 할 점은 doTag 메소드이다.
JSP가 태그를 실행하게 되면 컨테이너는 자동으로 doTag 메소드를 실행하게 된다. EL에서 메소드 명을 지정할 수 있었던 것과 다르다.
또 주의해서 볼 것은 setUser 메소드이다. 이름에서 볼 수 있듯이 자바 빈 프로퍼티 명명 규칙을 따서 사용하게 된다. 즉 커스텀 태그에서 사용하는 attribute의 이름을 빈 프로퍼티로 사용하게 된다.

태그 몸체에 들어갈 수 있는 내용들은 아래와 같다.

<body-content>empty</body-content>
=> 몸체를 가질 수 없다.

<body-content>scriptless</body-content>
=> 스크립팅(스크립틀릿, 스크립팅 표현식, 선언문)은 올 수 없다. 하지만 템플릿 텍스트, EL, 커스텀 태그, 표준 액션은 가능하다.

<body-content>tagdependent</body-content>
=> 태그 몸체를 그냥 텍스트로 취급한다.

<body-content>JSP</body-content>
=> JSP 안에 들어갈 수 있는 것이라면 무엇이든지 가능하다.


<body-content>empty</body-content>라고 되어 있어도 jsp 표준액션을 사용하면 body에 내용을 기술 할 수 있다.

<mine:advice>
    <jsp:attribute name="user">${userName}</jsp:attribute>
</mine:advice>


<jsp:attribute> 태그는 속성을 기술하는 또 하나의 방식이므로, body content 개수로 치지 않으며, 따라서 시작 태그와 마침 태그에 들어갈 수 있다.

taglib에 들어가는 uri는 실제 uri(위치정보)가 아니다. 다른 태그 라이브러리와 구별하기 위한 유일한 값을 지정하기 위해 사용하는 이름일 뿐이다.
uri와 실제 TLD 파일은 컨테이너가 알아서 맵핑한다. 하지만 jsp 2.0 이전 버젼에서는 web.xml에 맵핑 정보를 적어 줘야 했었다.

  <jsp-config>
      <taglib>
          <taglib-uri>randomThings</taglib-uri>
          <taglib-location>/WEB-INF/</taglib-location>
      </taglib>
  </jsp-config>


jsp 2.0 버전에서는 사용하지 않아도 컨테이너가 알아서 uri 이름에 대한 맵을 만든다는 의미이지, 위 내용을 web.xml에 기술 안해야지만 된다는 의미는 아니다. web.xml에 기술을 하게 된다면 해당 내용을 사용하게 되며, 없을 경우 자동으로 searching을 하게 된다.
컨테이너가 자동으로 TLD 파일을 찾는 위치는 다음과 같다.

1. WEB-INF 안
2. WEB-INF 아래 하위 디렉토리
3. WEB-INF/lib 밑에 jar 파일로 배포 했다면 jar 안 META-INF 디렉토리
4. WEB-INF/lib 밑에 jar 파일로 배포 했다면 jar 안 META-INF 아래 하위 디렉토리


jsp에서 여러개의 태그라이브러리를 사용한다면, 각각의 TLD에 대한 uri를 작성해야 한다. uri는 유일해야 하며, 같은 값을 중복해서 사용할 수 없다.
또한 예약어를 첨자로 사용할 수 없다.

jsp:, jspx:, java:, javax:, servlet:, sun:, sunw:



출처 - http://www.4te.co.kr/566

:

JSP 파라미터[Parameter] 값의 인코딩과 디코딩

Language/JSP 2014. 1. 14. 12:53

웹 브라우저는 웹서버에 파라미터를 전송할 때 알맞은 캐릭터 셋을 이용해서 파라미터 값을 인코딩하여 전달한다.

반대로 웹 서버는 알맞은 캐릭터 셋을 이용해서 웹브라우저가 보내온 파라미터를 디코딩한다.

 

어떤 캐릭터 셋을 이용할지의 여부는 GET방식과 POST방식에 따라 다르다.

 

1.POST방식

 

POST방식에서는 응답결과에 사용하는 캐릭터셋을 이용해서 파라미터를 인코딩한다.

<%@ page contentType="text/html; charset="EUC-KR" %>

 

위와 같이 응답결과에 사용할 캐릭터셋을 'EUC-KR'로 설정한 경우 웹브라우저는 해당 캐릭터셋을 이용해서 인코딩한 파라미터를 웹서버에 전달한다.

 

서버에서 인코딩된 파라미터 값을 사용하기 위해선 알맞은 캐릭터셋으로 디코딩 해주어야 하는데JSP에서는 request기본객체가 제공하는

setCharacterEncoding() 메서드를 이용해서 파라미터 값을 디코딩 할 때 사용할 캐릭터 셋을 지정해준다.

<%

  request. setCharacterEncoding("euc-kr");

%>

 

위 스크립트릿에서 request 기본객체를 이용해서 디코딩 할 때 사용할 캐릭터셋을 지정해 주었다.

위와같이 지정하지 않는경우 기본적으로 사용되는 캐릭터셋 기본값은 "ISO-8859-1"이다.

 

한가지 주의 할 점은 파라미터 값을 읽어오기 이전 최 상단에 디코딩 할 때 적용할 캐릭터셋을 지정해 주저야 한다는 것이다.

그렇지 않을 경우, 파라미터를 읽어온 이후에 설정하는 것은 소용없다. 그런경우 자동으로 "ISO-8859-1" 로 디코딩 된다.

<%

  String name = request.getParameter("name");

  request. setCharacterEncoding("euc-kr");

  String country = request.getParameter("country");

%>

 

위처럼 이미 request.getParameter("name"); 를 사용한 이후에 지정할 경우에는 모두 "ISO-8859-1" 캐릭터 셋이 이용된다.

request.getParameter("country"); 의 경우 또한 마찬가지 이다.

 

 

2.GET방식

 

GET방식의 경우 파라미터 전송방법에 따라 인코딩이 다르게 결정된다.

(1)<a>태그의 링크 태그에 쿼리 문자열 추가

= 웹 페이지 인코딩 사용

(2)HTML 폼의 메서드 속성값을 "GET"으로 지정해서 폼을 전송

=웹 페이지 인코딩 사용

(3)웹 브라우저의 주소에 직접 쿼리 문자열 포함한 URL 입력

=웹 브라우저마다 다름

 

GET 방식에서는 POST방식에서처럼 request 기본객체를 통한 디코딩 시 사용할 캐릭터셋 지정이 불가능하다.

서블릿 규약에 따라 setCharacterEncoding() 메서드는 HTTP 프로토콜의 데이터 영역을 인코딩 할 때 사용한 캐릭터 셋을 지정할 때 사용된다.

POST방식은 팔라미터를 데이터영역을 통해서 전달되므로 해당 메서드 사용이 가능하지만 GET 방식은 요청 라인에 URI와 함께 파라미터가 전달되기 때문에

setCharacterEncoding() 메서드에서 지정한 캐릭터셋이 적용되지 않는 것이 원칙이다.

 

(3)번에서 말한 것 처럼 웹브라우저에 직접 쿼리 문자열을 포함하는 경우 브라우저마다 기본 캐릭터셋이 다르게 적용된다.

IE : 현재 웹 브라우저에 선택되어 있는 캐릭터 셋을 이용해서 파라미터 값을 인코딩.

사파리,크롬 : UTF-8 을 기본값으로 인코딩.

 

GET 방식으로 전달되는 파라미터 값을 지정한 캐릭터 셋으로 알맞게 읽어오는 방법은 WAS에 따라 다른데 가장 많이 사용하는 톰캣을 기준으로 설명하면 두가지 방법이 있다.

 

(1)server.xml 파일에서 <Connector>의 useBodyEncodingForURI 속성의 값을 true로 지정하는 방법

(2)server.xml 파일에서 <Connector>의 URIEncoding 속성으 ㅣ값으로 원하는 캐릭터 셋을 지정하는 방법

 

(1)번 방법은 [톰캣설치디렉터리]/conf/server.xml 파일을 수정한다.

<Connector port="8080" protocol="HTTP/1.1"

   connectionTimeout="20000"

   redirectPort="8443"

    useBodyEncodingForURI="true" />

 

위 처럼 useBodyEncodingForURI의 옵션을 "true" 로 지정하면 GET 방식으로 전달되 파라미터도 setCharacterEncoding()메서드로 지정한 캐릭터 셋이 적용된다.

 

(2)번 방법 또한 [톰캣설치디렉터리]/conf/server.xml 파일을 수정한다.

<Connector port="8080" protocol="HTTP/1.1"

   connectionTimeout="20000"

   redirectPort="8443"

    URIEncoding="euc-kr" />

 

위 경우 URIEncoding 에서 지정한대로 항상 "euc-kr" 로 캐릭터셋을 지정하여 인코딩 된 값을 디코딩하여 읽어오게 된다.

(1)번과 (2)번을 동시에 다 적용할 수 있는게 그런 경우 setCharacterEncoding()메서드를 통해 지정한 캐릭터셋을 이용한다.


출처 - http://blog.naver.com/PostView.nhn?blogId=hckind&logNo=20153048048




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

Custom Tag(JSP 1.2, 2.0 변경 사항)  (0) 2014.11.10
커스텀 태그  (0) 2014.11.06
JSP 내부 _jspService 메서드의구조  (0) 2013.12.15
[WAS]와 [웹서버(Web Server)] 의 차이  (0) 2013.12.09
JDBC Internal - 타임아웃의 이해  (0) 2013.11.27
: