spring mvc集成shiro的web.xml配置詳解


<?xml version="1.0" encoding="UTF-8" ?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>lanyuan-ace</display-name>

<!--過濾字符集-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 配置springmvc servlet -->
<!--如果使用如上配置,Spring Web
MVC框架將加載“classpath:spring-mvc.xml”來進行初始化上下文
而不是“/WEB-INF/[servlet名字]-servlet.xml”。-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--表示啟動容器時初始化該Servlet;-->
<!--1)load-on-startup元素標記容器是否在啟動的時候就加載這個servlet(實例化並調用其init()方法)。

2)它的值必須是一個整數,表示servlet應該被載入的順序

2)當值為0或者大於0時,表示容器在應用啟動時就加載並初始化這個servlet;

3)當值小於0或者沒有指定時,則表示容器在該servlet被選擇時才會去加載。

4)正數的值越小,該servlet的優先級越高,應用啟動時就越先加載。

5)當值相同時,容器就會自己選擇順序來加載。-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- / 表示所有的請求都要經過此serlvet;此配置是后綴名為.shtml的請求經過spring mvc來處理
其他的像一些靜態資源不需要spring mvc來處理 -->
<url-pattern>*.shtml</url-pattern>
</servlet-mapping>

<!-- spring的監聽器 -->
<!--
context-param
作用:該元素用來聲明應用范圍(整個WEB項目)內的上下文初始化參數。
param-name 設定上下文的參數名稱。必須是唯一名稱
param-value 設定的參數名稱的值
初始化過程:
在啟動Web項目時,容器(比如Tomcat)會讀web.xml配置文件中的兩個節點<listener>和<contex-param>。
接着容器會創建一個ServletContext(上下文),應用范圍內即整個WEB項目都能使用這個上下文。
接着容器會將讀取到<context-param>轉化為鍵值對,並交給ServletContext。
容器創建<listener></listener>中的類實例,即創建監聽(備注:listener定義的類可以是自定義
的類但必須需要繼承ServletContextListener)。
在監聽的類中會有一個contextInitialized(ServletContextEvent event)初始化方法,在這個方法中可以
通過event.getServletContext().getInitParameter("contextConfigLocation") 來得到context-param 設定的值。
在這個類中還必須有一個contextDestroyed(ServletContextEvent event) 銷毀方法.用於關閉應用前釋放資源,
比如說數據庫連接的關閉。
得到這個context-param的值之后,你就可以做一些操作了.注意,這個時候你的WEB項目還沒有完全啟動完成.
這個動作會比所有的Servlet都要早。-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-shiro.xml,classpath:spring-application.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<!-- Shiro配置 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- <error-page>
<error-code>404</error-code>
<location>/404/404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page> -->




<!--
① 在web.xml文件中經常看到這樣的配置<servlet-name>default</servlet-name>,
這個配置的作用是:對客戶端請求的靜態資源如圖片、JS文件等的請求交由默認的servlet進行處理,
②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/" />
如果出現下面的錯誤,可能是沒有配置<mvc:annotation-driven />的原因。
報錯WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770]
in DispatcherServlet with name 'springMVC'
④使用<mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
會把"/**" url,注冊到SimpleUrlHandlerMapping的urlMap中,把對靜態資源的訪問由HandlerMapping轉到
org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler處理並返回.
DefaultServletHttpRequestHandler使用就是各個Servlet容器自己的默認Servlet.
④⑤
-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.eot</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.ttf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.swf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.zip</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</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>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.woff</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.shtml</welcome-file>
</welcome-file-list>

<!--,發現直接修改welcome-file為一個action請求不生效。
經過查詢資料發現有如下三種解決辦法:
1. <welcome-file-list>
<welcome-file>/index.action</welcome-file>
</welcome-file-list>

然后在webapp目錄下新建一個空文件index.action

2. <welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>

在jsp中做重定向跳轉

3.<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>

在html中使用META重定向操作:<META HTTP-EQUIV="Refresh" CONTENT="0;URL=max/HelloWorld.action">

其中,content="1 是時間控制,表示1秒后自動跳轉到要跳轉的頁面. content="0 表示打開該頁后立即跳轉到你要跳轉的頁面. url 是要跳轉的路徑

綜上所述,個人感覺第一個方法簡潔方便快速。當歡迎頁面查找index.action,並進行頁面請求時會經過struts攔截器,從而間接的發起action請求。-->
</web-app>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM