国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

J2EE1.4新特性之Servlet2.4新特性

2019-11-18 12:32:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  作者:務(wù)實(shí)工作室
  
  在J2EE1.4最新的Servlet 2.4版中,加入了一些新的功能,下面我們介紹其中主要的常用功能。
  
  1、xml Schema定義Web查詢(xún)部署描述文件
  
  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容器更輕易校驗(yàn)web.xml語(yǔ)法。同時(shí)XML Schema提供了更好的擴(kuò)充性,其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>
  
  雖然上面顯示兩個(gè)版本的開(kāi)頭幾行有差別,Servlet 2.4版程序web.xml中Web構(gòu)件的設(shè)置方法和Servlet 2.3版大致相同。
  
  2、Servlet Request監(jiān)聽(tīng)器
  
  Servlet 2.4版在事件監(jiān)聽(tīng)器中加入了ServletRequest監(jiān)聽(tīng)器,包括:ServletRequestListener,ServletRequestAttributeListener和其他相關(guān)類(lèi)。這些類(lèi)可以用來(lái)治理和控制與ServletRequest動(dòng)作有關(guān)的事件。下面的程序顯示了一個(gè)典型的ServletRequest監(jiān)聽(tīng)器的結(jié)構(gòu)。
  
  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程序增強(qiáng)了filter和request dispatcher的配合功能,這樣過(guò)濾器可以根據(jù)請(qǐng)求分發(fā)器(request dispatcher)所使用的方法有條件地對(duì)Web請(qǐng)求進(jìn)行過(guò)濾。編程者可以通過(guò)在web.xml中使用元素設(shè)定過(guò)濾器作用的條件(下圖1):
  
  J2EE1.4新特性之Servlet2.4新特性
  
  圖1 設(shè)定元素的過(guò)濾器
  
  ·只有當(dāng)request直接來(lái)自客戶(hù),過(guò)濾器才生效,對(duì)應(yīng)為REQUEST條件。
  
  ·只有當(dāng)request被一個(gè)請(qǐng)求分發(fā)器使用forward()方法轉(zhuǎn)到一個(gè)Web構(gòu)件時(shí)(采用或定義),對(duì)應(yīng)稱(chēng)為FORWARD條件。
  
  ·類(lèi)似地,只有當(dāng)request被一個(gè)請(qǐng)求分發(fā)器使用include()方法轉(zhuǎn)到一個(gè)Web構(gòu)件時(shí)(采用或定義),對(duì)應(yīng)稱(chēng)為INCLUDE條件。
  
  ·只有當(dāng)request被一個(gè)請(qǐng)求分發(fā)器使用“錯(cuò)誤信息頁(yè)”機(jī)制方法轉(zhuǎn)到一個(gè)Web構(gòu)件時(shí),對(duì)應(yīng)稱(chēng)為ERROR條件。
  
  ·第五種過(guò)濾器作用的條件可以是上面四種條件的組合。
  
  下面的程序中的定義了當(dāng)客戶(hù)請(qǐng)求/icsamples/* 樣式的URL時(shí),Security Filter會(huì)被用來(lái)過(guò)濾請(qǐng)求。但是假如到達(dá)URL為/icsamples/* 的Web構(gòu)件的請(qǐng)求是從一個(gè)request dispatcher轉(zhuǎn)發(fā)過(guò)來(lái)的,這個(gè)過(guò)濾器不工作。
  
  <filter-mapping>
  <filter-name>Security Filter</filter-name>
  <url-pattern>/icsamples/*</url-pattern>
  </filter-mapping>
  
  假如使用下面的程序設(shè)置,在中加入INCLUDE,Security Filter只有在被一個(gè)request dispatcher使用include()方法包括RequestRecorderServlet時(shí)才會(huì)工作。在其他情況(如請(qǐng)求直接從客戶(hù)發(fā)來(lái),或request dispatcher使用forward方法)下,Security Filter都不會(huì)工作。
  
  <filter-mapping>
  <fliter-name>Security Filter</filter-name>
  <servlet-name>RequestRecorderServlet</servlet-name>
  <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  
  下面的程序設(shè)置定義了Security Filter當(dāng)request由客戶(hù)直接發(fā)出或request
  
  dispatcher使用forward方法時(shí)能工作。
  
  <filter-mapping>
  <filter-name>Security Filter</filter-name>
  <url-pattern>/icsamples/*</uri-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
  
  程序例6顯示了一個(gè)在中使用的例子。程序7定義的ReqDispatcherServlet根據(jù)用戶(hù)請(qǐng)求的參數(shù)"type",決定如何處理請(qǐng)求。在其中使用了兩個(gè)RequestDispatcher(rd,和rd2),它們可以向URL為/admin或/control的servlet轉(zhuǎn)發(fā)請(qǐng)求。當(dāng)請(qǐng)求被轉(zhuǎn)發(fā)后,適當(dāng)?shù)倪^(guò)濾器會(huì)起作用。過(guò)濾器和Web資源的關(guān)系可以在web.xml中定義。假如用戶(hù)輸入的Web請(qǐng)求參數(shù)為“INCLUDE”,ReqDispatcherServlet的RequestDispatcher會(huì)調(diào)用include 方法,這樣DispatcherFilterIcd會(huì)被使用,因?yàn)樵诙x了INCLUDE;假如用戶(hù)輸入的 Web請(qǐng)求參數(shù)為“ERROR”ReqDispatcherServlet會(huì)調(diào)用resp.sendError()方法,這樣DispatcherFilterErr會(huì)被使用,因?yàn)樵诙x了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()");
   }
  }

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴马| 马龙县| 铁力市| 咸丰县| 红桥区| 汉川市| 保定市| 济宁市| 河曲县| 嵊泗县| 榕江县| 遵义县| 柘城县| 峨眉山市| 长武县| 会泽县| 阿荣旗| 凤冈县| 景宁| 渝北区| 滦南县| 渝中区| 墨江| 桦川县| 蓬安县| 喀什市| 广水市| 深泽县| 伊金霍洛旗| 屯留县| 上栗县| 德州市| 饶阳县| 贵南县| 武陟县| 故城县| 新竹市| 玛纳斯县| 昌邑市| 海口市| 江门市|