<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-18  評論-8  文章-0  trackbacks-0

    Servlet過濾器
    在Java Servlet2.3中定義,能夠對Servlet容器的請求和響應對象進行檢查和修改。所有的過濾器類都必須實現javax.servlet.Filter接口,其中有三個需要實現的方法
    init(FilterConfig)-一個初始化方法,Servlet容器創建過濾器類后將調用這個方法,在此方法中可以讀取web.xml文件中的Servlet過濾器的初始化參數。
    doFilter(ServletRequest,ServletResponse,FilterChain)-實際的過濾操作,FilterChain參數用于訪問后面的過濾器。
    destroy()-用來釋放某些Servlet過濾器占用的資源。

    下面是一個解決中文亂碼問題很有用的一個過濾器:

    public class SetCharacterEncodingFilter implements Filter {
        
        
    public void destroy() {}
      
        
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
           throws IOException, ServletException 
    {

        request.setCharacterEncoding(
    "GB2312");
        chain.doFilter(request, response);
        }


        
    public void init(FilterConfig filterConfig) throws ServletException {}
    }

    發布Servlet過濾器-在web.xml在文件中加入<filter>元素和<filter-mapping>元素

    下面的例子中Servlet過濾器會過濾所有的URL:

    <filter> 
    <filter-name>Set Character Encoding</filter-name> 
    <filter-class>SetCharacterEncodingFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern> 
    </filter-mapping>

    串連Servlet過濾器
    多個Servlet過濾器可以協同工作,Servlet容器將根據它們在web.xml中定義的先后順序,依次調用它們的doFilter()方法。
    工作流程如下:
     Code1; // 表示調用chain.doFilter()前面的代碼
     chain.doFilter();  // 表示調用下一個過濾器的doFilter()方法
     Code2; // 表示調用chain.doFilter()后面的代碼

    自定義JSP標簽庫
    此技術在JSP 1.1版本中才出現,用來重用某些復雜的邏輯運算和事務,或定義JSP王爺的輸出內容和格式。制作一個完整的自定義標簽程序,包含3個步驟:

    1. 創建標簽的處理類
    此類必須擴展javax.servlet.jsp.TagSupport類或者javax.servlet.jsp.BodyTagSupport類。
    以TagSupport類為例,先了解一下這個類的主要方法:
    doStartTag()-JSP容器遇到自定義標簽的起始標志時調用該方法;
    doEndTag()-JSP容器遇到自定義標簽的結束標志時調用該方法;
    setValue(String k,Object o)-在標簽處理類中設置key/value;
    getValue(String k)-在標簽處理類中根據key返回匹配的value;
    removeValue(String k)-在標簽處理類中刪除key/value;
    setPageContext(PageContext pc)-設置PageContext對象,該方法在調用doStartTag()和doStartTag()前調用;
    setParent(Tag t)-設置嵌套當前標簽的上層標簽的處理類,該方法在調用doStartTag()和doStartTag()前調用;
    getParent()-返回嵌套當前標簽的上層標簽的處理類。

    首先調用setPageContext(PageContext pc)和setParent(Tag t),設置TagSupport類的兩個重要屬性值。

    如果遇到起始標志,調用doStartTag(),此方法返回一個整數值,它有兩個可選值:Tag.SKIP_BODY(標簽之間的內容被忽略)和Tag.EVAL_BODY_INCLUDE(標簽之間的內容正常執行)。
    例如:<prefix:mytag>test</prefix:mytag>,如果遇上Tag.SKIP_BODY,test字符串不會顯示在頁面上;如果遇上Tag.EVAL_BODY_INCLUDE,test字符串將會顯示在頁面上。

    如果遇到結束標志,調用doEndTag(),此方法也返回一個整數值,它有兩個可選值:Tag.SKIP_PAGE(表示立刻停止執行JSP頁面,網頁上未處理的靜態內容和JSP程序均別忽略,任何已有的輸出內容立刻返回到客戶端;)和Tag.EVAL_PAGE(表示按正常流程繼續執行JSP頁面)。

    如果自定義標簽包含自定義的屬性,例如:<prefix:mytag attribute1="value1">,那么處理類中應該將這個屬性做為成員變量,并提供一組get和set方法:
    private int attribute1;
    public void setAttribute1(int value){
     this.attriubte1 = value;
    }
    public int getAttribute1(){
     return attribute1;
    }

    下面是一個用來驗證用戶登陸的標簽處理類例子:

    public class ValidateLoginTag extends TagSupport{
        
    private String name;
        
    private String password;
        
    private Log log = LogFactory.getLog(ValidateLoginTag.class);

        
    public int doEndTag() throws JspException{

           
    if(name.equals("pepsixp"&& password.equals("888888")){
                 
    return(EVAL_PAGE);
              }

            
    return (SKIP_PAGE);
        }


        
    public String getName() {
            
    return name;
        }


        
    public void setName(String name) {
            
    this.name = name;
        }


        
    public String getPassword() {
            
    return password;
        }


        
    public void setPassword(String password) {
            
    this.password = password;
        }

    }

    2.創建TLD-Tag Library Descriptor(標簽庫描述文件)
    TLD文件中元素可以分為三類:<tablib>、<tag>、<attribute>
    <tablib>-設定標簽庫的相關信息,包含的子元素有tlibversion、jspversion、shortname、uri、info、tag。
    <tag>-用來定義一個標簽,包含的子元素有name、tagcalss、bodycontent、info、attribute。
    bodycontent的說明:有三個可選值empty、JSP、tagdependent,empty表示標簽中沒有body,JSP表示body中可以加入JSP程序代碼,tagdependent表示body的內容有標簽進行處理。
    <attribute>-用來定義標簽的屬性,包含的子元素有name、required、rtexprvalue。
    rtexprvalue的說明:表示是否可以使用<%=...%>類型的表達式,
    例如:<prefix:mytaglib attribute1="<%=name%>">
    下面是一個簡單的TLD文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

    <taglib>
        
    <tlibversion>1.2</tlibversion>
        
    <jspversion>1.1</jspversion>
        
    <shortname>MY Tag Library</shortname>
        
    <uri>http://www.tkk7.com/pepsixp/</uri>
        
    <info></info>
        
    <tag>
            
    <name>ifLogin</name>
            
    <tagclass>com.akazam.struts.taglib.ValidateLoginTag</tagclass>
            
    <bodycontent>empty</bodycontent>
            
    <info></info>
            
    <attribute>
                
    <name>name</name>
                
    <required>true</required>
                
    <rtexprvalue>true</rtexprvalue>
            
    </attribute>
            
    <attribute>
                
    <name>password</name>
                
    <required>true</required>
                
    <rtexprvalue>true</rtexprvalue>
            
    </attribute>
        
    </tag>
    </taglib>

    實際中的使用:
    <%@ taglib uri="/tags/test" prefix="test" %>
    <test:ifLogin name="pepsixp" password="888888"/>

    3.在web應用中使用標簽
    先要在web.xml文件加入聲明引用標簽所在的標簽:

    <taglib>
            
    <taglib-uri>/tags/test</taglib-uri>
            
    <taglib-location>/WEB-INF/test.tld</taglib-location>
    </taglib>


    參考:《Tomcat與JavaWeb開發技術詳解》

    posted on 2005-02-18 22:41 阿姆斯壯 閱讀(1214) 評論(0)  編輯  收藏 所屬分類: 基礎很重要
    主站蜘蛛池模板: 99爱在线精品视频免费观看9 | 亚洲人成高清在线播放| a级毛片免费在线观看| 国产亚洲成人久久| 99久久免费国产精品热| 亚洲精品高清无码视频| 午夜免费福利小电影| 亚洲手机中文字幕| 欧美好看的免费电影在线观看 | 日韩精品无码永久免费网站| 国产精品国产自线拍免费软件| 爱情岛亚洲论坛在线观看 | 免费看少妇作爱视频| 看亚洲a级一级毛片| 亚洲午夜无码AV毛片久久| A国产一区二区免费入口| 亚洲国产精品国自产电影| 免费观看激色视频网站bd| 亚洲AV无码国产一区二区三区| 亚洲AⅤ视频一区二区三区 | xxxxxx日本处大片免费看| 亚洲AV无码乱码在线观看裸奔| 久久久久成人片免费观看蜜芽| 国产日本亚洲一区二区三区| 免费a级黄色毛片| 国内精品久久久久影院免费| 亚洲导航深夜福利| 又粗又硬又黄又爽的免费视频| 91在线视频免费观看| 亚洲一级免费毛片| 免费一级做a爰片久久毛片潮喷| 你懂的网址免费国产| ASS亚洲熟妇毛茸茸PICS| 亚洲精品国产va在线观看蜜芽| 免费一级毛片无毒不卡| 亚洲综合无码一区二区痴汉| 久久亚洲av无码精品浪潮| 成年黄网站色大免费全看| 免费国产在线精品一区| 亚洲国产理论片在线播放| 久久伊人亚洲AV无码网站|