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

當前位置:首頁>>軟件教程>>新聞內容  
J2EE1.4新特性之Servlet2.4新特性
作者:務實工作室 發(fā)布時間: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監(jiān)聽器

Servlet 2.4版在事件監(jiān)聽器中加入了ServletRequest監(jiān)聽器,包括:ServletRequestListener,ServletRequestAttributeListener和其他相關類。這些類可以用來管理和控制與ServletRequest動作有關的事件。下面的程序顯示了一個典型的ServletRequest監(jiān)聽器的結構。

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的配合功能,這樣過濾器可以根據請求分發(fā)器(request dispatcher)所使用的方法有條件地對Web請求進行過濾。編程者可以通過在web.xml中使用元素設定過濾器作用的條件(下圖1):



圖1 設定元素的過濾器



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

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

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

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

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

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

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


如果使用下面的程序設置,在中加入INCLUDE,Security Filter只有在被一個request dispatcher使用include()方法包括RequestRecorderServlet時才會工作。在其他情況(如請求直接從客戶發(fā)來,或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由客戶直接發(fā)出或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轉發(fā)請求。當請求被轉發(fā)后,適當的過濾器會起作用。過濾器和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查看其用法。


文章來源:賽迪網
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因為寂寞才想
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 永吉县| 苍南县| 额尔古纳市| 霍邱县| 肃宁县| 隆回县| 阿坝| 商都县| 白山市| 蒙阴县| 闸北区| 凌云县| 拉孜县| 郸城县| 明水县| 汾阳市| 哈尔滨市| 嘉义市| 阿克陶县| 柘城县| 青海省| 安阳市| 昭苏县| 乌拉特后旗| 西乡县| 清水县| 慈溪市| 武功县| 民和| 财经| 南丰县| 云阳县| 通榆县| 封丘县| 濉溪县| 武陟县| 桃源县| 石狮市| 闽侯县| 大埔县| 神农架林区|