目录
3:输出第一个springMVC程序:千古一帝----秦始皇
1.作用于方法上,代表请求处理方法 2.作用于类上,代表窄化路径
1.Map类型的参数必须使用@RequestParam方式接收
2.使用@RquestBody方式传递List或者Map类型的参数,但必须是JSON格式
还有就是如果是在同一controller中则不用使用"/"从根目录开始,而如果是在不同的controller则一定要从根目录开始
如果在不同的Controller里面跳转,则需要使用"/"开头,并且是窄化路径+请求路径
一:基本概念
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面
MVC指MVC模式的某种框架,它强制性地使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和像XHTML,XML/XSL,WML等一些标识语言和Web services.
MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
二:Spring MVC 工作原理
基本步骤:
1.用户发送请求至前端控制器DispatcherServlet(也叫中央处理器).
2.DispatcherServlet收到请求调用HandlerMappering处理器映射器
3.处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处 理器拦截器(如果有则生成)一并返回给DispatcherServlet.
4.DispatcherServlet调用HandlerAdapter处理器适配器。
5.HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6.Controller执行完成返回ModelAndView.
7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet.
8.DisPatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.ViewReslover解析后返回具体View.
10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11.DispatcherServlet响应用户
三:SpringMVC核心开发步骤
1.DispatcherServlet在web.xml中的部署描述,从而拦截请求到springMVC
2. HandlerMapping的配置,从而将请求映射到处理器
3. HandlerAdapter的配置,从而支持多种类型的处理器
4. 处理器(页面控制器)的配置,从而刊行功能处理
5. ViewResolver的配置,从而将逻辑视图名解析为具体的视图技术
四:SpringMVC的组件
1. 前端控制器(DispatcherServlet):接收请求,响应结果,相当于转发器,中央处理器
2.请求到处理器映射(HandlerMapping):根据配置或者注解找到最终要执行的Handler
3. 处理器适配器(HandlerAdapter):按照特定规则(HandlerAdapter要求的规则)去执行Handler
4. 视图解析器(ViewResolver):进行视图解析,根据逻辑视图名解析成真正的视图(view)
5. 处理器或页面控制器(Controller):执行具体的用户请求
6. 验证器(Validator)
7. 命令对象(Command 请求参数绑定到的对象就叫命令对象)
8. 表单对象(Form Object提供给表单展示和提交到的对象就叫表单对象)
五:如何在项目中添加Spring MVC
前提:要先有一个Maven项目
1.添加相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
注意:需要添加JSTL依赖,否则缺少这两个jar包会报java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config,是因为org.springframework.web.servlet.view.JstlView在视图解析时需要这二个jar包
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
2.实现SSM集成
①.在WEB-INF下添加spring-mvc.xml
开启注解扫描
<context:component-scan base-package="com.tangyuan"/>
这样配置会与之前的spring-mybatis.xml中的注解扫描一样,产生重复扫描,所以我们要采用其它的方法来解决这个问题,因为Controller注解只作用于Controller层,可以采用排除法
在spring-mybatis.xml中添加以下代码,来防止重复扫描,重复装配
<!-- 用注解方式注入bean,并指定查找范围:com.tangyuan及子子孙孙包-->
<context:component-scan base-package="com.tangyuan" use-default-filters="true">
<!--除了Controller层以外,其他层均由此处来完成扫描工作-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
对spring-mvc.xml的注解扫描进行完善,因为spring-mybatis.xml中的use-default-filters="true",所以我们要在spring-mvc.xml的注解扫描中添加use-default-filters="false"
<context:component-scan base-package="com.tangyuan" use-default-filters="false">
<!--此处只负责扫描Controller中的任务-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
- 注册HandlerMapping和HandlerAdapter
ps:
1.HandlerMapping:处理器映射器,根据配置或者注解找到具体的Handler(不执行)
2.HandlerAdapter:处理器适配器,根据Handler处理器规则执行不同的Handler
<!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
<!--两个bean,这两个bean是spring MVC为@Controllers分发请求所必须的。并提供了数据绑定支持,-->
<!--@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)-->
<mvc:annotation-driven/>
- 配置视图解析器ViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>