当前位置:   article > 正文

JAVA架构之路之SpringMVC,通俗易懂的掌握SpringMVC。_java中的springmvc

java中的springmvc

1.正文

1. 什么是MVC架构?
2. 什么是springMVC框架?
3. 为什么使用springMVC架构?
4. 快速入门springMVC?
5. springMVC的流程。
6. springMVC如何接受请求的参数。
7. springMVC如何把控制层的参数转发到前端页面?

2. 什么是MVC架构?

 

3. 什么是springMVC?

 springmvc是spring框架的一种分支。SpringMVC 是类似于 Struts2 的一个 MVC 框架,在实际开发中,==接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示==,但是上手难度却比 Struts2 简单多了。而且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了大多数企业优先选择的框架。

4. 为什么使用springMVC?

 

 

5.快速入门springMVC

(1)创建一个web工程

                        

 (2)引入springmvc的依赖。

  1. <!--maven可以把该依赖相关的依赖都引入。-->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-webmvc</artifactId>
  5. <version>5.2.9.RELEASE</version>
  6. </dependency>

(3) 创建控制层。

  1. @Controller
  2. public class HelloController {
  3. @RequestMapping("/hello01") //根据请求路径映射响应的方法。
  4. public String hello01(){
  5. return "/views/hello01.jsp";
  6. }
  7. }

(4)配置springmvc的配置文件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://www.springframework.org/schema/context
  7. https://www.springframework.org/schema/context/spring-context.xsd">
  8. <!--1.包扫描 扫描我们自己的控制层类所在的包或者父包-->
  9. <context:component-scan base-package="com.ykq.controller"/>
  10. </beans>

