SpringMVC上
SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC框架.
MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化、等等),而且使用简单,与Spring无缝集成。 支持 RESTful风格的 URL 请求 。
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
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响应用户。
1.1. @RequestMapping
@RequestMapping注解主要是设置SpringMVC请求的映射路径
所谓的映射路径,就是匹配请求路径和执行方法关系的路径.
请求路径:http://localhost:8080/springmvc/method1.do
映射路径:@RequestMapping(value="/method1")
@RequestMapping 用于贴在控制器的类上或者方法上面
如果是贴在控制器的类上面,那么在访问这个类的方法之前必须先加上类上的对应的名称
类似于 项目下面的 模块名称
如果贴在方法上面,就是访问此方法的资源名称
@Controller @RequestMapping("/request") //访问时候必须加上,类似模块名称 public class RequestController { @RequestMapping(value="/method1") //资源名称 public void method1() { } }
1.1.1. 方法限制
就是设置请求的method类型.如果发送过来的请求与方法设置的method不一样,就不能访问执行方法.
请求method : GET , POST
<form action="${pageContext.request.contextPath }/login.do" method="get"> <input type="submit" value="登录"> </form> /** * 接收的请求,必须是POST * @return */ @RequestMapping(value="login",method=RequestMethod.POST) public String login(){ System.out.println("-登录-"); return "/login.jsp"; }
1.1.1. 参数限制
1.就是请求里面必须包括哪些参数,或不包括哪些哪些.
2.参数包括哪些值,不包括哪些值
限制参数格式:
1.参数必须包括:params={"username","password"}
2.参数不能包括:params={"!userid"}
3参数值必须是指定的值:params={"username=zhangsan"})
4.参数值必须不是指定的值:params={"userid!=123"})
请求:没有后台方法指定的参数'
<h4>登录页面</h4> <form action="${pageContext.request.contextPath}/request/method1.do" method="post"> 账号:<input name="username"><br> 密码:<input type="password" name="pwd"><br> <button type="submit">登录</button> </form> 后台代码 /** * 需求:登录时必须包括用户名,密码 * @return */ @RequestMapping(value="login2",params={"username","password"}) public String login2(){ System.out.println("-登录-"); return "/login.jsp"; }
SpringMVC的方法默认可以注入 JavaWeb开发常用的数据共享对象
HttpServletRequest
HttpServletResponse
HttpSession
获取这些共享对象以后,就可以向之前的Servlet一样,做任何数据共享以及页面跳转操作'
/* * Spring的方法默认可以注入 JavaWeb开发常用的数据共享对象 HttpServletRequest HttpServletResponse * HttpSession 以后开发 按需注入 */ @RequestMapping(value = "/method0") public void method0(HttpServletRequest req, HttpServletResponse resp, HttpSession session) { //TODO }