J2EE 1.4 새로운 기능 의 Servlet 2.4 새로운 기능

J2EE 1.4 최신 Servlet 2.4 판 에 새로운 기능 을 추 가 했 습 니 다.다음은 그 중의 주요 상용 기능 을 소개 합 니 다.
1.XML Schema 정의 웹 조회 배치 설명 파일
Servlet 2.3 이전 버 전 은 DTD 를 배치 설명 파일 로 정의 하 였 으 며,웹.xml 의 형식 은 다음 과 같 습 니 다.
 
<?xml version="1.0" encoding="IS0-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//sunMicrosystems,Inc.//DTD WebApplication 2.3f//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
    <web-app>
     .......
    </web-app>

Servlet 2.4 버 전 은 처음으로 XML Schema 정 의 를 배치 설명 파일 로 사용 하여 웹 용기 가 웹.xml 문법 을 쉽게 검사 할 수 있 도록 합 니 다.또한 XML Schema 는 더 좋 은 확장 성 을 제공 합 니 다.웹.xml 의 형식 은 다음 과 같 습 니 다.
 
<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:workflow="http://www.workflow.com"
          xmins:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    .........
    </web-app>

위 에 두 버 전의 시작 줄 에 차이 가 있 지만 Servlet 2.4 버 전의 프로그램 웹.xml 에서 웹 구성 요소 의 설정 방법 은 Servlet 2.3 버 전과 대체적으로 같다.
2,Servlet 요청 모니터
Servlet 2.4 버 전 은 이벤트 감청 기 에 ServletRequest 감청 기 를 추 가 했 습 니 다.이 는 ServletRequestListener,ServletRequestAttributeListener 와 다른 관련 종 류 를 포함 합 니 다.이 종 류 는 ServletRequest 동작 과 관련 된 이 벤트 를 관리 하고 제어 할 수 있 습 니 다.다음 프로그램 은 전형 적 인 ServletRequest 모니터 의 구 조 를 보 여 줍 니 다.
 
import javax.setvlet.ServletContext;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.ServletRequestAttributeListener;
    import javax.servlet.http.HttpServletRequest;
    import iava.io.*;
    import java.util.Locale;
    public final class RequestListener  implements   SerVletRequestListener,
    ServletRequestAttributeListener,ServletContextListener{
        ........
public void requestlnitialized(javax.servlet.ServletRequestEvent event){
        ........
        }
public void attributeAdded(javax.servlet.ServletRequestAttributeEvent event){
        ........
        }
public void attributeRemoved(javax.servlet.ServletRequestAttributeEvent event){
        ........
        }
public void attributeReplaced(javax.servlet.ServletRequestAttributeEvent event){
        ........
        }
public void attributeDestroyed(javax.servlet.ServletRequestAttributeEvent event){
       ........
       }
    }