(5)引入前端控制器 web.xml

  1. <!--注册servlet-->
  2. <servlet>
  3. <servlet-name>springmvc01</servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. <!--加载springmvc的配置文件-->
  6. <init-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:springmvc01.xml</param-value>
  9. </init-param>
  10. </servlet>
  11. <!--servlet映射路径
  12. /: 表示所有的控制层路径 以及静态资源
  13. /*: 表示全部 包含jsp网页
  14. -->
  15. <servlet-mapping>
  16. <servlet-name>springmvc01</servlet-name>
  17. <url-pattern>/</url-pattern>
  18. </servlet-mapping>

(6)测试。

 

6. springmvc的流程

*     1. 客户端发生请求http://localhost:8080/145springmvc01/hello01
 *     2. 来的tomcat服务器。
 *     3. springmvc的前端控制器DipatcherServlet接受所有的请求。
 *     4. 查看你的请求地址和哪个@RequestMaping匹配。
 *     5. 执行对应的方法。方法会返回一个字符串。springmvc把该字符串解析为要转发的网页。
 *     6. 把该字符串经过视图解析器拼接。
 *     7. 拿到拼接的地址,找到对应的网页。

7. springmvc如何接受请求参数

7.1 接受参数个数少的

 

7.2 接受的参数

比如:表单提交时 注册 添加。

解决: 可以把所有的请求参数封装到一个实体类对象中。

 

7.3 接受日期类型的参数

 解决办法:

 

8. 处理静态资源

什么是静态资源: 比如: css, js, img,html

 

 解决方案:

 

9.如何把控制层的数据渲染到页面

思考:原来在讲servlet时我们把数据保存在哪些对象中。

request, 同一个请求内有效。 ---->EL表达式 获取相应范围的对象数据。

session: 同一个会话有效。

  1. @Controller
  2. @RequestMapping("/hello03")
  3. public class HelloController03 {
  4. @RequestMapping("/index03")
  5. public String index03(Model model){ //model对象可以理解为request对象。凡是在该对象中保存的数据,作用范围同一个请求有效。
  6. User user=new User("张三",1,"120",17,new Date());
  7. model.addAttribute("user",user);
  8. return "index03";//springmvc采用请求转发的跳转。
  9. }
  10. @RequestMapping("index04")
  11. public String index04(HttpServletRequest request){
  12. User user=new User("张三2",0,"120",18,new Date());
  13. request.setAttribute("user2",user);
  14. return "index03";//springmvc采用请求转发的跳转。
  15. }
  16. ///上面两种方法的作用是一样 都是保存在request范围。
  17. @RequestMapping("index05")
  18. public String index05(HttpSession session){
  19. User user=new User("李四",0,"130",19,new Date());
  20. session.setAttribute("user05",user);
  21. return "index03";
  22. }
  23. }

 

10.返回json数据

(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对象。  

 

 

解决办法:

 

 

11.定义全局异常处理

一旦后台出现异常时,网页会显示很丑的异常信息。 为了可以显示好看,我们定义一个统一的异常处理类。

异常的结构:

​ Throwable: 异常的根类。

​ Error: 错误。这个错误程序员无法解决。

​ Exception:异常。

​ 编译异常:

​ 运行时异常: RuntimeException: 只会在运行的时候出现。

(1)自定义一个全局异常处理类

  1. @ControllerAdvice //该类为异常处理类。
  2. public class MyHandler {
  3. //ExceptionHandler异常发生时执行的方法。
  4. @ExceptionHandler(value = ArithmeticException.class) //如果不使用value默认处理Throwable异常。
  5. public String handlerException(){
  6. System.out.println("!~~~~~~~~~~~~~~~~~~");
  7. return "error";
  8. }
  9. }

 注意: 一定要让springmvc扫描到该异常处理类。

 

12. 拦截器

回顾: 过滤器: 拦截器所有的资源.[jsp,servlet,css,js,img]

拦截器: 只会拦截springmvc的控制层接口路径。

流程:

 

 

如何定义拦截器:

(1)自定义一个拦截器类。

  1. public class MyInterceptor implements HandlerInterceptor {
  2. //拦截器方法。如果该方法返回true则是放行 如果返回false 则是拦截。
  3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  4. System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~拦截器~~~~~~~~~~~~~~~~~~~~~~~");
  5. return true;
  6. }
  7. }

(2) 把自定义的拦截器声明到springmvc容器中。---springmvc.xml

  1. <!--声明拦截器-->
  2. <!-- <mvc:interceptors>
  3. <mvc:interceptor>
  4. <mvc:mapping path="拦截器的路径"/>
  5. <mvc:exclude-mapping path="不拦截的路径"/>
  6. <bean class="自定义拦截器的全路径"/>
  7. </mvc:interceptor>
  8. </mvc:interceptors>-->
  9. <mvc:interceptors>
  10. <mvc:interceptor>
  11. <!--/*: 一层路径 /hello
  12. /**: 多层路径
  13. -->
  14. <mvc:mapping path="/**"/>
  15. <mvc:exclude-mapping path="/hello04/json01"/>
  16. <bean class="com.ykq.interceptor.MyInterceptor"/>
  17. </mvc:interceptor>
  18. </mvc:interceptors>

13.springmvc的流程

 

第一步:用户发送请求到前端控制器(DispatcherServlet)。

第二步:前端控制器请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解进行查找。

第三步: 处理器映射器 HandlerMapping 向前端控制器返回 Handler

第四步:前端控制器调用处理器适配器去执行 Handler

第五步:处理器适配器执行 Handler

第六步:Handler 执行完成后给适配器返回 ModelAndView

第七步:处理器适配器向前端控制器返回 ModelAndView

    ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 View

第八步:前端控制器请求试图解析器去进行视图解析

    根据逻辑视图名来解析真正的视图。

第九步:试图解析器向前端控制器返回 view

第十步:前端控制器进行视图渲染

    就是将模型数据(在 ModelAndView 对象中)填充到 request 域

第十一步:前端控制器向用户响应结果
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/1010962
推荐阅读
相关标签
  

闽ICP备14008679号