SpringMVC
1.什么是SpringMVC
它是基于MVC开发模式的框架,用来优化控制器;它是Spring家族的一员,也具备AOP和IOC。
2.什么是MVC
- 是一种开发者模式,是模型视图控制器的简称;所有的web应用都是基于MVC开发。
- M 模型层:包含实体类、业务逻辑层、数据访问层
- V 视图层:包含html、JavaScript、vue等都是视图层,用来呈现数据的
- C 控制器:它是用来接收客服端的请求,并返回响应到客服端的组件,Servlet就是这个组件
3.SpringMVC的优点
- 轻量级,基于MVC的框架
- 易于上手,功能强大
- 他具备IOC和AOP
- 完全基于注解开发
4.分析web请求
- web请求执行流程:
index.jsp(客服端的请求)<——————>DispatcherServlet(核心处理器)——————>SpringMVC的处理器 (一个普通方法)
- DispatcherServlet要在web.xml文件中注册才可用
5.@RequestMapping注解
-
该注解可加在方法上,是为此方法注册一个可以访问的名称(路径)
@RequestMapping("/demo")//通过注解来声明访问的路径 public String demo(){ return "main"; }
在index.jsp中有访问/demo的超链接:
<a href="${pageContext.request.contextPath}/demo.action">访问服务器</a>
-
此注解可加在类上,相当于包名(虚拟路径),用于区分不同类中相同的action名称
-
此注解可区分get和post请求
@RequestMapping(value = "/req",method = RequestMethod.GET) public String req(){ System.out.println("get req"); return "main"; } @RequestMapping(value = "/req",method = RequestMethod.POST) public String req1(){ System.out.println("post req"); return "main"; }
6.五种数据提交的优化
-
散提交数据
index.jsp中:
<form action="${pageContext.request.contextPath}/one.action" > 姓名:<input name="myname"> 年龄:<input name="age"> <input type="submit" value="提交"> </form>
Action控制类中:
@RequestMapping("/one") public String one(String myname,int age){ //入参名直接与定义的<input name="myname">一致即可取数据 System.out.println("myname="+myname+",age="+(age+100)); return "main"; }
-
对象封装提交数据
在提交请求中,保证请求参数的名称与实体类中成员变量的名称一致,则可自动创建对象、自动提交数据、自动类型转换、自动封装数据到对象中。
页面:
<h2>对象封装数据提交</h2> <form action="${pageContext.request.contextPath}/two.action" > 姓名:<input name="name"> 年龄:<input name="age"> <input type="submit" value="提交"> </form>
Action和实体类:
//private String name; //private int age; @RequestMapping("/two") public String two(Users users){ System.out.println(users); return "main"; }
-
动态占位符提交
仅限于超链接或地址栏提交数据;它是一杠一值,一杠一大括号,使用@PathVariable(路径中的变量)注解来解析。
页面:
<h2>动态占位符提交</h2> <a href="${pageContext.request.contextPath}/three/张三/22.action" >动态占位符提交</a>
Action:
<@RequestMapping("/three/{name}/{uage}") public String three( @PathVariable//路径中的变量 String name, @PathVariable("uage") //路径名和形参名不一致时要指定 int age){ System.out.println("name="+name+",age="+(age+100)); return "main"; }