3.디 스 패 치 변경 요청
Servlet 2.4 버 전의 웹 프로그램 은 filter 와 request dispatcher 의 결합 기능 을 강화 하여 필 터 는 요청 배포 기(request dispatcher)가 사용 하 는 방법 에 따라 웹 요청 을 조건 부 로 걸 러 낼 수 있 습 니 다.프로 그래 밍 자 는 웹.xml 에서 요 소 를 사용 하여 필터 역할 의 조건 을 설정 할 수 있 습 니 다(아래 그림 1).
그림 1 요소 설정 필터
·request 가 직접 클 라 이언 트 에서 와 야 필터 가 유효 하 며 REQUEST 조건 에 대응 합 니 다.
·request 가 하나의 요청 배포 기 에 forward()방법 으로 웹 구성 요소 로 전 환 될 때 만(사용 또는 정의)FORWARD 조건 이 라 고 합 니 다.
·유사 하 게 request 가 하나의 요청 배포 기 에 include()방법 으로 웹 구성 요소 로 전 환 될 때(사용 또는 정의)만 INCLUDE 조건 이 라 고 합 니 다.
·request 가 하나의 요청 배포 기 에 의 해'오류 정보 페이지'메커니즘 을 사용 하여 웹 구성 요소 로 전 환 될 때 만 ERROR 조건 이 라 고 합 니 다.
·다섯 번 째 필터 역할 의 조건 은 위의 네 가지 조건 의 조합 일 수 있다.
다음 프로그램 에 서 는 클 라 이언 트 요청/icsamples/*스타일 의 URL 을 정의 할 때 Security Filter 가 요청 을 걸 러 내 는 데 사 용 됩 니 다.그러나 URL 이/icsamples/*인 웹 구성 요소 에 대한 요청 이 request dispatcher 에서 전 송 된 경우 이 필 터 는 작 동 하지 않 습 니 다.
 
<filter-mapping>
    <filter-name>Security Filter</filter-name>
    <url-pattern>/icsamples/*</url-pattern>
    </filter-mapping>

아래 프로그램 설정 을 사용 하면 INCLUDE 를 추가 합 니 다.Security Filter 는 RequestRecorder Servlet 을 포함 한 request dispatcher 에서 include()방법 을 사용 할 때 만 작 동 합 니 다.다른 경우(예 를 들 어 고객 에 게 직접 보 내 달라 고 요청 하거나 request dispatcher 가 forward 방법 을 사용 하 는 경우)Security Filter 는 작 동 하지 않 습 니 다.
 
<filter-mapping>
    <fliter-name>Security Filter</filter-name>
    <servlet-name>RequestRecorderServlet</servlet-name>
    <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

다음 프로그램 설정 은 security Filter 를 정의 합 니 다.request 는 고객 이 직접 보 내 거나 request 합 니 다.
dispatcher 는 forward 방법 을 사용 할 때 일 할 수 있 습 니 다.
 
<filter-mapping>
    <filter-name>Security Filter</filter-name>
    <url-pattern>/icsamples/*</uri-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

프로그램 예 6 은 그 중에서 사용 하 는 예 를 보 여 줍 니 다.프로그램 7 이 정의 하 는 ReqDispatcher Servlet 은 사용자 가 요청 한 인자'type'에 따라 요청 을 어떻게 처리 할 지 결정 합 니 다.이 중 두 개의 RequestDispatcher(rd,rd2)를 사 용 했 습 니 다.URL 이/admin 또는/control 인 servlet 에 요청 을 전달 할 수 있 습 니 다.요청 이 전송 되면 적당 한 필터 가 작 동 합 니 다.필터 와 웹 자원 의 관 계 는 웹.xml 에서 정의 할 수 있 습 니 다.사용자 가 입력 한 웹 요청 인자 가"INCLUDE"이면 ReqDispatcher Servlet 의 RequestDispatcher 는 include 방법 을 호출 합 니 다.그러면 Dispatcher FilterIcd 는 INCLUDE 를 정의 하기 때문에 사 용 됩 니 다.사용자 가 입력 한 웹 요청 인자 가"ERROR"ReqDispatcher Servlet 이면 resp.senderror()방법 을 호출 합 니 다.그러면 Dispatcher FilterErr 는 ERROR 를 정의 하기 때문에 사 용 됩 니 다.
예 6:
 
<filter-mapping>
    <filter-name>DispatcherFilterIcd</filter-name>
    <url-pattern>/admin</url-pattern>
    <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    <filter-mapping>
    <filter-name>DispatcherFilterErr</filter-name>
    <url-pattern>/errorpage</url-pattern>
    <dispatcher>ERROR</dispatcher>
    </filter-mapping>

예 7:
 
import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;

    public class ReqDispatcherServlet extends HttpServlet
    {
    String dispatchtype;
    public void init(ServletConfig config) throws ServletException
    {
    super.init(config);
    }
    public void service(HttpServletRequest req,HttpServletResponse resp)
    throws ServletException,IOException
    {
    PrintWriter out=resp.getWriter();
    String type="NONE";
    if((req.getParameter("type"))!=null)
    {
    type = req.getParameter("type");
    }
        resp.setContentType("text/html");
        out.println("<HTML>");
        out.println("<BODY>");
out.println("<HR>");
out.println("<p>");
    out.println("ReqDispacherServelt");
    out.println("</P><p>");
    out.println("ServerName:"+req.getServerName()+"ServerPort:"+
req.getServerPort());    
    out.println("</p>");
    RequestDispatcher rd=req.getRequestDispatcher("/admin");
    RequestDispatcher rd2=req.getRequestDispatcher("/control");
    if(type.equals("REQUEST"))
    {
    }
    if(type.equals("FORWARD"))
     {    
    rd.forward(reg,resp);
     }
    if(type.equals("INCLUDE"))
    {
    rd.include(req,resp);
      }
    if(type.equals("ERROR"))
     {
    resp.sendError(404,"Error from ReqDispacherServlet");
     }
    if(type.equals("CONTROL"))
     {
    rd2.forward(req,resp);
     }
    out.flush();
    }
    public voiddestroy()
    {
    System.out.println("ReqDispacherServlet:destroy()");
     }
    }

4.국제 화 기능 강화
Servlet 2.4 는 웹 프로그램의 국제 화 기능 을 추 가 했 고 웹.xml 에서 사이트 의 문자 인 코딩 방식 을 정의 할 수 있다.
 
<locale-encoding-mapping-list>
    <locale-encoding-mapping>
    <locale>zh</locale>
    <encoding>gb2312</encoding>
    </locale-encoding-mapping>
    </locale-encoding-mapping-list>

클 라 이언 트 가 특정 언어의 웹 자원 을 요청 할 때 servlet 프로그램 은 ServletResponse 인터페이스의 set Locale 방법 을 통 해 웹 응답 언어 속성 을 설정 합 니 다.
5.로그 인/로그아웃 기능
Servlet 2.4 에 logout 과 login 방법 을 추가 하여 안전 관 리 를 편리 하 게 합 니 다.여러분 은 Servlet 2.4 의 API 를 참고 하여 그 용법 을 볼 수 있 습 니 다.

좋은 웹페이지 즐겨찾기