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。
分享到:
相关推荐
这个容器包含了所有的bean定义,包括服务层、数据访问层等组件。通过这种方式,ContextLoaderListener确保了整个Spring应用的生命周期管理。 两者的主要区别在于: 1. 职责不同:DispatcherServlet主要负责处理...
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等,适合分离前台...
DispatcherServlet是一个标准的Servlet,因此可以在web.xml配置文件中定义多个实例,每个实例都有自己的配置和作用范围。在web.xml中,我们通常会看到如下配置: ```xml <servlet-name>example <servlet-class>...
在 Spring Boot 中配置多个 DispatcherServlet 在 Spring Boot 中,配置多个 DispatcherServlet 是一种常见的需求,特别是在大型项目中需要对不同服务进行不同的配置管理时。Spring Boot 为我们自动配置了一个开箱...
Spring源码学习九:DispatcherServlet初始化源码分析1 DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的初始化过程。 首先,从DispatcherServlet的名称上...
在`web.xml`中的配置中,`<servlet>`元素定义了DispatcherServlet的实例,其中`<load-on-startup>`指定启动服务器时初始化Servlet的顺序,数字越小,初始化越早。`<url-pattern>`定义了DispatcherServlet处理的请求...
在上面的配置中,我们定义了一个名为springmvcServlet的Servlet,并指定其类为org.springframework.web.servlet.DispatcherServlet。同时,我们还指定了初始化参数contextConfigLocation,用于加载SpringMVC的配置...
SpringMVC DispatcherServlet 初始化过程详解 DispatcherServlet 是 SpringMVC 框架中的核心组件,对于 SpringMVC 的请求处理和响应起着至关重要的作用。DispatcherServlet 的初始化过程是 SpringMVC 实现原理的...
1. `webapp/WEB-INF/spring/appServlet/servlet-context.xml` - Spring MVC的配置文件,配置DispatcherServlet、视图解析器、Bean定义等。 2. `webapp/WEB-INF/web.xml` - Web应用的部署描述符,定义...
【SpringMVC源码剖析(二)- DispatcherServlet的前世今生1】 在Spring MVC框架中,DispatcherServlet扮演着至关重要的角色,它是整个框架的核心。本文将深入探讨DispatcherServlet的两个核心设计原则及其在Spring ...
"配置DispatcherServlet的方法介绍" DispatcherServlet是Spring MVC的前端控制器,是一个核心组件,负责处理HTTP请求和响应。在Spring MVC中,DispatcherServlet是一个centralized servlet,它处理所有的HTTP请求,...
接下来我们将深入探讨DispatcherServlet的请求处理机制。 首先,DispatcherServlet在初始化时会通过配置加载一系列的组件,包括HandlerMapping、HandlerAdapter、ViewResolver等,这些组件协同工作以处理HTTP请求。...
本篇文章将深入探讨DispatcherServlet的请求分发流程。 DispatcherServlet继承自HttpServlet,其核心功能在于处理HTTP请求。在Servlet的service方法中,DispatcherServlet会接收到请求并进行分发。在...
在本文中,我们将深入探讨`DispatcherServlet`的初始化流程,这是SpringMVC的核心组件。`DispatcherServlet`扮演着中央调度者的角色,负责接收请求、解析请求信息,并调用合适的控制器进行业务逻辑处理。 首先,让...
本篇文章将深入分析DispatcherServlet如何实现请求转发的过程,以及Spring MVC与Servlet容器的紧密集成。 首先,当一个HTTP请求到达Servlet容器时,如Tomcat,容器会调用Servlet的`service()`方法。对于...
DispatcherServlet之前端控制器架构详解 DispatcherServlet是Spring MVC框架中的核心组件,作为前端控制器,负责拦截和分发请求到不同的控制器去处理。下面我们将详细介绍DispatcherServlet的架构和生命周期。 ...