A. SpringMVC中攔截/和攔截/*的區別
一、我們都知道在基於Spring的Application中,需要在web.xml中增加下面類似的配置信息:org.springframework.web.context..springframework.web.servlet.DispatcherServlet1servletName/此處需要特別強調的是/使用的是/,而不是/*,如果使用/*,那麼請求時可以通過DispatcherServlet轉發到相應的Action或者Controller中的,但是返回的內容,如返回的jsp還會再次被攔截,這樣導致404錯誤,即訪問不到jsp。所以如果以後發現總是有404錯誤的時候,別忘了check一下/的配置是否是/*.二、其實Spring的Servlet攔截器匹配規則(即)都可以自己定義,例:當映射為@RequestMapping("/user/add")時1、攔截*.do、*.htm,例如:/user/add.do這是最傳統的方式,最簡單也最實用。不會導致靜態文件(jpg,js,css)被攔截。2、攔截/,例如:/user/add可以實現現在很流行的REST風格。很多互聯網類型的應用很喜歡這種風格的URL。弊端:會導致靜態文件(jpg,js,css)被攔截後不能正常顯示。想實現REST風格,事情就是麻煩一些。後面有解決法還算簡單。3、攔截/*,這是一個錯誤的方式,請求可以走到Action中,但轉到jsp時再次被攔截,不能訪問到jsp。三、如何訪問到靜態的文件,如jpg,js,css?如果你的DispatcherServlet攔截"*.do"這樣的有後綴的URL,就不存在訪問不到靜態資源的問題。如果你的DispatcherServlet攔截"/",為了實現REST風格,攔截了所有的請求,那麼同時對*.js,*.jpg等靜態文件的訪問也就被攔截了。我們要解決這個問題。目的:可以正常訪問靜態文件,不可以找不到靜態文件報404。方案一:激活Tomcat的defaultServlet來處理靜態文件default*.jpgdefault*.jsdefault*.css特點:1.要配置多個,每種文件配置一個。2.要寫在DispatcherServlet的前面,讓defaultServlet先攔截請求,這樣請求就不會進入Spring了。3.高性能。備註:Tomcat,Jetty,JBoss,andGlassFish自帶的默認Servlet的名字--"default"GoogleAppEngine自帶的默認Servlet的名字--"_ah_default"Resin自帶的默認Servlet的名字--"resin-file"WebLogic自帶的默認Servlet的名字--"FileServlet"WebSphere自帶的默認Servlet的名字--"SimpleFileServlet"方案二:在spring3.0.4以後版本提供了mvc:resources,使用方法:images/**映射到ResourceHttpRequestHandler進行處理,location指定靜態資源的位置.可以是webapplication根目錄下、jar包裡面,這樣可以把靜態資源壓縮到jar包中。cache-period可以使得靜態資源進行webcache如果出現下面的錯誤,可能是沒有配置的原因。報錯WARNING:[/mvc/user/findUser/lisi/770]inDispatcherServletwithname'springMVC'使用元素,把mapping的URI注冊到SimpleUrlHandlerMapping的urlMap中,key為mapping的URIpattern值,而value為ResourceHttpRequestHandler,這樣就巧妙的把對靜態資源的訪問由HandlerMapping轉到ResourceHttpRequestHandler處理並返回,所以就支持classpath目錄,jar包內靜態資源的訪問.另外需要注意的一點是,不要對SimpleUrlHandlerMapping設置defaultHandler.因為對staticuri的defaultHandler就是ResourceHttpRequestHandler,否則無法處理staticresourcesrequest.方案三,使用會把"/**"url,注冊到SimpleUrlHandlerMapping的urlMap中,把對靜態資源的訪問由HandlerMapping轉到org.springframework.web.servlet.resource.處理並返回.使用就是各個Servlet容器自己的默認Servlet.補充說明:多個HandlerMapping的執行順序問題:的order屬性值是:0自動注冊的SimpleUrlHandlerMapping的order屬性值是:2147483646自動注冊的SimpleUrlHandlerMapping的order屬性值是:2147483647spring會先執行order值比較小的。當訪問一個a.jpg圖片文件時,先通過來找處理器,一定是找不到的,因為我們沒有叫a.jpg的Action。然後再按order值升序找,由於最後一個SimpleUrlHandlerMapping是匹配"/**"的,所以一定會匹配上,就可以響應圖片。訪問一個圖片,還要走層層匹配。不知性能如何?最後再說明一下,方案二、方案三在訪問靜態資源時,如果有匹配的(近似)總攔截器,就會走攔截器。如果你在攔截中實現許可權檢查,要注意過濾這些對靜態文件的請求。如何你的DispatcherServlet攔截*.do這樣的URL後綴,就不存上述問題了。還是有後綴方便。
B. springmvc配置servlet的攔截形式/*和/的區別
一、我們都知道在基於Spring的Application中,需要在web.xml中增加下面類似的配置信息:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Spring MVC Servlet -->
<servlet>
<servlet-name>servletName</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servletName</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
此處需要特別強調的是 <url-pattern>/</url-pattern>使用的是/,而不是/*,如果使用/*,那麼請求時可以通過DispatcherServlet轉發到相應的Action或者Controller中的,但是返回的內容,如返回的jsp還會再次被攔截,這樣導致404錯誤,即訪問不到jsp。所以如果以後發現總是有404錯誤的時候,別忘了check一下 <url-pattern>/</url-pattern>的配置是否是/*.
二、其實Spring 的Servlet攔截器匹配規則(即 <url-pattern>...</url-pattern> )都可以自己定義,例:當映射為@RequestMapping("/user/add")時
1、攔截*.do、*.htm, 例如:/user/add.do
這是最傳統的方式,最簡單也最實用。不會導致靜態文件(jpg,js,css)被攔截。
2、攔截/,例如:/user/add
可以實現現在很流行的REST風格。很多互聯網類型的應用很喜歡這種風格的URL。
弊端:會導致靜態文件(jpg,js,css)被攔截後不能正常顯示。想實現REST風格,事情就是麻煩一些。後面有解決辦法還算簡單。
3、攔截/*,這是一個錯誤的方式,請求可以走到Action中,但轉到jsp時再次被攔截,不能訪問到jsp。
三、如何訪問到靜態的文件,如jpg,js,css?
如果你的DispatcherServlet攔截"*.do"這樣的有後綴的URL,就不存在訪問不到靜態資源的問題。
如果你的DispatcherServlet攔截"/",為了實現REST風格,攔截了所有的請求,那麼同時對*.js,*.jpg等靜態文件的訪問也就被攔截了。
我們要解決這個問題。
目的:可以正常訪問靜態文件,不可以找不到靜態文件報404。
方案一:激活Tomcat的defaultServlet來處理靜態文件
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
特點:1. 要配置多個,每種文件配置一個。
2. 要寫在DispatcherServlet的前面, 讓 defaultServlet先攔截請求,這樣請求就不會進入Spring了。
3. 高性能。
備註:
Tomcat, Jetty, JBoss, and GlassFish 自帶的默認Servlet的名字 -- "default"
Google App Engine 自帶的 默認Servlet的名字 -- "_ah_default"
Resin 自帶的 默認Servlet的名字 -- "resin-file"
WebLogic 自帶的 默認Servlet的名字 -- "FileServlet"
WebSphere 自帶的 默認Servlet的名字 -- "SimpleFileServlet"
方案二: 在spring3.0.4以後版本提供了mvc:resources , 使用方法:
<!-- 對靜態資源文件的訪問 -->
<mvc:resources mapping="/images/**" location="/images/" />
images/**映射到 ResourceHttpRequestHandler進行處理,location指定靜態資源的位置.可以是web application根目錄下、jar包裡面,這樣可以把靜態資源壓縮到jar包中。cache-period 可以使得靜態資源進行web cache
如果出現下面的錯誤,可能是沒有配置<mvc:annotation-driven />的原因。
報錯WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'使用<mvc:resources/>元素,把mapping的URI注冊到SimpleUrlHandlerMapping的urlMap中,
key為mapping的URI pattern值,而value為ResourceHttpRequestHandler,
這樣就巧妙的把對靜態資源的訪問由HandlerMapping轉到ResourceHttpRequestHandler處理並返回,所以就支持classpath目錄,jar包內靜態資源的訪問.
另外需要注意的一點是,不要對SimpleUrlHandlerMapping設置defaultHandler.因為對static uri的defaultHandler就是ResourceHttpRequestHandler,
否則無法處理static resources request.
方案三 ,使用<mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
會把"/**" url,注冊到SimpleUrlHandlerMapping的urlMap中,把對靜態資源的訪問由HandlerMapping轉到 org.springframework.web.servlet.resource. 處理並返回.
使用就是各個Servlet容器自己的默認Servlet.
補充說明:多個HandlerMapping的執行順序問題:
的order屬性值是:0
< mvc:resources/ > 自動注冊的 SimpleUrlHandlerMapping 的order屬性值是: 2147483646
<mvc:default-servlet-handler/>自動注冊 的SimpleUrlHandlerMapping 的order屬性值是: 2147483647
spring會先執行order值比較小的。當訪問一個a.jpg圖片文件時,先通過 來找處理器,一定是找不到的,因為我們沒有叫a.jpg的Action。然後再按order值升序找,由於最後一個 SimpleUrlHandlerMapping 是匹配 "/**"的,所以一定會匹配上,就可以響應圖片。 訪問一個圖片,還要走層層匹配。不知性能如何?
最後再說明一下,方案二、方案三 在訪問靜態資源時,如果有匹配的(近似)總攔截器,就會走攔截器。如果你在攔截中實現許可權檢查,要注意過濾這些對靜態文件的請求。
如何你的DispatcherServlet攔截 *.do這樣的URL後綴,就不存上述問題了。還是有後綴方便。
C. spring spring mvc 怎麼發布hessiaon
spring依賴的jar包如下: 下面是每個jar包的說明 spring.jar 是包含有完整發布模塊的單個jar 包。但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。 spring-src.zip就是所有的源代碼壓縮包
D. 一個簡單的SpringMVC需要哪些jar包
spring依賴的jar包如下:
下面是每個jar包的說明
spring.jar 是包含有完整發布模塊的單個jar 包。但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。
spring-src.zip就是所有的源代碼壓縮包。
除了spring.jar 文件,Spring 還包括有其它21 個獨立的jar 包,各自包含著對應的Spring組件,用戶可以根據自己的需要來選擇組合自己的jar 包,而不必引入整個spring.jar 的所有類文件。
spring-core.jar
這個jar 文件包含Spring 框架基本的核心工具類。Spring 其它組件要都要使用到這個包里的類,是其它組件的基本核心,當然你也可以在自己的應用系統中使用這些工具類。
外部依賴Commons Logging, (Log4J)。
spring-beans.jar
這個jar 文件是所有應用都要用到的,它包含訪問配置文件、創建和管理bean 以及進行Inversion of Control / Dependency Injection(IoC/DI)操作相關的所有類。如果應用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。
外部依賴spring-core,(CGLIB)。
spring-aop.jar
這個jar 文件包含在應用中使用Spring 的AOP 特性時所需的類和源碼級元數據支持。使用基於AOP 的Spring特性,如聲明型事務管理(Declarative Transaction Management),也要在應用里包含這個jar包。
外部依賴spring-core, (spring-beans,AOP Alliance, CGLIB,Commons Attributes)。
spring-context.jar
這個jar 文件為Spring 核心提供了大量擴展。可以找到使用Spring ApplicationContext特性時所需的全部類,JDNI 所需的全部類,instrumentation組件以及校驗Validation 方面的相關類。
外部依賴spring-beans, (spring-aop)。
spring-.jar
這個jar 文件包含Spring DAO、Spring Transaction 進行數據訪問的所有類。為了使用聲明型事務支持,還需在自己的應用里包含spring-aop.jar。
外部依賴spring-core,(spring-aop, spring-context, JTA API)。
spring-jdbc.jar
這個jar 文件包含對Spring 對JDBC 數據訪問進行封裝的所有類。
外部依賴spring-beans,spring-。
spring-support.jar
這個jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),郵件服務,腳本服務(JRuby),緩存Cache(EHCache),任務計劃Scheling(uartz)方面的類。
外部依賴spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache)
spring-web.jar
這個jar 文件包含Web 應用開發時,用到Spring 框架時所需的核心類,包括自動載入Web Application Context 特性的類、Struts 與JSF 集成類、文件上傳的支持類、Filter 類和大量工具輔助類。
外部依賴spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)。
spring-webmvc.jar
這個jar 文件包含Spring MVC 框架相關的所有類。包括框架的Servlets,Web MVC框架,控制器和視圖支持。當然,如果你的應用使用了獨立的MVC 框架,則無需這個JAR 文件里的任何類。
外部依賴spring-web, (spring-support,Tiles,iText,POI)。
spring-portlet.jar
spring自己實現的一個類似Spring MVC的框架。包括一個MVC框架和控制器。
外部依賴spring-web, Portlet API,(spring-webmvc)。
spring-struts.jar
Struts框架支持,可以更方便更容易的集成Struts框架。
外部依賴spring-web,Struts。
spring-remoting.jar
這個jar 文件包含支持EJB、遠程調用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的類。
外部依賴spring-aop, (spring-context,spring-web,Hessian,Burlap,JAX-RPC,EJB API)。
spring-jmx.jar
這個jar包提供了對JMX 1.0/1.2的支持類。
外部依賴spring-beans,spring-aop, JMX API。
spring-jms.jar
這個jar包提供了對JMS 1.0.2/1.1的支持類。
外部依賴spring-beans,spring-,JMS API。
spring-jca.jar
對JCA 1.0的支持。
外部依賴spring-beans,spring-, JCA API。
spring-jdo.jar
對JDO 1.0/2.0的支持。
外部依賴spring-jdbc, JDO API, (spring-web)。
spring-jpa.jar
對JPA 1.0的支持。
外部依賴spring-jdbc, JPA API, (spring-web)。
spring-hibernate2.jar
對Hibernate 2.1的支持,已經不建議使用。
外部依賴spring-jdbc,Hibernate2,(spring-web)。
spring-hibernate3.jar
對Hibernate 3.0/3.1/3.2的支持。
外部依賴spring-jdbc,Hibernate3,(spring-web)。
spring-toplink.jar
對TopLink框架的支持。
外部依賴spring-jdbc,TopLink。
spring-ibatis.jar
對iBATIS SQL Maps的支持。
外部依賴spring-jdbc,iBATIS SQL Maps。
另外的兩個包。
spring-mock.jar
這個jar 文件包含Spring 一整套mock 類來輔助應用的測試。Spring 測試套件使用了其中大量mock 類,這樣測試就更加簡單。模擬HttpServletRequest 和HttpServletResponse 類在Web 應用單元測試是很方便的。並且提供了對JUnit的支持。
外部依賴spring-core。
spring-aspects.jar
提供對AspectJ的支持,以便可以方便的將面向方面的功能集成進IDE中,比如Eclipse AJDT。
外部依賴。
WEAVER JARS (dist/weavers)說明。
spring-agent.jar
Spring的InstrumentationSavingAgent (為InstrumentationLoadTimeWeaver),一個設備代理包,可以參考JDK1.5的Instrumentation功能獲得更多信息。
外部依賴none (for use at JVM startup: "-javaagent:spring-agent.jar")。
spring-tomcat-weaver.jar
擴展Tomcat的ClassLoader,使其可以使用instrumentation(設備)類。
外部依賴none (for deployment into Tomcat's "server/lib" directory)。
E. 一個簡單的SpringMVC需要哪些jar包
spring依賴的jar包如下:
下面是每個jar包的說明
spring.jar 是包含有完整發布模塊的單個jar 包。但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。
spring-src.zip就是所有的源代碼壓縮包。
除了spring.jar 文件,Spring 還包括有其它21 個獨立的jar 包,各自包含著對應的Spring組件,用戶可以根據自己的需要來選擇組合自己的jar 包,而不必引入整個spring.jar 的所有類文件。
spring-core.jar
這個jar 文件包含Spring 框架基本的核心工具類。Spring 其它組件要都要使用到這個包里的類,是其它組件的基本核心,當然你也可以在自己的應用系統中使用這些工具類。
外部依賴Commons Logging, (Log4J)。
spring-beans.jar
這個jar 文件是所有應用都要用到的,它包含訪問配置文件、創建和管理bean 以及進行Inversion of Control / Dependency Injection(IoC/DI)操作相關的所有類。如果應用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。
外部依賴spring-core,(CGLIB)。
spring-aop.jar
這個jar 文件包含在應用中使用Spring 的AOP 特性時所需的類和源碼級元數據支持。使用基於AOP 的Spring特性,如聲明型事務管理(Declarative Transaction Management),也要在應用里包含這個jar包。
外部依賴spring-core, (spring-beans,AOP Alliance, CGLIB,Commons Attributes)。
spring-context.jar
這個jar 文件為Spring 核心提供了大量擴展。可以找到使用Spring ApplicationContext特性時所需的全部類,JDNI 所需的全部類,instrumentation組件以及校驗Validation 方面的相關類。
外部依賴spring-beans,