![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SpringMVC
小皮子摘星星
请多多指教
展开
-
源码角度看 Spring MVC 执行流程
Spring MVC 执行流程对于 Spring MVC 的流程一直很感兴趣,所以画了个上面的流程图来梳理过程,下面用文字解释一 映射地址是否存在图中的第 2 步。我们在请求网页的时候,不仅仅是为了请求 Servlet,有时候需要请求一些静态资源,如 jQuery,CSS,图片等。因为SpringMVC 的 DispatchServlet 会处理所有的请求,那么对应的静态资源没有 Servlet 映射地址。该怎么办,通常在配置文件加:<mvc:default-servlet-handler原创 2020-07-26 23:48:06 · 100 阅读 · 0 评论 -
Spring MVC 启动源码分析
Spring 和 Spring MVC 的 IOC 之间容器关系概述上图是引用 Spring 官方网站的图片。Spring MVC 的 IOC 容器是在 Spring 的 IOC 容器延深展开来的。首先分析配置文件 web.xml<web-app> <!-- Spring 配置 --> <listener> <listener-class>org.springframework.web.context.ContextLoa原创 2020-07-19 23:52:03 · 109 阅读 · 0 评论 -
Spring MVC 数据绑定流程
Spring MVC 数据绑定流程前端表单穿过了的数据,为什么会被自动封装成实体对象?Spring MVC 是如何把我们的实体类和表单中参数对应封装起来,又是如何完成自动类型转换呢?数据绑定流程:Spring MVC 框架将 ServletRequest 对象及目标方法的入参实例传给 WebDataBinderFactory 实例,这个实例便用来创建 DataBinder 对象DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据的类型原创 2020-07-14 22:55:33 · 462 阅读 · 0 评论 -
Spring MVC 如何完成重定向
Spring MVC 如何完成重定向在 SpringMVC 中,处理器的目标方法返回的视图名称前加上“ redirect: ” 表示进行重定向,加上“forward:”表示转发,但是实际默认的就是转发操作。重定向 @RequestMapping("testRedirct") public String testRedirct() { System.out.println("Redirct"); return "redirect:/jsp/success.jsp"; }转发 @Requ原创 2020-07-13 22:44:15 · 356 阅读 · 0 评论 -
SpringMVC 视图解析器
视图解析器流程Spring MVC 的目标方法在返回值数据的时候,主要有以下几种形式,String,ModelAndView,View 等等。那么 Spring MVC 的解析流程是如何?Spring MVC 在调用目标方法时候,都会封装成一个 ModelAndView 对象,然后交给视图解析器(ViewResolver) 去处理。然后视图解析器解析成 JSP/HTML 等 View。通过视图解析器解析的视图,用来渲染数据,将数据模型里面的数据呈现给用户。这里 Spring MVC 为了视图和数据原创 2020-07-13 22:41:21 · 181 阅读 · 0 评论 -
@ModelAttribute 注解
@ModelAttribute 注解试想一个场景,如果我们在修改某个对象的时候,首先该对象是从数据库取出来,展示到前端,但是我们都知道网页有编辑按钮,能够修改个人信息。但是呢,一部分不能修改,比如用户的账号是不能被轻易修改的,而部分属性(密码)是能被修改的。那么在前端的表单提交中,会在服务器接受到一个 new 出一个新的对象,比如 Admin,那么这个时候,我们的不想被修改的属性,账号 account 就为空了呀?那么如何避免某些属性不被更改,如账号,但又能够修改密码呢?使用隐藏表单控件使用禁止编原创 2020-07-12 22:59:03 · 534 阅读 · 0 评论 -
MVC 数据处理模型
数据处理模型Spring MVC 执行流程Spring MVC 的执行流程中,控制层(Controller 层)在调用 Service 层处理之后,会有一个返回结果。在原生的 JavaEE 中,对于返回结果,可以使用 request.getAttribute() 或者 session.setAttribute() 来把信息保存到 session 域和 request 域,那么在 SpringMVC 中,它是如何把数据保存到这两个域 ? 这里就要借助 Spring 提供的数据模型 ModelAndVi原创 2020-07-12 22:58:11 · 416 阅读 · 0 评论 -
Spring 中的事务管理食用说明
Spring 的事务管理Spring 的 AOP 我们都知道,面向切面的编程,可以对目标方法进行增强(前置通知、后置通知、返回通知等),而事务我们也知道,数据库在进行操作的时候,需要对修改的东西保持原子性等,对于失败的事务进行回滚,成功的事务进行提交。对应的也就是 rollback 和 commit。编程式事务管理也就是直接将事务管理代码切入到业务方法中,来控制事务的提交和回滚,也就是和原始的 JDBC 管理方式类似。Spring 中事务的相关对象PlatformTransactionManage原创 2020-07-10 22:38:50 · 123 阅读 · 0 评论 -
RequestMapping 的食用相关详解
@RequestMapping 详解在 Spring-mvc 中,@RequestMapping 是用来映射请求的,我们知道 Servlet 原始的开发方式中,可以通过 @WebServlet 注解指定该 Servlet 的映射访问地址。而 @RequestMapping 类似也是这样,并且提供了更方便的方式,使得我们在编写 Servlet 更关注业务代码。源码@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPo原创 2020-07-08 23:51:54 · 334 阅读 · 0 评论 -
Spring MVC的异常处理器
异常处理器异常处理思路Java 中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。系统的 Dao、Service. Controller出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理,如下图:异常处理的两种方式使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolver原创 2020-07-06 23:31:07 · 147 阅读 · 0 评论 -
Spring mvc 的拦截器使用方式
SpringMVC 拦截器拦截器 interceptor 作用Spring MVC的拦载器类似于Serlet开发中的过滤器Filter,用于对处理器进行预处理和后处理将拦截器按一定的顺序联结成一条链, 这条链称为拦截器链(Interceptor Chain) 。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。拦截器和过滤器区别区别过滤器拦截器使用范围是servlet规范中的一部分,任何 Java Web工程都可以原创 2020-07-05 23:46:44 · 106 阅读 · 0 评论 -
SpringMVC 数据响应食用方式
SpringMVC 数据响应方式页面跳转返回字符穿通过 ModelAndView 对象返回回写数据直接返回字符串返回对象或集合页面跳转返回字符串直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。返回带有前缀的字符串转发:forward:/WEB-INF/views/index.jsp重定向:redirect:/index.jsp返回 ModelAndView 对象 @RequestMapping(value = "/quick2")原创 2020-07-03 23:11:03 · 104 阅读 · 0 评论 -
AOP 的通知注解食用指南
基本使用步骤步骤在配置文件,指定扫描哪个包使 @AspectJ 注解生效编写切面类使用 @Aspect 声明切面类使用 @Component 把切面类交给 IOC 管理使用 @Before 注解等对应哪个方法表达不同通知,并且使用切面表达式来指定哪个方法要被代理。具体假设一个场景,有一个业务层,用于对账户的保存和更新删除,但是我要在对保存、更新等操作的时候打印日志该怎么办?如果我们直接在业务层的代码上添加,就相当于加了无关紧要的代码。所以这里可以用 Spring 的 AOP 方式,在原创 2020-07-02 20:21:11 · 243 阅读 · 1 评论 -
JdbcTemplate 的使用步骤
概述它是 spring 提供的一个对象,对原始的 JDBC 的 API 操作进行简单的封装。它更像是一个工具,和 DButils 很像,只是 Spring 不叫 util,叫 Template(模板)。除此之外,Spring 还提供了很多的模板,例如操作关系型数据库的 HibernateTemplate,操作 NoSql 数据库的 RedisTemplate,操作消息队列的 JmsTemplate等等下面采用的是 Maven 创建的工程使用步骤导入 Spring-jdbc 和 spring-tx原创 2020-06-30 19:48:42 · 578 阅读 · 0 评论 -
AOP 的 XML 配置
基本使用步骤假设一个场景,有一个业务层,用于对账户的保存和更新删除,但是我要在对保存、更新等操作的时候打印日志该怎么办?如果我们直接在业务层的代码上添加,就相当于加了无关紧要的代码。所以这里可以用 Spring 的 AOP 方式,在原有的业务层代码进行增强。业务层代码 AccountService.java 和 切面类 Logger.java代码如下IAccountService.java 接口/** * 账户的业务层 */public interface IAccountService {原创 2020-06-29 23:54:17 · 298 阅读 · 0 评论 -
SpringMVC 如何获得请求数据
SpringMVC 获得请求数据VO.javapublic class VO { private List<User> userList; @Override public String toString() { return "VO{" + "userList=" + userList + '}'; } public void setUserList(List<原创 2020-07-04 23:29:27 · 194 阅读 · 0 评论 -
Spring 和 Spring MVC 整合流程
Spring 和 Spring MVC 整合流程虽然我们知道,Spring 和 Spring MVC 都是一套家族体系。但是对于不同的工人,就要干不同的活,而 Spring 和 Spring MVC 同样也要分开,干不同工人的活。Spring 职责负责业务层和数据访问层Spring MVC 职责负责控制层所以也就是会存在两个 IOC 容器。步骤导入 jar 包或依赖jackson-annotations-2.9.0.jarjackson-core-2.9.0.jarjack原创 2020-07-18 20:41:42 · 230 阅读 · 0 评论 -
More than .. name [spring_web] was found 如何解决
More than one fragment with the name [spring_web] was found在 Spring 和 SpringMVC 整合的时候,遇到More than one fragment with the name [spring_web] was found 问题,提醒是有多个相同的 web 片段。后面查看资料发现,由于我在 /WEB-INF/lib 目录下的 加入了 spring-web-5.0.2.RELEASE.jar 的 sources.jar 包,其中里面有原创 2020-07-18 20:05:24 · 426 阅读 · 0 评论 -
MVC 拦截器的原理
SpringMVC 拦截器SpringMVC 的 HandlerMapping 都支持处理程序拦截器(Interceptors)。当你想要拦截特殊的某种请求,比如对非法文字的过滤。所用的拦截器(Interceptors )都必须实现 HandlerInterceptor 接口。它有三个方法能够让我们灵活的应用于对目标处理器的预期处理和后置处理。preHandle() :在实际的目标请求处理器方法调用之前执行postHandle():在目标请求处理器方法调用之后、渲染视图之前执行。afterCo原创 2020-07-17 22:32:41 · 676 阅读 · 0 评论 -
Spring MVC 实现文件的上传与下载
Spring MVC 实现文件的上传与下载文件的上传SpringMVC 提供了上传文件的支持,并且这种支持是可插拔式的。这个可插拔式的组件时 MutilpartResolver 实现的。Spring 使用 FileUpload 实现了 MutilpartResolver 。类名称为 CommonsMultipartResolver。默认请求下,SpringMVC 并没有配置 MultipartResolver 组件,需要在配置文件中配置这个 bean。CommonsMultipartResolve原创 2020-07-16 18:58:00 · 104 阅读 · 0 评论 -
国际化如何使用
SpringMVC 国际化因为今天的页面不再是简单的个人程序,需要面对全世界的用于观看,例如外交部的网站,可以根据自己浏览器的语言来选择对应的文字。而 Spring MVC 为了方便我们国际化的开发,也提供了便利,建立在 Java国际化的基础之上的,通过提供不同国家/语言环境的消息资源,然后通过 ResourceBundleMessageSource 加载指定 Locale对应的资源文件,取得该资源文件中指定 key 对应的消息。这些步骤,Spring MVC 框架对J国际化进行了进一步的封装,简化了国原创 2020-07-15 22:58:01 · 217 阅读 · 0 评论 -
HttpMessageConver 的原理
HttpMessageConverter 原理HttpMessageConverter 是 Spring 3.0 提供的一个新接口。负责将请求消息转为一个对象。也负责把一个对象转为响应消息。你可以通过源码查看:ublic interface HttpMessageConverter<T> { boolean canRead(Class<?> clazz, @Nullable MediaType mediaType); boolean canWrite(Class<原创 2020-07-15 20:57:46 · 526 阅读 · 0 评论