1.什么是Spring Web MVC(SpringMVC):
Spring Web MVC是Spring框架一个非常重要的模块,实现了MVC结构,便于简单,快速开发MVC结构
的程序,Spring Web MVC提供的API封装了WEB开发中常用的功能,简化了WEB过程
Spring Web MVC的核心组件
Spring Web MVC提供了M,V和C相关的主要实现组件,具体如下:
.Controller(控制器,请求处理处理流程)
.ModerAndView(模型,封装业务处理结果和视图)
.ViewResolver(视图,视图显示处理器)
.DispatcherServlet(控制器,请求入口)
.HandlerMapping(控制器,请求派发)
练习:构建一个HelloWorld应用案例:
解决步骤:
1.构建环境,导包.
2.配置SpringMVC的XML配置文件
名称可以自由定义,例如spring-mvc.xml
3.在web.xml中配置DispatcherServlet前端控制器组件
.DispatcherServlet组件在Spring mvc中已存在,只需要配置即可
.配置的同时指定Spring的配置文件
4.配置HandlerMapping组件
Spring HandlerMapping用于分发web请求到Controller的映射,这个类来自于Spring MVC API,
只需要配置到Spring中即可,修改spring-mvc.xml添加HandlerMapping的配置
5.编写Controller组件
用于处理web url请求,负责执行具体的业务处理
控制器要返回ModelAndView对象,这个对象表示控制处理结果选择了哪个View(JSP作为View)用
于显示
6.配置视图解析器
增加ViewResolver组件配置
ViewResolver用于视图的显示结果处理.
请求执行流程:
1.浏览器向Tomcat7服务器发起web请求"hello.form"
2.Tomcat7会根据web.xml的配置将"hello.form请求交给"DispatcherServlet(Spring核心控制器)
3.DispatcherServlet会根据Handlempping中的urlMapping将"hello.form"请求转给helloController处理
4.helloController执行handleRequest()方法,处理请求,并且返回ModelAndView对象,对象表示
处理结果,ModelAndView包含了目标视图"hello"
5.Spring核心控制器收到ModelAndView中包含的视图"hello"
6.Spring核心控制器利用ViewResolver中的前后缀应用"hello"到/WEB-INF/jsp/hello.jsp文件
7.执行hello.jsp作为响应结果发送到浏览器
8.浏览器收到hello.jsp的执行结果,进行展示
详细说明:
ModelAndView组件.
Controller组件约定的handleRequest方法执行后返回一个ModelAndView对象,该对象可封装
视图名和模型数据
-构造方法
ModelAndView(String viewName);
ModelAndView(String viewName,Map model);
viewName:是jsp页面的名字
model的数据存储到request的attribute对象中
基于注解配置的MVC应用
RequestMapping注解应用
@RequestMapping可以用在类定义和方法定义上
@RequestMapping表明这个类或方法与哪一个客户请求对应
@Controller
@RequestMapping(name="/hello.form")
使用@RequestMapping的条件
.开启@RequestMapping注解映射,需要在Spring的XML配置文件中定义RequestMappingHandleMapping(类定义前)
和RequestMappingHandleAdapter(方法定义前)两个bean组件
Controller注解应用
推荐使用@Controller注解声明Controller组件,这样可以使得Controller定义更加灵活,可以
不用实现Controller接口,请求处理的方法也可以灵活定义.
Controller注解的使用条件.
为了使@Controller生效,需要在Spring的XML配置文件中开启组件扫描定义,并指定Controller
组件所在的包
练习:重构上面的HelloWorld案例
使用注解的方式重构
ps:复制项目的时候将工程的部署名也进行修改,避免项目无法访问的现象
SpringMVC实战技巧.
1.接收请求参数值
SpringMVC将数据提交到控制器有以下几种方法
.使用HttpServletRequest获取.
.使用@RequestParam注解获取
.使用自动机制封装Bean对象
举例说明:
@Controller
@RequestMapping("/day01")
public class HelloController {
@RequestMapping("/hello.form")
public String execute(HttpHttpServletRequest req) {
String name = req.getParamether("name");
return "hello";
}
}
说明:
Spring核心控制器会自动将参数注入HttpServletRequest中.
优点:直接
缺点:需要自己处理数据转换类型
使用@RequestParam注解获取参数实例
ps:不需要为属性增加set方法
@Controller
@RequestMapping("/day01")
public class HelloController {
@RequestMapping("/hello.form")
public String execute(String name,@RequestParam("pwd") String password,HttpHttpServletRequest req) {
System.out.println(pwd);
String name = req.getParamether("name");
return "hello";
}
}
使用自动机制封装Bean对象示例:
1.创建数据实体类.User us;
2.在Controller组件处理方法中定义实体类类型参数
<form>
<input type="text" name="name"/>
</form>
@RequestMapping("/hello.form")
public String execute(User us) {
System.out.println(us.getName);
String name = req.getParamether("name");
return "hello";
}
构建一个完整的用户登录验证功能
要求:
1.使用之前构建的SpringMVC框架作为开发环境
2.利用学习Spring核心阶段的知识构建UserService作为业务模型
这个模型提供登录认证的方法,这个模型依赖于UserDao,JDBCDataSource
2.向页面传值
当Controller组件处理完成后,需要向JSP页面传值,可以使用下面的方法
.直接使用HttpServletrequest或者Session
.使用ModelAndView对象
.使用ModelAndView注解
.使用ModelMap参数对象
3.Session存储
4.重定向视图
SpringMVC 文件上传 限制上传文件的大小.异常处理,中文乱码解决方案