本篇文章给大家分享的是有关DispatcherServlet在springmvc中的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
一、程序
(一)web.xml文件中的内容
<!-- springMVC核心配置 -->
<servlet>
<servlet-name>springmvcServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--spingMVC的配置路径 -->
<param-value>classpath:springmvc/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvcServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
(二)src/main/resource/springmvc/spring-mvc.xml中的内容
<!-- 扫描controller(controller层注入) -->
<context:component-scan base-package="com.z.controller"/>
<!-- 对模型视图添加前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/view/" p:suffix=".jsp"/>
(三)src/main/java/com/z/controller/IndexController.java中的内容
package com.z.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
@RequestMapping("/index.html")
public ModelAndView getIndex(HttpServletRequest request) throws Exception {
ModelAndView mav = new ModelAndView("index");
return mav;
}
}
(四)src/main/webapp/WEB-INF/view/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>" rel="external nofollow" >
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
</body>
</html>
(五)运行结果:正常显示index.jsp中的内容
二、DispatchServlet流程
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。
其主要职责如下:
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
从以上我们可以看出DispatcherServlet主要负责流程的控制。
三、web.xml中servlet的执行顺序
<servlet>
<servlet-name>springmvcServlet</servlet-name> (1)
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> (2)
</servlet>
<servlet-mapping>
<servlet-name>springmvcServlet</servlet-name> (3)
<url-pattern>*.html</url-pattern> (4)
</servlet-mapping>
Tomcat服务器首先读取(4)中url-pattern,然后获取(3)中的servlet-name。再读取(1)中的servlet-name,最后查找(2)中的DispatcherServlet类。
所以,读取顺序为(4)-->(3)-->(1)-->(2)
注意,(3)中的servlet-name要和(1)中的servlet-name完全一样。
四、Sevlet的匹配方式和url-pattern的写法
Servlet的匹配顺序
1:精确(Exact)匹配,比如index.html
2:前缀(Prefix)匹配,比如/*
3:扩展名(Extension)匹配,比如*.html
4:默认(Default)匹配
这样的话,本程序中web.xml的url-pattern有三种写法:
(1)精确匹配
<servlet-mapping>
<servlet-name>springmvcServlet</servlet-name>
<url-pattern>index.html</url-pattern>
</servlet-mapping>
表示所有以index.html为结尾的请求可以匹配。比如:http://localhost:8080/项目名/index.html
这种方式有很大的局限性,比如有好多个html请求,比如index.html, login.html, abc.html等,就得添加很多个url-pattern。
(2)扩展名匹配
<servlet-mapping>
<servlet-name>springmvcServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
这种写法,可以匹配所有后缀名为html的请求
(3)默认匹配
<servlet-mapping>
<servlet-name>springmvcServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注意,下面这种写法是错误的
<servlet-mapping>
<servlet-name>springmvcServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
这是因为,找到的jsp文件会再次DispatcherServlet拦截。
以上就是DispatcherServlet在springmvc中的作用是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。