2025年springmvc aop实现日志管理(springmvc日志记录)

springmvc aop实现日志管理(springmvc日志记录)MVC 是模型 model dao service 视图 view jsp 控制器 controller Servlet 的简写 是一种软件设计规范 MVC 主要作用是降低了视图和业务逻辑间的双向耦合 MVC 不是一种设计模式 而是一种架构模式 不同的 MVC 存在差异 最典型的 MVC 就是 JSP Servlet javabean 的模式 职责分析 Controller 控制器 取得表单数据

大家好,我是讯享网,很高兴认识大家。



  • MVC是模型(model=dao+service)、视图(view=jsp…)、控制器(controller=Servlet)的简写,是一种软件设计规范
  • MVC主要作用是降低了视图和业务逻辑间的双向耦合
  • MVC不是一种设计模式,而是一种架构模式,不同的MVC存在差异

最典型的MVC就是JSP+Servlet+javabean的模式

spring mock日志数据 放在单独文件_servlet
讯享网

职责分析:

  • Controller:控制器
  • 取得表单数据
  • 调用业务逻辑
  • 指向转发的页面(请求转发和重定向)
  • Model:模型
  • 业务逻辑
  • 保存数据的状态
  • View:视图
  • 显示页面
  1. 导入依赖
  1. 建一个子模块:SpringMVC-01-servlet
  2. 写一个servlet类
  1. 写一个测试页面
  1. 在web.xml中配置servlet
  1. 配置tomcat,并测试

spring mock日志数据 放在单独文件_web_02

MVC框架要做哪些事情

  1. 将url映射到java类或java类的方法
  2. 封装用户提交的数据
  3. 处理请求——调用相关的业务处理——封装响应数据
  4. 用jsp或HTML将响应的数据进行渲染

本质就是MVC三层架构,Spring将其整合了

Spring MVC是Spring Framework的一部分,是基于java实现MVC的轻量级Web框架

官方文档:https://docs.spring.io/spring/docs/4.3.24.RELEASE/spring-framework-reference/

Spring MVC的特点:

  • 轻量
  • 高效,基于请求响应的MVC框架
  • 与Spring兼容性好,无缝结合
  • 约定大于配置

Spring的Web框架围绕DispatcherServlet设计,DispatcherServlet的作用是将请求分发到不同的处理器。

Spring MVC和许多其他框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet(继承HttpServlet基类)

spring mock日志数据 放在单独文件_servlet_03

Spring MVC官方原理图:

用户请求被前置控制器拦截,根据请求参数生成代理请求,找到实际的控制器,处理请求,创建数据模型,访问数据库,将模型响应给前端控制器,控制器使用模型与视图渲染结果,在将结果返回给用户

spring mock日志数据 放在单独文件_mvc_04

  1. 配置web.xml,注册DispatcherServlet
  1. 配置springmvc-servlet.xml

添加处理器映射器:

添加处理器适配器:

添加视图解析器:

  1. 编写操作业务Controller,要么实现Controller接口,要么使用注释;需要返回一个ModelAndView,用来封装数据,封装视图
  1. 将自己的类交给SpringIOC容器,注册bean
  1. 编写jsp,用来显示ModelAndView存放的数据以及正常页面
  1. 启动tomcat测试

错误tips:404

  • 查看控制台输出,看一下是不是缺少jar包
  • 如果jar存在,显示无法输出,就在IDEA项目发布中,添加lib依赖

spring mock日志数据 放在单独文件_web_05

  1. DispacherServlet过滤用户请求,判断哪些请求可以访问Servlet,哪些不能,就是url-pattern的作用,并且会加载springmvc-servlet.xml
  2. DispacherServlet将请求转发到处理器映射器,通过HanderMapping完成url到controller的映射。例如:在上面Hello,Spring MVC中,我们使用的是BeanNameUrlHandlerMapping,它可以将url与bean的id相对应,然后映射到bean的class,即controller
  3. 通过HanderMapping的url与handler的映射关系,找到处理器并返回,在这个过程中会经过很多过滤器
  4. DispacherServlet拿到handler之后,找到HandlerAdapter来访问、执行处理器
  5. 执行处理器,一般可以通过实现Controller接口或者注解实现(需要自己实现),调用业务层得到模型数据,用ModelAndView封装模型数据和视图
  6. 返回一个ModelAndView对象
  7. 返回一个ModelAndView对象给DispacherServlet
  8. DispacherServlet拿到ModelAndView对象后,请求视图解析器,在视图解析器中会完成完整视图名的拼接和查找视图,形成视图对象
  9. 返回视图对象给DispacherServlet
  10. 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的
  11. 将最终的视图响应给客户

