赞
踩
1. 什么是MVC架构?
2. 什么是springMVC框架?
3. 为什么使用springMVC架构?
4. 快速入门springMVC?
5. springMVC的流程。
6. springMVC如何接受请求的参数。
7. springMVC如何把控制层的参数转发到前端页面?
springmvc是spring框架的一种分支。SpringMVC 是类似于 Struts2 的一个 MVC 框架,在实际开发中,==接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示==,但是上手难度却比 Struts2 简单多了。而且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了大多数企业优先选择的框架。
(1)创建一个web工程
(2)引入springmvc的依赖。
- <!--maven可以把该依赖相关的依赖都引入。-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>5.2.9.RELEASE</version>
- </dependency>
(3) 创建控制层。
-
- @Controller
- public class HelloController {
- @RequestMapping("/hello01") //根据请求路径映射响应的方法。
- public String hello01(){
- return "/views/hello01.jsp";
- }
-
- }
(4)配置springmvc的配置文件。
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="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.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- https://www.springframework.org/schema/context/spring-context.xsd">
-
- <!--1.包扫描 扫描我们自己的控制层类所在的包或者父包-->
- <context:component-scan base-package="com.ykq.controller"/>
- </beans>
(5)引入前端控制器 web.xml
- <!--注册servlet-->
- <servlet>
- <servlet-name>springmvc01</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <!--加载springmvc的配置文件-->
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:springmvc01.xml</param-value>
- </init-param>
- </servlet>
-
- <!--servlet映射路径
- /: 表示所有的控制层路径 以及静态资源
- /*: 表示全部 包含jsp网页
- -->
- <servlet-mapping>
- <servlet-name>springmvc01</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
(6)测试。
* 1. 客户端发生请求http://localhost:8080/145springmvc01/hello01
* 2. 来的tomcat服务器。
* 3. springmvc的前端控制器DipatcherServlet接受所有的请求。
* 4. 查看你的请求地址和哪个@RequestMaping匹配。
* 5. 执行对应的方法。方法会返回一个字符串。springmvc把该字符串解析为要转发的网页。
* 6. 把该字符串经过视图解析器拼接。
* 7. 拿到拼接的地址,找到对应的网页。
比如:表单提交时 注册 添加。
解决: 可以把所有的请求参数封装到一个实体类对象中。
解决办法:
什么是静态资源: 比如: css, js, img,html
解决方案:
思考:原来在讲servlet时我们把数据保存在哪些对象中。
request, 同一个请求内有效。 ---->EL表达式 获取相应范围的对象数据。
session: 同一个会话有效。
- @Controller
- @RequestMapping("/hello03")
- public class HelloController03 {
-
- @RequestMapping("/index03")
- public String index03(Model model){ //model对象可以理解为request对象。凡是在该对象中保存的数据,作用范围同一个请求有效。
- User user=new User("张三",1,"120",17,new Date());
- model.addAttribute("user",user);
- return "index03";//springmvc采用请求转发的跳转。
- }
-
- @RequestMapping("index04")
- public String index04(HttpServletRequest request){
- User user=new User("张三2",0,"120",18,new Date());
- request.setAttribute("user2",user);
- return "index03";//springmvc采用请求转发的跳转。
- }
- ///上面两种方法的作用是一样 都是保存在request范围。
- @RequestMapping("index05")
- public String index05(HttpSession session){
- User user=new User("李四",0,"130",19,new Date());
- session.setAttribute("user05",user);
- return "index03";
- }
- }
(1)里面自带了转换---引入它的依赖。jackson依赖
<!--jackson依赖 可以整合springmvc把java对象转换为json对象-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
(2) 控制层直接返回对应的对象类型。(3)@ResponseBody--->把java对象转换为json对象。
解决办法:
一旦后台出现异常时,网页会显示很丑的异常信息。 为了可以显示好看,我们定义一个统一的异常处理类。
异常的结构:
Throwable: 异常的根类。
Error: 错误。这个错误程序员无法解决。
Exception:异常。
编译异常:
运行时异常: RuntimeException: 只会在运行的时候出现。
(1)自定义一个全局异常处理类
- @ControllerAdvice //该类为异常处理类。
- public class MyHandler {
-
- //ExceptionHandler异常发生时执行的方法。
- @ExceptionHandler(value = ArithmeticException.class) //如果不使用value默认处理Throwable异常。
- public String handlerException(){
- System.out.println("!~~~~~~~~~~~~~~~~~~");
- return "error";
- }
-
- }
注意: 一定要让springmvc扫描到该异常处理类。
回顾: 过滤器: 拦截器所有的资源.[jsp,servlet,css,js,img]
拦截器: 只会拦截springmvc的控制层接口路径。
流程:
如何定义拦截器:
(1)自定义一个拦截器类。
- public class MyInterceptor implements HandlerInterceptor {
-
- //拦截器方法。如果该方法返回true则是放行 如果返回false 则是拦截。
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~拦截器~~~~~~~~~~~~~~~~~~~~~~~");
- return true;
- }
- }
(2) 把自定义的拦截器声明到springmvc容器中。---springmvc.xml
- <!--声明拦截器-->
- <!-- <mvc:interceptors>
- <mvc:interceptor>
- <mvc:mapping path="拦截器的路径"/>
- <mvc:exclude-mapping path="不拦截的路径"/>
- <bean class="自定义拦截器的全路径"/>
- </mvc:interceptor>
- </mvc:interceptors>-->
-
- <mvc:interceptors>
- <mvc:interceptor>
- <!--/*: 一层路径 /hello
- /**: 多层路径
- -->
- <mvc:mapping path="/**"/>
- <mvc:exclude-mapping path="/hello04/json01"/>
- <bean class="com.ykq.interceptor.MyInterceptor"/>
- </mvc:interceptor>
- </mvc:interceptors>
第一步:用户发送请求到前端控制器(DispatcherServlet)。
第二步:前端控制器请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解进行查找。
第三步: 处理器映射器 HandlerMapping 向前端控制器返回 Handler
第四步:前端控制器调用处理器适配器去执行 Handler
第五步:处理器适配器执行 Handler
第六步:Handler 执行完成后给适配器返回 ModelAndView
第七步:处理器适配器向前端控制器返回 ModelAndView
ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 View
第八步:前端控制器请求试图解析器去进行视图解析
根据逻辑视图名来解析真正的视图。
第九步:试图解析器向前端控制器返回 view
第十步:前端控制器进行视图渲染
就是将模型数据(在 ModelAndView 对象中)填充到 request 域
第十一步:前端控制器向用户响应结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。