摘要:利用這種方式就將或者和業(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
說(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)行配置。 SpringFilter
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 說(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. targetBean springFilter
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
摘要:圖片抓取上本項(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...
摘要:依賴(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ū)...
摘要:的入口是,而是這里要指出,和是不同的。以前認(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...
摘要:元素用于指定過(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...
閱讀 1734·2021-11-22 12:09
閱讀 1462·2019-08-30 13:22
閱讀 2094·2019-08-29 17:00
閱讀 2644·2019-08-29 16:28
閱讀 2956·2019-08-26 13:51
閱讀 1183·2019-08-26 13:25
閱讀 3245·2019-08-26 12:14
閱讀 3015·2019-08-26 12:14