步骤:

  1. 配置web.xml,与前面讲的一样
  2. 编写springmvc-servlet.xml
  1. 编写Controller类
  1. 编写jsp

注解解析:

  • @Controller是为Q了让Spring IOC容器初始化时自动扫描到,它代表这个类会被Spring接管这个类的所有方法,如果返回值是String,并且有具体的页面,那么就会被视图解析器解析
  • @RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
  • 方法中声明Model类型的参数是为了把业务层的数据带到视图中
  • 方法返回的hello,会被视图解析器拼接成完整的页面跳转路径
  • 控制器提供访问webapp的行为,通常可以由实现接口和注解定义来实现
  • 控制器负责解析用户的请求并将其转化为一个模型
  • 在Spring MVC中一个控制器类可以包含多个方法,一个方法就是一个请求

流程与一致

  • @Controller注解类型用于声明Spring类的实例是一个控制器(在讲Spring IOC还提到了另外三个注解)
  • 步骤与一致
  1. 概念
    RestFul就是一个资源定位和资源操作的风格,不是标准也不是协议,只是一种风格。基于此风格设计的软件可以更加简洁和安全。
  2. 使用RestFul操作资源:可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同
  • http://127.0.0.1/item/1 查询,GET
  • http://127.0.0.1/item/1 新增,POST
  • http://127.0.0.1/item/1 更新,PUT
  • http://127.0.0.1/item/1 删除,DELETE
  1. 测试:

@PathVariable,该注解让方法的参数的值对应绑定到一个URL模板变量上

spring mock日志数据 放在单独文件_java_06

将method换为GET,则正常:

也可以通过Mapping来约束请求:

总结一下什么是RestFul架构:

(1)每一个URI代表一种资源;

(2)客户端和服务器之间,传递这种资源的某种表现层;

(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。

(4)通过不同的请求方法,可以让同一个url拥有不同的实现!

前面我们通过配置视图解析器来完成重定向或者转发,下面无需视图解析器来操作!

步骤:

  1. 注释掉springmvc-servlet.xml中的视图解析器
  2. 测试

在有视图解析器的时候,也可以用上述加前缀的方式来实现重定向和转发。

注意:redirect的路径一定不能在WEB-INF路径下,因为redirect是相当于用户直接访问了路径,而用户不能访问WEB-INF目录下的文件,只有程序内部转发的时候才能转发到WEB-INF下的JSP

  1. 提交的域名称和处理方法的参数名一致
  • 提交的数据:http://localhost:8080/user/t1?name=java
  • 映射的方法
  1. 提交的域名称和处理方法的参数名不一致
  • 提交的数据:http://localhost:8080/user/t2?username=java
  • 映射的方法
  1. 当传入的变量是一个对象时
  • 提交的数据:http://localhost:8080/user/t3?name=java&id=1&age=13
  • 映射的方法:

其中,User类:

如果实体的字段名与传入的变量名不一致,就无法将值传入对象

  1. 使用Model类返回数据(大部分情况使用Model)
  1. 使用ModelMap返回数据

在Spring MVC准备了处理编码问题的过滤器 ,需要在web.xml中配置

前后端分离的时代,通过json来传递数据!

  • Jackson应该是目前比较好的json解析工具
  • 我们在这里使用Jackson

步骤:

  1. 导入Jackson的依赖
  1. 配置springmvc-servlet.xml,解决json的乱码问题
  1. 测试

只在当前页面返回数据的注解:

@Controller + @ResponseBody

@RestController 表示该接口类都不走视图解析器,只能返回数据,在前后端分离的时代比@Controller好用

一般的,我们可以将上述调用Jackson API的过程封装成工具类:

SpringMVC的处理器拦截器类似Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。

过滤器与拦截器的区别:拦截器是AOP思想的具体应用

过滤器

  • servlet规范中的一部分,任何java web工程都可以使用
  • 在url-pattern中配置了/*之后,可以对所有要访问的资源进行过滤

拦截器

  • 拦截器是SpringMVC框架自己的,只用使用了SpringMVC框架才能使用拦截器
  • 拦截器只会拦**问的控制器方法,如果访问的是jsp/html/css/image/js等静态资源是不会拦截的

自定义拦截器:

  1. 实现HandlerInterceptor接口,并重写方法

2.在applicationContext.xml中配置拦截器

前端要求:

  • 为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data,只有这样,浏览器才会把用户选择的文件以二进制数据发送给服务器

后端要求:

  • 导入依赖
  • Spring MVCw为文件上传提供了直接的支持,这种支持是即插即用的MultipartResolver实现的
  • controller

小讯
上一篇 2025-04-19 07:26
下一篇 2025-05-16 11:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/180215.html