- 前言
最近打算利用闲暇的时间从零写个springmvc项目,工作中的项目框架都是搭好的,写业务逻辑多些,所以开始就一路磕磕碰碰。快半个月了项目还没搭起来。对底层和框架了解的太少了,趁此机会把遇到的问题都好好研究一下并记录下来,供以后学习用。希望文中有不对的或是不严谨的地方还请不吝赐教,感谢!!!
- 正文
1.什么DispatcherServlet
与许多其他的web框架一样,SpringMvc是围绕前端控制器模式设计的,在这一模式中DispatcherServlet,为请求处理提供了一种共享的算法,而实际的工作是由可配置的委托组件执行的。这个模型是灵活的,支持不同的工作流。
DistpatcherServlet和所有的servelet一样需要根据Servlet规范使用Java配置或web.xml来声明和映射。然后,DispatcherServlet使用Spring配置来发现它所需要的委托组件,用于请求映射、视图解析、异常处理等等。
下面是一个注册和初始化DispatcherServlet的Java配置示例。这个类是由Servlet容器自动检测的。
public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletCxt) { // Load Spring web application configuration AnnotationConfigWebApplicationContext cxt = new AnnotationConfigWebApplicationContext(); cxt.register(AppConfig.class); cxt.refresh(); // Create DispatcherServlet DispatcherServlet servlet = new DispatcherServlet(cxt); // Register and map the Servlet ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet); registration.setLoadOnStartup(1); registration.addMapping("/app/*"); } }
2.DispatcherServlet在web.xml中的配置方法
(1)通过web.xml中<servlet-name>来配置
此方法会加载WEB-INF下的xxx-servlet.xml配置文件,此处“xxx”即为web.xml中<servlet-name>配置的名字。
因此下面代码会加载WEB-INF下的springmvc-servlet.xml。
<servlet> <!-- springmvc的核心是dispatcherServlet他负责控制整个页面的请求路径 --> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- load-on-startup:表示容器启动时初始化该servlet; --> <load-on-startup>1</load-on-startup> </servlet>
(2)通过web.xml中DispatcherServlet的init-param来配置
注意配置文件路径,设计绝对路径相对路径。否则会报错
<servlet> <!-- springmvc的核心是dispatcherServlet他负责控制整个页面的请求路径 --> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!-- 下面代码会加载src下的springmvc-servlet.xml。 --> <param-value>classpath:springmvc-servlet.xml</param-value> <!-- 下面代码会加载WEB-INF下的springmvc-servlet.xml。 --> <!-- <param-value>/WEB-INF/springmvc-servlet.xml</param-value> --> </init-param> <!-- load-on-startup:表示容器启动时初始化该servlet; --> <load-on-startup>1</load-on-startup> </servlet>
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.
3.DispatcherServlet的作用
未完待续
ps :参考https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web.html#mvc-servlet,
https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/web.html#mvc-container-config
http://www.iigrowing.cn/spring_pei_zhi_wen_jian_location_de_ji_zhong_she_zhi_fang_fa.html。