成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

如何使用Spring管理Filter和Servlet

amuqiao / 1094人閱讀

摘要:利用這種方式就將或者和業(yè)務(wù)對(duì)象的依賴(lài)關(guān)系用來(lái)進(jìn)行管理,并且不用在中硬編碼要引用的對(duì)象名字。配置的的配置完成。推薦使用,應(yīng)為配置上更簡(jiǎn)單。

在使用spring容器的web應(yīng)用中,業(yè)務(wù)對(duì)象間的依賴(lài)關(guān)系都可以用context.xml文件來(lái)配置,并且由spring容器來(lái)負(fù)責(zé)依賴(lài)對(duì)象 的創(chuàng)建。如果要在filter或者servlet中使用spring容器管理業(yè)務(wù)對(duì)象,通常需要使用WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext())來(lái)獲得WebApplicationContext,然后調(diào)用WebApplicationContext.getBean(“beanName”)來(lái)獲得對(duì)象的引用,這實(shí)際上是使用了依賴(lài)查找來(lái)獲得對(duì)象,并且在filter或者servlet代碼中硬編碼了應(yīng)用對(duì)象的bean名字。為了能在filter或者servlet中感知spring中bean,可采用如下步驟來(lái)實(shí)現(xiàn):

    1、將filter或者servlet作為bean定義在context.xml文件中,和要應(yīng)用的bean定義放在一起;
    2、實(shí)現(xiàn)一個(gè)filter代理或者servlet代理,該代理用WebApplicationContext來(lái)獲得在context.xml中定義的filter或者servlet的對(duì)象,并將任務(wù)委托給context.xml中定義的filter或者servlet
   3、在web.xml中用ContextLoaderListener來(lái)初始化spring  的context,同時(shí)在filter代理或者servlet代理的定義中用初始化參數(shù)來(lái)定義context.xml中filter或者servlet的bean名字(或者直接受用代理的名稱(chēng)獲得相應(yīng)的filter或者servlet的名稱(chēng))。
   4、在web.xml中定義filter代理或者servlet代理的mapping。
   利用這種方式就將filter或者servlet和業(yè)務(wù)對(duì)象的依賴(lài)關(guān)系用spring  來(lái)進(jìn)行管理,并且不用在servlet中硬編碼要引用的對(duì)象名字。具體實(shí)例如下:

1、spring與web配置
1.1 在applicationContext.xml中定義filter

    
            
              SpringFilter  
            
   
   說(shuō)明:com.sirui.filter.SpringFilter為實(shí)現(xiàn)了javax.servlet.Filter接口的filter
    實(shí)現(xiàn)filter代理 實(shí)際上,filter代理不需要我們自己來(lái)實(shí)現(xiàn),Spring提供了兩種現(xiàn)成的filter代理 org.springframework.security.util.FilterToBeanProxy, org.springframework.web.filter.DelegatingFilterProxy,兩者只是在web.xml中的配置上略有不同,下面就讓我們一起看看如何在web.xml中進(jìn)行配置。

1.2. 配置web.xml

 初始化spring的context ,因?yàn)槭鞘褂胹pring來(lái)管理,所以在使用filter前先要初始化spring的context,一般來(lái)說(shuō)配置如下:

contextConfigLocation  
   
         /WEB-INF/applicationContext.xml  
   
   
   
   
      org.springframework.web.context.ContextLoaderListener  
   


2、Filter配置:
2.1 FilterToBeanProxy

     springFilter   
    org.springframework.security.util.FilterToBeanProxy  
      
      
        targetBean  
        springFilter  
      

說(shuō)明:需要為FilterToBeanProxy提供上下文參數(shù),這里我們配置的是targetBean屬性,它告訴spring在context中查找的bean名稱(chēng),所以當(dāng)請(qǐng)求被過(guò)濾器攔截后FilterToBeanProxy會(huì)在applicationContext.xml中會(huì)查找id為springFilter的bean.我們也可以配置targetClass屬性,意思就是查找該類(lèi)型的bean.

2.2 DelegatingFilterProxy

    springFilter  
      
        org.springframework.web.filter.DelegatingFilterProxy  
      


