Spring MVC 使用介绍(二)—— DispatcherServlet

一、Hello World示例

1、引入依赖

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
</dependency>
<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.5.RELEASE</version>
</dependency>

2、web.xml中定义servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name>Archetype Created Web Application</display-name><servlet>  <servlet-name>test-servlet</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/test-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup>  </servlet>  
<servlet-mapping> <servlet-name>test-servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
</web-app>

3、配置servlet

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"><!-- HandlerMapping -->  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  <!-- HandlerAdapter -->  <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- ViewResolver -->  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  <property name="prefix" value="/WEB-INF/jsp/"/>  <property name="suffix" value=".jsp"/>  </bean>  <!-- 处理器 -->  <bean name="/hello" class="cn.matt.controller.TestController"/>
</beans>

配置说明:

  • BeanNameUrlHandlerMapping:表示将请求的URL映射为Bean名,如URL为 “上下文/hello”,则Spring配置文件必须有一个名字为“/hello”的Bean
  • SimpleControllerHandlerAdapter:表示所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean可以作为Spring Web MVC中的处理器
  • InternalResourceViewResolver:用于支持Servlet、JSP视图解析
    • viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包
    • prefix、suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为hello,则该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”

4、处理器

public class TestController implements Controller {public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {//1、收集参数、验证参数  //2、绑定参数到命令对象  //3、将命令对象传入业务对象进行业务处理  //4、选择下一个页面  ModelAndView mv = new ModelAndView();  //添加模型数据 可以是任意的POJO对象  mv.addObject("message", "Hello World!");  //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面  mv.setViewName("hello");  return mv;  }
}

5、视图hello.jsp

<%@ page language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>${message}  
</body>
</html>

使用tomcat启动,在浏览器输入 http://localhost:8080/myweb/hello 即可访问

 

二、DispatcherServlet详解

1、DispatcherServlet在web.xml中的配置

<servlet>  <servlet-name>test-servlet</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/test-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup>  
</servlet>  
<servlet-mapping>  <servlet-name>test-servlet</servlet-name>  <url-pattern>/</url-pattern>  
</servlet-mapping> 

load-on-startup:表示启动容器时初始化该Servlet

url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的,详细可参考javaweb学习总结(五)——Servlet开发(一)

DispatcherServlet初始化配置:

  • contextClass:实现WebApplicationContext接口的类, 默认使用XmlWebApplicationContext
  • contextConfigLocation:指定上下文配置文件,可以被分成多个字符串(使用逗号作为分隔符) 来支持多个上下文,默认是“/WEB-INF/[servlet名字]-servlet.xml”。支持相对路径和类路径,如‘classpath:spring-mvc.xml’或‘/WEB-INF/test-servlet.xml’
  • namespace:WebApplicationContext命名空间,默认值是[server-name]-servlet

2、通用上下文配置

<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-context.xml</param-value>
</context-param>
<listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

通用上下文用于加载除Web层的其他Bean,如service、dao等,以便与其他Web框架集成

ContextLoaderListener初始化配置:

