1.1. 什么是Spring MVC
SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC框架.
MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化、等等),而且使用简单,与Spring无缝集成。 支持 RESTful风格的 URL 请求 。
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
1.2. SpringMVC的作用
MVC模式:(Model-View-Controller):为了解决页面代码和后台代码的分离.
2. SpringMVC底层实现
在没有使用SpringMVC之前我们都是使用的Servlet在做Web开发。但是使用Servlet开发在接受请求数据参数,数据共享,页面跳转等操作相对比较复杂。
SpringMVC底层就是的Servlet,SpringMVC就是对Servlet进行更深层次的封装
2.1. 回顾MVC模式
回顾什么是mvc模式
模型model(javabean), 视图view(jsp/img) 控制器Controller(Actionrvlet) C存在的目的.就是为了保证M和V的一致性
当M发生改变时,C可以把M中的新内容更新到V中.
2.1.1. 原始MVC 模式
MVC模式最早开始是在CS 架构上面 20世纪70+年代
下面为原始的mvc模式.
目前web应用中,99%的项目都会使用mvc模式开发.
2.1.2. WEB开发的MVC
WEB开发从20世纪90+年代开始,也是使用MVC模式。在最原始的MVC上有一些改进
优秀的框架改变了这种模式,将model更广泛的使用,这样会比原始的mvc好多了.
像现在一些优秀的mvc的框架,如Struts2,springMVC
在客户端提交也使用了模型来请求参数
spring MVC 也实现的相关的功能
1. SpringMVC的全注解开发
1.1. Spring中IOC 注解
上面是注解
下面是说明
@Component
通用组件注解(一般配置其他非三层相关的类)
@Controller
表现层(控制层)
@Service
业务逻辑层(服务Service)
@Resposotory
数据持久层(DAO)
1. SpringMVC执行流程和原理
SpringMVC流程:
01、用户发送出请求到前端控制器DispatcherServlet。
02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
06、Controller执行完成返回ModelAndView对象。
07、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
08、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
09、ViewReslover解析后返回具体View(视图)。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。
两种限制
SpringMVC支持对请求的限制.如果不满足限制的条件,就不让访问执行方法.
这样做,大大提高了执行方法的安全性.
主要的限制有两种:(method)方法限制,参数限制
1.2.1. 方法限制
就是设置请求的method类型.如果发送过来的请求与方法设置的method不一样,就不能访问执行方法.
请求method : GET , POST
/**
* 接收的请求,必须是POST
* @return
*/
@RequestMapping(value="login",method=RequestMethod.POST)
public String login(){
System.out.println("-登录-");
return "/login.jsp";
}
前台发送的是GET请求,而方法限制是POST请求,所以请求无法执行方法
方法限制可以配置多个参数
@RequestMapping(value="login",method={RequestMethod.GET,RequestMethod.POST})
public String login(){
System.out.println("-登录-");
return "/login.jsp";
}
1.2.2. 参数限制
1.就是请求里面必须包括哪些参数,或不包括哪些哪些.
2.参数包括哪些值,不包括哪些值
限制参数格式:
1.参数必须包括:params={"username","password"}
2.参数不能包括:params={"!userid"}
3参数值必须是指定的值:params={"username=zhangsan"})
4.参数值必须不是指定的值:params={"userid!=123"})
请求:没有后台方法指定的参数
登录页面
后台代码
/**
* 需求:登录时必须包括用户名,密码
* @return
*/
@RequestMapping(value="login2",params={"username","password"})
public String login2(){
System.out.println("-登录-");
return "/login.jsp";
}
如果前台请求没有指定后台要求的参数,会报错.