帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE1.4新特性之Servlet2.4新特性
作者:佚名 发布时间:2005-04-02 来源:不详
 
  在J2EE1.4最新的Servl
功能。
et 2.4版中,加入了一些新的功

能,下面我们介绍其中主要的常用


  1、XML Schema定义Web查询部署描述文件


  Servlet 2.3之前的版
示:
本使用DTD作为部署描述文件的

定义,其web.xml的格式为如下所


  <?xml version="1.0" encoding="IS0-8859-1"?>

  <!DOCTYPE web-app                                      
    PUBLIC "-//sunMi
crosystems,Inc.//DTD WebAppl
ication 2.3f//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">

    <web-app>

     .......                                                          
    </web-app>

                                                                               
  Servlet 2.4版首次使用XML Schema
web.xml语法。同时XML Schema提供了更
定义作为部署描述文件,这样Web容器更容易校验
好的扩充性,其web.xml中的格式如下所示:

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

    <web-app version="2.4" xm
lns="http://java.sun.com/xml/ns/j2ee"
       xmlns:work
flow="http://www.workflow.co
m"
       xmins:xsi="http://www.
w3.org/2001/XMLSchema-instance"
    xsi:schemaLocati
on="http://java.sun.com/xml/
ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    .........                                                        
    </web-app>

                                                                               
  虽然上面显示两个版本
方法和Servlet 2.3版大致
的开头几行有差别,Servlet 2.
相同。
4版程序web.xml中Web构件的设置


  2、Servlet Request监听器


  Servlet 2.4版在事件
rvletRequestListener,Se
管理和控制与ServletReque
监听器的结构。
监听器中加入了ServletRequest
rvletRequestAttributeListene
st动作有关的事件。下面的程序

监听器,包括:Se
r和其他相关类。这些类可以用来
显示了一个典型的ServletRequest


  import javax.setvlet.ServletContext;      
    import javax.servlet.Servlet
RequestListener;
    import javax.servlet.Servlet
RequestAttributeListener;
    import javax.ser
vlet.http.HttpServletRequest
;
    import iava.io.*;                                        
    import java.util.Locale;                          
    public final cla
ss RequestListener implemen
ts  SerVletRequestListener,
    ServletRequestAttributeListe
ner,ServletContextListener{
      ........                                                      
  public void requestl
nitialized(javax.servlet.Ser
vletRequestEvent event){
      ........                                                      
      }                                                                    
  public void attribut
eAdded(javax.servlet.Servlet
RequestAttributeEvent event){
      ........                                                      
      }                                                                    
  public void attributeRemoved(jav
{
ax.servlet.ServletRequestAttributeEvent event)

      ........                                                      
      }                                                                    
  public void attribut
event){
eReplaced(javax.servlet.Serv

letRequestAttributeEvent

      ........                                                      
      }                                                                    
  public void attributeDestroyed(j
event){
avax.servlet.ServletRequestAttributeEvent

      ........                                                      
      }                                                                    
    }                                                                        

  3、 Request Dispatcher变化


  Servlet 2.4版的Web程
以根据请求分发器(request
可以通过在web.xml中使用
序增强了filter和request disp
dispatcher)所使用的方法有条
元素设定过滤器作用的条件(下
atcher的配合功能,这样过滤器可
件地对Web请求进行过滤。编程者
图1):

  


  图1 设定元素的过滤器                                                        

  ·只有当request直接来自客户,过滤器才生效,对应为REQUEST条件。

  ·只有当request被一
),对应称为FORWARD条件。
个请求分发器使用forward()方

法转到一个Web构件时(采用或定义


  ·类似地,只有当request被一个请
用或定义),对应称为INCLUDE条件。
求分发器使用include()方法转到一个Web构件时(采


  ·只有当request被一
对应称为ERROR条件。
个请求分发器使用“错误信息页

”机制方法转到一个Web构件时,


  ·第五种过滤器作用的条件可以是上面四种条件的组合。                           

  下面的程序中的定义了当客户请求/i
来过滤请求。但是如果到达URL为/icsamp
dispatcher转发过来的,这个过滤器不工
csamples/* 样式的URL时,Security Filter会被用
les/* 的Web构件的请求是从一个request
作。

  <filter-mapping>

    <filter-name>Security Filter</filter-name>

    <url-pattern>/icsamples/*</url-pattern>

    </filter-mapping>


  如果使用下面的程序设置,在中加入
dispatcher使用include()方法包括Reque
直接从客户发来,或request dispatcher

INCLUDE,Security Filter只有在被一个request
stRecorderServlet时才会工作。在其他情况(如请求
使用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显示了一个在
的参数"type",决定如何处
可以向URL为/admin或/cont
。过滤器和Web资源的关系
”,ReqDispatcherServlet
ispatcherFilterIcd会被使
ERROR”ReqDispatcherServ
被使用,因为在定义了ERRO
中使用的例子。程序7定义的Req
理请求。在其中使用了两个Requ
rol的servlet转发请求。当请求
可以在web.xml中定义。如果用
的RequestDispatcher会调用inc
用,因为在定义了INCLUDE;如
let会调用resp.sendError()方
R。
DispatcherServlet根据用户请求
estDispatcher(rd,和rd2),它们
被转发后,适当的过滤器会起作用
户输入的Web请求参数为“INCLUDE
lude 方法,这样D
果用户输入的 Web请求参数为“
法,这样DispatcherFilterErr会


  例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 ReqDispatcherSe
rvlet extends HttpServlet
    {                                                                        
    String dispatchtype;                                  
    public void init(ServletConf
ig config) throws ServletException
    {                                                                        
    super.init(config);                                    
    }                                                                        
    public void serv
ice(HttpServletRequest req,H
ttpServletResponse 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("Ser
verName:"+req.getServerName(
)+"ServerPort:"+
  req.getServerPort());                                  
    out.println("</p>");

    RequestDispatche
r rd=req.getRequestDispatche
r("/admin");
    RequestDispatche
r rd2=req.getRequestDispatch
er("/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(4
04,"Error from ReqDispacher
Servlet");
     }                                                                      
    if(type.equals("CONTROL"))                      
     {                                                                      
    rd2.forward(req,resp);                              
     }                                                                      
    out.flush();                                                  
    }                                                                        
    public voiddestroy()                                  
    {                                                                        
    System.out.println("ReqDispa
cherServlet: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响应的语
的Web资源时,servlet程序通过
言属性。
ServletResponse接口的setLocale


  5、 Login/Logout功能


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


  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·J2EE 的四层模型  (2005-04-02)
 ·J2EE 的结构  (2005-04-02)
 ·J2EE的核心API与组件  (2005-04-02)
 ·XML和J2EE的组合技术  (2005-04-02)
 ·J2EE的未来  (2005-04-02)
 ·中国软件市场呼吁更多中高级J2EE  (2005-04-02)
 ·J2EE1.4的多层Web框架技术  (2005-04-02)
 ·解析J2EE型式的应用(上) (1)  (2005-04-02)
 ·J2EE宠物商店 (1)  (2005-04-02)
 ·J2EE到底是什么?  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统