DispatcherServlet預設使用servlet名稱加上"-servlet.xml"作為其定義檔名稱,定義檔預設是放在WEB-INF下,您也可以自行指定定義檔名稱與位置,例如:
代碼: |
<servlet> <servlet-name>hello</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/hello1-servlet.xml, /WEB-INF/hello2-servlet.xml</param-value> </init-param> </servlet> |
DispatcherServlet各有其namespace與應用程式context,您可以在web.xml中定義多個DispatcherServlet的實例,分別負責不同模組的請求處理工作。
Spring對DispatcherServlet所處理的組件(component)都當作一般的Bean來處理,所以在設定DispatcherServlet的定義檔時,就如同之前的主題中處理Bean定義檔一樣,一致性的組態方式是Spring所提供的優點之一,每個組件的設定都像是Bean,所以您只要查詢API文件,瞭解屬性的關係與作用,並在定義檔中設定好依賴關係,就可以使用這些組件。
一些設定DispatcherServlet的定義檔方式,我們前一個主題中介紹了大半,這邊補充一些額外的設定。
首先,我們之前在設定helloUserAction,在設定viewPage時,必須設定好完整的目錄與檔案名稱,例如:
代碼: |
<bean id="helloUserAction" class="onlyfun.caterpillar.HelloUserAction"> <property name="helloWord"> <value>Hello!</value> </property> <property name="viewPage"> <value>/WEB-INF/jsp/hellouser.jsp</value> </property> </bean> |
您可以在viewResolver中設定prefix與suffix屬性,分別設定除了檔名之外的前置與後置文字,這樣您的viewPage屬性就可以只打檔案的主要名稱,直接給個實例:
代碼: |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hellouser.do">helloUserAction</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.InternalResourceView</value> </property> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="helloUserAction" class="onlyfun.caterpillar.HelloUserAction"> <property name="helloWord"> <value>Hello!</value> </property> <property name="viewPage"> <value>hellouser</value> </property> </bean> </beans> |
您也可以將viewResolver的定義獨立出來至一個屬性檔中,使用org.springframework.web.servlet.view.ResourceBundleViewResolver,這樣作的好處是您可以根據您實際的url去處設定不同的表示層技術,例如:
代碼: |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hellouser.do">helloUserAction</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename"> <value>views</value> </property> </bean> <bean id="helloUserAction" class="onlyfun.caterpillar.HelloUserAction"> <property name="helloWord"> <value>Hello!</value> </property> <property name="viewPage"> <value>hellouser</value> </property> </bean> </beans> |
我們在ResourceBundleViewResolver的basename屬性設定了views名稱(實際上,views也是basename的預設值),這表示我們將使用views.properties來設定表示層技術的viewClass與url,我們的views.properties如下:
代碼: |
hellouser.class=org.springframework.web.servlet.view.InternalResourceView hellouser.url=/WEB-INF/jsp/hellouser.jsp
welcomeuser.class=org.springframework.web.servlet.view.JstlView welcomeuser.url=/WEB-INF/jsp/welcomeuser.jsp
otherview.class=org.springframework.web.servlet.view.VelocityView otherview.url=/WEB-INF/vm/other.vm |
利用這個方式,我們可以混合不同的表示層技術在同一個Web應用程式中,views.properties中是class與url值設定,其hellouser與welcomeuser的名稱是我們給ModelAndView的名稱,例如我們設定了hellouser給ModelAndView的話,就會去找hellouser.class與hellouser.url來設定表示層技術與url去處,我們則在這邊是透過helloUserAction的viewPage屬性來注入,避免將名稱寫死在程式中。
如果您的JSP網頁或Servlet中會丟出例外,而您想捕捉這個例外,除了容器與JSP網頁的設定方法之外(參考JSP/Servlet版面中的介紹),您也可以在DispatcherServlet的定義檔中設定錯誤處理網頁,設定一個exceptionResolver Bean,例如SimpleMappingExceptionResolver:
代碼: |
.... <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.InternalResourceView</value> </property> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.sql.SQLException">exsql</prop> <prop key="java.sql.IOException">exio</prop> </props> </property> </bean> .... |
如此設定,只要發生了SQLException,就會連接至/WEB-INF/jsp/exsql.jsp,而發生了IOException,就會連接至/WEB-INF/jsp/exio.jsp。
分享到:
相关推荐
org.springframework.web.servlet.DispatcherServlet java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet at org.apache.catalina.loader.WebappClassLoader.loadClass ...
SpringMVC DispatcherServlet重写、自定义拦截器拦截器源码
Springboot 2.4.4 网上搜到的配置多个DispatcherServlet 都有坑,自己避坑写的一个demo,处理.do .htm请求,Controller分离不会出现一个Controller可以处理.do也处理.htm可自己扩展.action .json等,适合分离前台...
NULL 博文链接:https://angie.iteye.com/blog/2334955
主要介绍了Spring MVC之DispatcherServlet_动力节点Java学院整理的相关资料,需要的朋友可以参考下
本篇文章主要介绍了浅谈springmvc的DispatcherServlet分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本篇文章主要介绍了详解在spring boot中配置多个DispatcherServlet,具有一定的参考价值,有兴趣的可以了解一下。
主要介绍了Spring MVC之DispatcherServlet详解_动力节点Java学院整理的相关资料,需要的朋友可以参考下
主要介绍了SpringMVC DispatcherServlet组件实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
SpringBoot-2.7.6内置Tomcat启动以及DispatcherServlet装配过程,源码跟踪调试流程图
Spring源码学习九:DispatcherServlet初始化源码分析1
Spring-MVC-DispatcherServlet-示例 Maven项目:基于Mvc架构模式的简单Spring项目
在SpringMVC中 所有的请求都由dispatcherServlet处理(url-pattern配置的是/),当配置文件中有对静态资源的处理 时候 ,先匹配 welcome-file-list 中的文件,依次查找,找到了就 返回,如果没有找到就继续匹配到...
今天小编就为大家分享一篇关于配置DispatcherServlet的方法介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要给大家介绍了关于Spring MVC学习教程之DispatcherServlet请求处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
spring的web框架,详细的介绍有关框架的概述,DispatcherServlet、HandlerMapping、Controller、ModelAndView、ViewResolver、HandlerInterceptor的相关介绍
Spring框架系列(13) - SpringMVC实现原理之DispatcherServlet的初始化过程.doc
2020-04-27 22:15:44.892 ERROR 13764 --- [nio-8081-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request ...