springMVC
springmvc 核心组件
dispathcherServlet 前置控制器,负责调度其他组件执行,降低不同组件之间的耦合性,是springMVC的核心模块
handle:处理器,完成具体的业务逻辑,相当于之前的servlet
handlemapping:DispathcherServlet通过HandleMapping将请求映射到不同的Handle
HandleAdapeter:处理适配器,在handle业务方法执行之前执行,handle执行之前,通常需要进行一系列的操作包括表单数据的封装,数据类型的转换,数据校验,这些工作交给HandleAdapter来完成,DispatherServlet通过HandleAdapter来执行不同的Handler.
Modelandview: 装载了数据和视图,作为handle的处理结果返回给DispatherServlet
ViewResolver:视图解析器:DispatherServlet将接收的逻辑视图解析成物理视图,将渲染的结果响应给用户。
如何使用
引入依赖:
-
spring-webmvc 与spring版本一直5.X.X
-
配置dispathcerServlet @WebServlet
<!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"\> <web-app> 3、创建 springmvc.xml 文件。 <display-name>Archetype Created WebApplication</display-name> <servlet><servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.Dispa tcherServlet</servlet-class> <init-param> <paramname>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet><servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
3.创建springmvc.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframew ork.org/schema/beans http://www.springframework.org/schema/beans /spring-beans.xsd http://www.springframework.org/schema/conte xt http://www.springframework.org/schema/conte xt/spring-context.xsd"> <!-- 配置自动扫包 --> <context:component-scan base- package="com.southwind"> </context:component-scan> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view .InternalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/"> </property> <!-- 后缀 --> 4、创建 Handler <property name="suffix" value=".jsp"></property> </bean> </beans>
@Controller public class Hello { @RequestMapping("/index") public String index(){ System.out.println("index"); return "index"; } }
URL请求/index,通过注解直接映射到index方法中区,直接执行该方法,并返回逻辑视图,将逻辑视图的值交给试图解析器,补上前缀以及后缀,形成真的物理视图路径,找到该物理试图,返回给客户端。
常用注解
@Contoller 标注控制器类,使得一个java类成为一个控制器,处理dispathcherServlet转发过来的请求。
@RequestMapping springmvc 通过该注解将URL请求与业务方法进行映射,控制器类定义出也可以添加,等于多了一层访问路径。
@RequestMapping 后可以加value="",等同于直接写地址。
method:指定请求的method类型,包括DELETE,POST,GET,PUT.
404:资源找不到,你要检查 url 是否拼写正确。 405:请求类型不匹配,只能接收 POST,你发送的是 GET。 400:参数不匹配,检查 URL 的传参。 500:代码中抛出异常,逻辑代码的问题。
@RequestMapping 后params="name"则必选在浏览器放入name=...
多个参数{"name","id=10"}--->表示name参数,id必须等于10;浏览器中写入:?name=cat&id=10;
形参实参不一致,则必须添加。 @RequestMapping(value = "/index",method = RequestMethod.GET,params = {"name","id=10"}) public String index(@RequestParam("name") String title,@RequestParam("id") Integer num){ System.out.println(title); System.out.println(num + 1); //逻辑视图 return "index"; }
@RequestParam 的作用是将 URL 中的参数名和业务方法中的形参名进行映射,如果 URL 中的参数名本身和业 务方法中的形参名一致,可以不添加@RequestParam,自动根据名字完成映射,如果不一致,则必须添加。
spring mvc 也支持restful风格的传参
用HTTP请求的四种类来表示CRUD四种基本操作
GET表示查询
POST表示添加
PUT表示修改
DELETE表示删除
传统URL:localhost:8080/test?id=1&name=tom
RestFul URL:localhost:8080/test/1
@Controller @RequestMapping("/rest") public class RestFulHandler { //RestFul风格的传参 @RequestMapping(value = "/index/{id}/{name}") public String index(@PathVariable("id") Integer id, @PathVariable("name") String name){ return "index"; }
spring mvc取前端的表单,能够一次性全部取出。
示例
前端
<form action="/rest/register" method="post"> 用户名:<input type="text" name="username"/><br/> 密码:<input type="text" name="password"/><br/> 年龄:<input type="text" name="age"/> <br/> 电话:<input type="text" name="phone"/> <br/> 地址:<input type="text" name="email"/> <br/> <input type="submit" /> </form>
pojo
@DATA public class User { private String username; private String password; private Integer age; private String phone; private String email; }
后台
@Controller @RequestMapping("/rest") public class RestFulHandler { @RequestMapping(value = "register",method = RequestMethod.POST) public String register(User user){ return "index"; } }
后端方法跳到另一个方法
@RequestMapping(value = "register",method = RequestMethod.POST) public String register(User user){ return "redirect:/rest/ok"; } @RequestMapping(value="/ok") public String ok(){ return "index"; }
前端解析后端
spring mvc视图解析器
Controller 中的数据如何传给 JSP HttpServletRequest Map Model ModelAndView @ModelAttribute @SessionAttribute @SessionAttribute 是将模**型数据直接同步到 session对象中**,session 和 request 一样都是 JSP 内置对象,session 的作用域更大,request 只能在一次请求中存活,请求结束,request 销毁,里面保存的数据也就没了,session 作用于一个会话(打开浏览器发起请求,到关闭浏览器的整个过程),用 session 来保存用户登录信息
放在方法处。
当类中的方法向request中存放数据的同时,会自动将数据同步到session。
保留request中的 key/value。