Spring MVC随笔记录
根据https://blog.csdn.net/abc997995674/article/details/80353410整理
@ModelAttribute 可以用在方法、方法参数上,也可以和@requstmapping 一起2019-03-31使用放在方法上。放在方法上分返回void 和有返回值,有@ModelAttribute("key")形式。@ModelAttribute可以用来更新数据库行(先把原先数据行存在model中,再更新---机制是先存值再更新)
maven 包含本地仓库、第三方仓库和中央仓库。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>添加这一个依赖就可以自动引入其他所有的spring运行环境相关jar和springmvc运行相关jar,不用一个一个的引入,很好的处理方式。
1、springmvc的基本配置
spring容器是springmvc容器的父容器,父容器可以看到子容器的Bean,子容器中不能看到父容器中的Bean。如果两个容器都配置了包扫描,会有同一个bean被创建两次的情况。最常用的解决方案就是在配置包扫描是进行过滤:
在springmvc配置文件中配置只扫描@Controller注解,spring容器配置排除扫描@Controller注解。
执行过:根据包扫描<context:component-scan 和@controler确定作为控制器的类,再根据@requstmapping形成对应映射路径处理每一个请求,最后根据页面解析器<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">的配置返回对应视图。
2、处理器向页面返回参数可以通过ModelAndView、Model、ModelMap、Map和HttpServletRequest实现,很多文章说到ModelAndView只能通过在 方法中new的方式实现,实际上它和其它几个一样,也可以通过放在方法参数中实现,在功能中在实现它的视图(view)就可以。
3、重定向(return “redirect:res”)/请求转发(return “forward:res”)
4、 springmvc+ajax+json 传参参考一下两篇文博文,https://www.cnblogs.com/qiankun-site/p/5774300.html 和 https://www.cnblogs.com/qiankun-site/p/5774300.html,个人理解设置contentType:'application/json;charest=utf8' 和 stringify(params) 和@RequestBody 用在传复杂对象(嵌套对象、json数组)的情景,一般(简单)对象不设置这三项也可以。
5、springmvc 默认实现了一些数据类型转换器,比如 string 转 Int 、date 、实体类等,我们可以利用converter、Formatter、PropertyEditor(https://blog.csdn.net/abc997995674/article/details/80384151)实现自定义转换器(自定义格式-->生成类型转换器-->绑定到DataBinder,注意加注解@InitBinder("params"))。
6、springMVC结合ajax时在方法上加@ResponseBody,该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区,所以也可以不用@ResponseBody直接利用response的write方法实现返回数据。前端有三种传值方式(键值对、对象、JSON.stringify({key1:value1,key2:value2...})),当前端使用get方式传值时,后台都可以获取到数据但要注意乱码问题(get方式传数据出现中文乱码是因为get使用的ASCLL编码)。使用post时前两种都要和contentType:”application/x-www-form-urlencoded”结合使用后台才能获取到值但要注意乱码问题,第三种要结合contentType:”application/json; charset=utf-8”和@RequestBody使用不会出现乱码问题。
7、上传下载,上传文件时要在springMVC中配置<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">必须配,DispatcherServlet经过一系列解析最后在controller中利用MultipartFile file接受文件参数。使用ResponseEntity<byte[]>完成文件下载,记得设置"Content-Disposition","attachment;filename=filename"请求头,浏览器才能认得这是一个下载。也可利用@ResponseBody+返回字节数组(原始方式)实现。
8、静态资源处理,使用<mvc:default-servlet-handler />将请求交给容器(tomcat)默认的servlet处理,再配置<mvc:annotation-driven />处理默认servlet无法处理的请求。也可以利用<mvc:resources />将静态资源的处理交给SpringMVC自己处理。
9、springMVC利用HiddenHttpMethodFilter将post请求(带_method参数)解析成put和delete请求 支持rest风格。
10、配置<mvc:view-controller path="/hello" view-name="hello"></mvc:view-controller>不经过controller直接转发到目标页面。
11、JSR 303 是Java为Bean数据合法性校验提供的标准框架,在bean上绑定校验规则(@NotNull、@Max等)。步骤:1、引入jar包;2、配置<mvc:annotation-driven/>会默认装配LocalValidatorFactoryBean
3、在bean上加对应验证规则;4、在controller验证对象上加@Valid注解和保存校验结果的对象(BindingResult或Errors),返回错误信息会保存到默认模型中。
12、拦截器,springMVC提供抽象类实现public abstract class HandlerInterceptorAdapter implements HandlerInterceptor,多个拦截器执行时三个方法的执行顺序以栈结构执行顺序
(prehander->controller->posthander->viewResover->afterCompletion),需要配置<mvc:interceptors>才能使用。可以使用 <mvc:interceptor>、<mvc:mapping path="" />、<mvc:exclude-mapping path="" />来配置拦截器的作用路径。 能使用servlet规范中的过滤器Filter实现的功能就用Filter实现,因为HandlerInteceptor只有在Spring MVC环境下
才能使用,因此Filter是最通用的、最先应该使用的。如登录这种拦截器最好使用Filter来实现。
Spring MVC随笔记录的更多相关文章
- Spring MVC 配置记录
目录 1.从pom.xml配置Maven文件开始 2.web.xml 3.springmvc-config.xml 4.controller 使用 idea 编辑器 + Maven + spring ...
- spring mvc随笔
一.SpringMvc学习笔记1.使用SpringMvc时需在web.xml文件中添加配置 <servlet> <servlet-name>springMVC</serv ...
- spring cloud 随笔记录(1)-
最近随着微服务的火热,我也开始对我服务进行了解了 毕竟程序员这一行需要及时更新自己的技能,才能更好的生存. 我理解的微服务 项目由多个独立运行的程序组成,每个服务运行在自己的进程中,服务间采用轻量 ...
- 通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录
java web工程项目使用了Spring+Spring MVC+Hibernate的结构,在Controller中的方法都是用于处理前端的访问信息,Controller通过调用Service进行业务 ...
- spring mvc 通过拦截器记录请求数据和响应数据
spring mvc 能过拦截器记录请求数据记录有很多种方式,主要有以下三种: 1:过滤器 2:HandlerInterceptor拦截器 3:Aspect接口控制器 但是就我个人所知要记录返回的数据 ...
- 我的Spring Boot学习记录(二):Tomcat Server以及Spring MVC的上下文问题
Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以 ...
- 从零开始学 Java - 搭建 Spring MVC 记录云创的日子 第一章
2017年11月29日 来到新项目,需要用到Spring MVC ,那么我就开始记录我这次的学习. Spring MVC 框架是围绕一个 DispatcherServlet 来设计的,这个 Servl ...
- Spring MVC接收参数(Map,List,JSON,Date,2个Bean)(记录一次面试惨状)
题目Spring MVC 接收参数 MapListDate2个BeanJSON Spring MVC接收参数 -Map Spring MVC接收参数 -List Spring MVC接收参数 -dat ...
- Spring Mvc返回html页面404错误解决记录--转载
原文地址:http://53873039oycg.iteye.com/blog/2061992 以前使用Spring Mvc时候都是返回jsp页面或者ftl页面,昨天想返回html页面,spring- ...
随机推荐
- Winform 窗体实现圆角展示
触发窗体的Resize事件,如下所示: #region 界面实现圆角 private void LoginForm_Resize(object sender, EventArgs e) { if (t ...
- catkin_make编译错误
在工作空间下编译ros的代码包,报错如下, CMake Error at LeGO-LOAM/LeGO-LOAM/CMakeLists.txt: (find_package): By not prov ...
- IDEA下调试和运行Hadoop程序例子
准备 配置好JDK和Hadoop环境, 在IDEA中建立maven项目,建立后的目录结构为: 修改pom..xml引入相关支持: <?xml version="1.0" en ...
- Elisp 中变量赋值函数 set 与 setq 辨析
在 Elisp 中,为变量赋值的函数有 set 与 setq,但是,两者存在很大的差异. 使用 set 赋值: 如果我们想为变量 flowers 赋值为一个 列表 '(rose violet dais ...
- 忘记秘密利用python模拟登录暴力破解秘密
忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...
- cefsharp插入自定义JS
string script_1 = "document.getElementsByTagName('head')[0].appendChild(document.createEleme ...
- 刘志梅201771010115.《面向对象程序设计(java)》第十六周学习总结
实验十六 线程技术 实验时间 2017-12-8 1.实验目的与要求 (1)当线程的run方法执行方法体中最后一条语句后,并经由执行return语句返回时,或者出现了在方法中没有捕获的异常时,线程将 ...
- Python学习【01】编程语言简介,Python安装及环境变量配置
编程语言介绍 开发 系统软件开发:Windows,iOS 应用软件开发:淘宝.网易云音乐.QQ 开发语言 高级语言:Python,Java,PHP, c#,GO,ruby,c++ ---&g ...
- linux基础命令入门
1.使用mkdir 创建目录mkdir $HOME/testFolder 2.使用cd命令切换目录cd $HOME/testFolder 3.使用 cd ../ 命令切换到上一级目录cd ../ 4. ...
- C语言列出真分数序列代码及解析
问题描述 按递增顺序依次列出所有分母为60,分子小于60的最简分数. 问题分析 分子.分母只有公因数1的分数叫做最简分数或者说分子和分母是互质数的分数,叫做最简分数,又称既约分数,如2/3,8/9,3 ...