  • contextConfigLocation:指定通用上下文配置文件,使用方式与DispatcherServlet相同,默认会去 /WEB-INFO/ 下加载applicationContext.xml
  • contextClass:指定ApplicationContext的实现类,默认为XmlWebApplicationContext

3、DispatcherServlet上下文与通用上下文的关系

                           

通用上下文:用于加载除Web层的其他Bean,如service、dao等,以便与其他Web框架集成;创建完毕后会将该上下文放在ServletContext:

servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

DispatcherServlet上下文:用于加载只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等;创建时以通用上下文为父上下文,创建完毕后将该上下文放在ServletContext:

childContext.setParent(rootContext);
servletContext.setAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT" + getServletName(), this.context);

4、spring mvc的典型配置

<!-- spring-context.xml中的配置 -->
<context:component-scan base-package="com.wind.pac" use-default-filters="true"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan><!-- spring-mvc.xml中的配置 -->
<context:component-scan base-package="com.wind.pac" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /><context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController" />
</context:component-scan>

5、DispatcherServlet默认配置

DispatcherServlet的默认配置在DispatcherServlet.properties(和DispatcherServlet类在一个包下)中,是当Spring配置文件中没有指定配置时使用的默认策略

 

注:eclipse下,web项目的运行目录为:workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\

 

参考:

第二章 Spring MVC入门 —— 跟开涛学SpringMVC

第三章 DispatcherServlet详解 ——跟开涛学SpringMVC

javaweb学习总结(五)——Servlet开发(一)

 

转载于:https://www.cnblogs.com/MattCheng/p/9156057.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机如何检测市电通断?(应用甚广~)

我们在topemic网站上分享过一篇题为"单片机检测220V交流电通断电路"的文章&#xff0c;目前有近万次阅读&#xff0c;在这里做个总结分享给没有读过该文的公众号朋友。废话不多说&#xff0c;直接上图&#xff1a;该电路工作原理如下&#xff1a;当220V断开时&#x…

十年经验工程师为何被裁?

事件去年年底&#xff0c;公司来了一位工作十余年的工程师&#xff0c;据说软件硬件都会&#xff0c;应聘的岗位是XX算法工程师。比较巧的是&#xff0c;这位工程师是我上一家公司隔壁部门的同事。我们均来自大厂&#xff0c;但是是国企&#xff0c;二线城市。所以尽管他在前公…

飞康CEO:敢于向传统的灾备法则说“不”

近日&#xff0c;借美国飞康软件公司创办人兼首席执行官胡艾瑞徵先生访华期间&#xff0c;比特网记者对其进行了独家专访。 飞康软件公司成立于2000年&#xff0c;在过去的9年中&#xff0c; IPStor已经发展成为飞康包括整合重复数据删除功能的虚拟磁带库(VTL)、持续数据保护(C…

做10多年测试的老何

题图&#xff1a;老何是我的同事&#xff0c;他也喜欢篮球&#xff0c;因为篮球&#xff0c;我们两的话题比较多。老何做了十几年的测试工作。我们比较有猿粪的是&#xff0c;12年我在TCL&#xff0c;当时他也在TCL工业研究院&#xff0c;我们两的办公室也就相邻两栋楼。不过那…

推荐一个C++大佬

这里向大家推荐一个优质C公众号&#xff0c;号主程序喵&#xff0c;硕士毕业&#xff0c;浸淫C多年&#xff0c;帮助过不少C新手入门和进阶&#xff0c;可以说一句“精通C”啦。他搞过人脸识别&#xff0c;研究过自动驾驶&#xff0c;人生就是不断的挑战自我&#xff0c;现在从…

Silverlight HLSL实现背景滚动

一个Silverlight HLSL的简单例子&#xff0c;通过HLSL实现图片上的像素点的的水平移动&#xff0c;从而实现一个滚动背景的效果。 首先把Shader写出来吧。我这里借助了Shazzam &#xff0c;界面如下&#xff1a; 下面是我的HLSL&#xff1a; sampler2D input : register(s0);//…

极简的 PNG 编码函数 svpng(),用来学习C语言,真的很爽

这个是在知乎上看到的大神写的文章&#xff0c;如果是学习C语言入门的&#xff0c;我觉得可以从这个入手&#xff0c;特别是对图像感兴趣的。文章中提到的「我」&#xff0c;指的是「Milo Yip」大神。1. 什么是png格式图片&#xff1f;相对地&#xff0c;PNG&#xff08;Por…

STM32项目(六)—— 中文电子捡货标签

STM32项目&#xff08;六&#xff09;—— 中文电子捡货标签 宗旨&#xff1a;技术的分享是有限的&#xff0c;分享的精神是无限的。 传统物流行业仓储拣货采用纸单作业&#xff0c;拣货完成后再进行验货、出货&#xff0c;容易造成拣货错误、拣货速度与效率低、新员工培训时间…

如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart?

RT-Thread Smart 系列连载序号内容1《当“树莓派”遇上RT-Thread Smart——应用编程入门》2《RT-Thread Smart和树莓派&#xff1a;wget & cURL网络客户端》3《如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart&#xff1f;》4sdl图形类应用5dropbear及ssh server…

STM32项目(七) —— 智能仓库管理系统

智能仓库管理系统 随着经济的发展&#xff0c;对企业的生产经营要求提高&#xff0c;企业必须综合利用各种先进技术&#xff0c;在网络与信息技术的支持下&#xff0c;改进现在的生产经营模式和组织结构&#xff0c;增加利润。随着企业规模的扩大。高效方便的仓库管理系统&…

花三千块钱求推荐一个靠谱的C++工程师

直接说重点有个朋友想招一个C工程师&#xff0c;因为项目的原因&#xff0c;不可能现在招新人培养&#xff0c;想招到一个熟练C的工程师&#xff0c;所以想在公众号里面广而告之。如果是你推荐的人入职后&#xff0c;就可以获得三千奖励&#xff0c;如果是你本人入职&#xff0…

老外码农酒后吐槽,该说的不该说的全说了!!

上个月&#xff0c;一个有着10年码龄的程序猿喝高了&#xff0c;在社交网站Reddit上吐槽。然后被疯狂转发&#xff0c;点赞。可说是讲出了咱们很多码农的心声。咱们国内这边也有不少版本了。我们也凑凑热闹翻译一版。跟大家一块儿欣赏一下&#xff1a;今天是有点儿高了&#xf…

Intel官宣开发RISC-V处理器:明年首发7nm工艺

近日业界盛传&#xff0c;Intel计划以20亿美元收购RISC-V IP供应商SiFive——后者的产品已被80多家公司采纳&#xff0c;设计了200多种产品&#xff0c;出货量极大&#xff0c;广泛用于各种加速器。虽然双方对于收购都拒绝置评&#xff0c;但深入合作已经展开。Intel官方宣布&a…

SCCM2007 R2的部署前准备,SCCM系列之一

SCCM 2007 R2的部属前准备<?xml:namespace prefix o />System Center 是微软著名的管理平台软件&#xff0c;在实现Microsoft的MOF&ITIL的IT管理理念的过程中发挥了很重要的作用&#xff0c;System Center可以在MOF的每一个运维象限中都有对应的System Center产品协…

硬件基础 —— 电阻

硬件基础 —— 电阻1、电阻基本知识电阻&#xff1a;在电路中对电流有阻碍作用并且造成能量消耗的部分。主要物理特性是变电能为热能&#xff08;耗能元件&#xff09;&#xff0c;符号R&#xff08;单位&#xff1a;Ω&#xff09;。2、电阻的作用&#xff1a;分流、限流、分压…

史上最全的LED点灯程序,你都掌握了吗?

摘要&#xff1a;你点亮过多少板子的LED灯呢&#xff1f;有很多小伙伴留言说讲一下STM32、FPGA、Liunx他们之间有什么不同。不同点很多&#xff0c;口说无凭&#xff0c;今天就来点亮一下STM32、FPGA和Liunx板子的LED灯&#xff0c;大家大致看一下点灯流程和点灯环境以及点灯流…

B站硬核up主稚晖君:对于3年以上软件开发工程师,我有这些建议!

稚晖君&#xff0c;何许人也&#xff1f;本硕就读于电子科技大学华为AI架构师热爱硬件开发B站硬核UP主“栈溢出”工程师加入“华为天才少年计划”或许当你看到这一堆Title的时候并不觉得有什么特别&#xff0c;那么接下来看看他的一些作品。作品1&#xff1a;B站最强小电视这条…

同事说rar压缩有风险,让我用zip压缩文件

在现在最常见的压缩文件有zip、rar、7z三种&#xff0c;它们都有各自的优点和缺点。我们用一句话来概括一下&#xff1a;7z压缩率最高&#xff0c;RAR安全性高&#xff0c;ZIP使用范围广。文件压缩打包是最为常见的一种分享方式了&#xff0c;而众多的压缩格式中zip仍然是主流。…

JAVA实现概率计算(数字不同范围按照不同几率产生随机数)

程序中经常遇到随机送红包之类的情景&#xff0c;这个随机还得指定概率&#xff0c;比如10%的机率可以得到红包。那么java怎么实现一个简单的概率计算了&#xff0c;见如下例子&#xff1a; int randomInt RandomUtils.nextInt(1,101); if(randomInt < 10){ //100里面1个数…

AKI-H8串口通信

串口通信是一种通信接口简写SCI&#xff0c;它可是实现异步和同步两种传输模式。可以思考一下同步和异步的区别。 所谓同步就是接收方和发送方使用的是同一个时钟&#xff0c;步调一致的处理数据。典型的就是CPU和内存&#xff0c;通过总线存取数据。特点就是快&#xff0c;发送…