成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>軟件教程>>新聞內容  
J2EE1.4新特性之Servlet2.4新特性
作者:務實工作室 發布時間:2003-10-29 12:41:45 | 【字體:

在J2EE1.4最新的Servlet 2.4版中,加入了一些新的功能,下面我們介紹其中主要的常用功能。

1、XML Schema定義Web查詢部署描述文件

Servlet 2.3之前的版本使用DTD作為部署描述文件的定義,其web.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定義作為部署描述文件,這樣Web容器更容易校驗web.xml語法。同時XML Schema提供了更好的擴充性,其web.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版程序web.xml中Web構件的設置方法和Servlet 2.3版大致相同。

2、Servlet Request監聽器

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、 Request Dispatcher變化

Servlet 2.4版的Web程序增強了filter和request dispatcher的配合功能,這樣過濾器可以根據請求分發器(request dispatcher)所使用的方法有條件地對Web請求進行過濾。編程者可以通過在web.xml中使用元素設定過濾器作用的條件(下圖1):



圖1 設定元素的過濾器



·只有當request直接來自客戶,過濾器才生效,對應為REQUEST條件。

·只有當request被一個請求分發器使用forward()方法轉到一個Web構件時(采用定義),對應稱為FORWARD條件。

·類似地,只有當request被一個請求分發器使用include()方法轉到一個Web構件時(采用定義),對應稱為INCLUDE條件。

·只有當request被一個請求分發器使用“錯誤信息頁”機制方法轉到一個Web構件時,對應稱為ERROR條件。

·第五種過濾器作用的條件可以是上面四種條件的組合。

下面的程序中的定義了當客戶請求/icsamples/* 樣式的URL時,Security Filter會被用來過濾請求。但是如果到達URL為/icsamples/* 的Web構件的請求是從一個request dispatcher轉發過來的,這個過濾器不工作。

<filter-mapping>
    <filter-name>Security Filter</filter-name>
    <url-pattern>/icsamples/*</url-pattern>
    </filter-mapping>


如果使用下面的程序設置,在中加入INCLUDE,Security Filter只有在被一個request dispatcher使用include()方法包括RequestRecorderServlet時才會工作。在其他情況(如請求直接從客戶發來,或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定義的ReqDispatcherServlet根據用戶請求的參數"type",決定如何處理請求。在其中使用了兩個RequestDispatcher(rd,和rd2),它們可以向URL為/admin或/control的servlet轉發請求。當請求被轉發后,適當的過濾器會起作用。過濾器和Web資源的關系可以在web.xml中定義。如果用戶輸入的Web請求參數為“INCLUDE”,ReqDispatcherServlet的RequestDispatcher會調用include 方法,這樣DispatcherFilterIcd會被使用,因為在定義了INCLUDE;如果用戶輸入的 Web請求參數為“ERROR”ReqDispatcherServlet會調用resp.sendError()方法,這樣DispatcherFilterErr會被使用,因為在定義了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增加了Web程序國際化功能,在web.xml中可以定義網站的字符編碼方式。

<locale-encoding-mapping-list>
    <locale-encoding-mapping>
    <locale>zh</locale>
    <encoding>gb2312</encoding>
    </locale-encoding-mapping>
    </locale-encoding-mapping-list>


當客戶請求了特定語言的Web資源時,servlet程序通過ServletResponse接口的setLocale方法設置一個Web響應的語言屬性。

5、 Login/Logout功能

在Servlet 2.4中增加了logout和login方法方便安全管理。大家可以參考Servlet 2.4的API查看其用法。


文章來源:賽迪網
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因為寂寞才想
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 永新县| 灌阳县| 邯郸市| 剑河县| 东丽区| 潮州市| 江永县| 余江县| 溧阳市| 余庆县| 金川县| 双峰县| 保定市| 黄浦区| 汉源县| 红河县| 万宁市| 土默特右旗| 北海市| 广州市| 庄浪县| 陇西县| 武宣县| 葫芦岛市| 汉源县| 新郑市| 繁峙县| 霍城县| 贵港市| 濉溪县| 闵行区| 张家川| 江西省| 日喀则市| 湘潭县| 凤阳县| 灌阳县| 巴楚县| 黑河市| 定西市| 曲阳县|