全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈springmvc的DispatcherServlet分析

本文介绍了springmvc的DispatcherServlet,分享给大家,具体如下:

一、程序

(一)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拦截。

以本文中的程序为例,通过controller中的/index.html找到的方法为getIndex(),返回的ModalAndView为/WEB-INF/view/index.jsp,再次被DispatcherServlet拦截后就会在controller中寻找/WEB-INF/view/index.jsp所对应的方法,这个方法是没有的,所以会报错。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# springmvc  # DispatcherServlet  # 通过xml配置SpringMVC注解DispatcherServlet初始化过程解析  # SpringMVC中DispatcherServlet的HandlerMapping详解  # SpringMVC核心DispatcherServlet处理流程分步详解  # 深入理解SpringMVC中央调度器DispatcherServlet  # Springmvc DispatcherServlet原理及用法解析  # SpringMVC DispatcherServlet组件实现解析  # SpringMVC之DispatcherServlet配置文件应该放在哪里呢  # 扩展名  # 文件上传  # 多个  # 会在  # 给大家  # 就得  # 为例  # 可以看出  # 报错  # 这是因为  # 其主要  # 可以获得  # 有三种  # 大家多多  # 过程中  # 正常显示  # 这样的话  # 再读  # 所对应  # 拦截器 


相关文章: 武清网站制作公司,天津武清个人营业执照注销查询系统网站?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  网站制作知乎推荐,想做自己的网站用什么工具比较好?  网页设计网站制作软件,microsoft office哪个可以创建网页?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站之星展会模版如何一键下载生成?  Python如何创建带属性的XML节点  如何用wdcp快速搭建高效网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  宁波免费建站如何选择可靠模板与平台?  山东云建站价格为何差异显著?  如何选择高效稳定的ISP建站解决方案?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何基于云服务器快速搭建个人网站?  建站主机选购指南与交易推荐:核心配置解析  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  高端网站建设与定制开发一站式解决方案 中企动力  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  如何基于PHP生成高效IDC网络公司建站源码?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  ,巨量百应是干嘛的?  建站之星如何实现网站加密操作?  平台云上自助建站如何快速打造专业网站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何通过云梦建站系统实现SEO快速优化?  c# 在ASP.NET Core中管理和取消后台任务  建站之星会员如何解锁更多建站功能?  Android自定义listview布局实现上拉加载下拉刷新功能  建站之星代理费用多少?最新价格详情介绍  实现点击下箭头变上箭头来回切换的两种方法【推荐】  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何通过wdcp面板快速创建网站?  贸易公司网站制作流程,出口贸易网站设计怎么做?  如何通过虚拟主机快速搭建个人网站?  济南专业网站制作公司,济南信息工程学校怎么样?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何在万网自助建站平台快速创建网站?  济南网站制作的价格,历城一职专官方网站?  常州企业网站制作公司,全国继续教育网怎么登录?  如何选择CMS系统实现快速建站与SEO优化?  高端建站如何打造兼具美学与转化的品牌官网?  电商网站制作价格怎么算,网上拍卖流程以及规则?  开心动漫网站制作软件下载,十分开心动画为何停播?  建站之星代理如何获取技术支持?  淘宝制作网站有哪些,淘宝网官网主页?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  网站制作的步骤包括,正确网址格式怎么写?  建站之家VIP精选网站模板与SEO优化教程整合指南  如何通过FTP空间快速搭建安全高效网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。