說(shuō)明:使用DelegatingFilterProxy時(shí)不需要配置任何參數(shù),spring會(huì)根據(jù)filter-name的名字來(lái)查找bean,所以這里spring會(huì)查找id為springFilter的bean.
2.3 配置filter的mapping

    springFilter  
    /*  


filter配置完成。推薦使用DelegatingFilterProxy,應(yīng)為配置上更簡(jiǎn)單。

3、Servlet 配置
Servlet的配置與Filter的配置十分相似
3.1 在applicationContext.xml中定義servlet

    
            
              SpringServlet  
           
   

說(shuō)明:com.sirui.servlet.SpringServlet繼承自 javax.servlet.http.HttpServlet
3.2 實(shí)現(xiàn)servlet代理,與filter不同,spring沒(méi)有為servlet提供代理實(shí)現(xiàn),需要我們自己來(lái)創(chuàng)建,不過(guò)放心,創(chuàng)建一個(gè)servlet代理十分簡(jiǎn)單,一個(gè)具體的實(shí)現(xiàn)如下:
package com.sirui.servlet;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class ServletToBeanProxy extends GenericServlet {

private String targetBean;  
private Servlet proxy;  
public void init() throws ServletException {  
            this.targetBean = getInitParameter("targetBean");  
            getServletBean();  
        proxy.init(getServletConfig());  

}
public void service(ServletRequest req, ServletResponse res)

       throws ServletException, IOException {  
      proxy.service(req, res);  
}  
private void getServletBean() {  
          WebApplicationContext wac = WebApplicationContextUtils  
            .getRequiredWebApplicationContext(getServletContext());  
            this.proxy = (Servlet) wac.getBean(targetBean);  
}  

}
說(shuō)明:相信看了代碼就明白了,它利用targetBean屬性在spring中查找相應(yīng)的servlet,這很像FilterToBeanProxy的方式,所以我為其取名為ServletToBeanProxy。當(dāng)然,我們也可以使用類(lèi)似于DelegatingFilterProxy的方式,只需要將上述代碼中標(biāo)記為黃色的部分修改為this.targetBean=this.getServletName();即可,我們相應(yīng)的命名為DelegatingServletProxy。

    配置web.xml和初始化spring的context 與filter中的說(shuō)明一致,不再贅述。         

3.3 ServletToBeanProxy

    springServlet  
      
        com.sirui.servlet.proxy.ServletToBeanProxy  
      
      
        targetBean  
        springServlet  
      
    1  


3.4DelegatingServletProxy

    springServlet  
      
        com.sirui.servlet.proxy.DelegatingServletProxy  
      
    1  

3.5 配置servlet的mapping

    springServlet  
    /servlet/*  

servlet的配置完成。推薦使用DelegatingServletProxy,應(yīng)為配置上更簡(jiǎn)單。

更多技術(shù)分享盡在java樂(lè)園

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70754.html

相關(guān)文章

  • 【圖片抓取】003-JAVA WEB(上)

    摘要:圖片抓取上本項(xiàng)目主要講述項(xiàng)目的搭建和啟動(dòng)過(guò)程,為以后繼續(xù)圖片抓取的業(yè)務(wù)展示做基礎(chǔ)。用于處理請(qǐng)求和響應(yīng)的攔截處理。這樣相比容器直接發(fā)到處理,大大減少了代碼重復(fù)工作而且方便統(tǒng)一管理。上下文關(guān)系從上圖可以看出主要在和兩部分做工作。 【圖片抓取】003-JAVA WEB(上) 本項(xiàng)目主要講述java web項(xiàng)目的搭建和啟動(dòng)過(guò)程,為以后繼續(xù)圖片抓取的業(yè)務(wù)展示做基礎(chǔ)。項(xiàng)目中采用tomcat+spr...

    jiekechoo 評(píng)論0 收藏0
  • Spring之旅第十站:MVC配置、上傳文件、異常處理、跨重定向請(qǐng)求、為控制器添加通知

    摘要:依賴(lài)于對(duì)請(qǐng)求的支持。使用解析兼容的沒(méi)有構(gòu)造器參數(shù),也沒(méi)有要設(shè)置的參數(shù),這樣,在應(yīng)用上下文中,將其聲明為就會(huì)非常簡(jiǎn)單。默認(rèn)是沒(méi)有限制的整個(gè)請(qǐng)求的容量。 Spring MVC 高級(jí)的技術(shù) 本章內(nèi)容: Spring MVC配置的替代方案 處理文件上傳 在控制器中處理異常 使用flash屬性 稍等還沒(méi)結(jié)束 說(shuō)明 如果你有幸能看到。后面的章節(jié)暫時(shí)不更新了,改變學(xué)習(xí)方式了。重要理解思想,這本書(shū)...

    leanote 評(píng)論0 收藏0
  • 面試題:SpringMVCStruts2的區(qū)別

    摘要:的入口是,而是這里要指出,和是不同的。以前認(rèn)為是的一種特殊,這就導(dǎo)致了二者的機(jī)制不同,這里就牽涉到和的區(qū)別了。開(kāi)發(fā)效率和性能高于。的實(shí)現(xiàn)機(jī)制有以自己的機(jī)制,用的是獨(dú)立的方式。 1、Struts2是類(lèi)級(jí)別的攔截, 一個(gè)類(lèi)對(duì)應(yīng)一個(gè)request上下文,SpringMVC是方法級(jí)別的攔截,一個(gè)方法對(duì)應(yīng)一個(gè)request上下文,而方法同時(shí)又跟一個(gè)url對(duì)應(yīng),所以說(shuō)從架構(gòu)本身上SpringMVC...

    isaced 評(píng)論0 收藏0
  • 詳談 Filter 過(guò)濾器

    摘要:元素用于指定過(guò)濾器的完整的限定類(lèi)名。除此之外,過(guò)濾器不會(huì)被調(diào)用。參數(shù)用于訪(fǎng)問(wèn)后續(xù)過(guò)濾器。還可以為指定目標(biāo)資源為某個(gè),例如當(dāng)用戶(hù)訪(fǎng)問(wèn)時(shí),會(huì)執(zhí)行名字為的,這時(shí)會(huì)執(zhí)行過(guò)濾器。防止中文亂碼過(guò)濾器項(xiàng)目使用框架時(shí)。 文章首發(fā)在CSDN博客,轉(zhuǎn)載請(qǐng)務(wù)必注明以下所有鏈接,否則考慮法律追究責(zé)任。 CSDN地址:http://blog.csdn.net/tzs_1041218129/article/det...

    wind5o 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

amuqiao

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<