SpringMVC知识一锅烩
Spring简介
SpringMVC和Struts2一样都是属于表现层的框架,将前段发出的请求分发给对应的后端处理器即Controller
处理流程
- 用户请求被前端控制前拦截,然后根据对应的拦截路径去处理器映射器中寻找对应的Handler,然后通过处理器适配器执行指定的Handler处理器适配器会将执行后的结果返回给前端控制器,前端控制器选择对应的视图解析器渲染和解析视图,最后将结果相应给用户。

配置文件
需要创建springmvc.xml文件放在根目录下,更改
<param-value>classpath:springmvc.xml</param-value>来指定配置文件的位置。路径问题
/* 拦截所有 jsp js png .css 真的全拦截 建议不使用
*.action *.do 拦截以do action 结尾的请求 肯定能使用 ERP
/ 拦截所有 (不包括jsp) (包含.js .png.css) 强烈建议使用
springMVC的三大组件和核心
核心 : DispatcherServlet(前端控制器)
三大组件 :
ViewResolver : 视图解析器
HandlerMapping : 处理器映射器组件(查找路径名对应的Handler)
HandlerAdapter : 处理器适配器组件(执行Handler)
@RequestMapping
value : 访问此方法的访问路径,可以是数组
method : 可以设置表单提交方式(post/get) 如果表单不符合,就会出现异常,可以是数组
可以添加在类上面,类似struts2的namespace 则下面的方法都需要有类上父路径才能访问
第一个Controller
@RequestMapping(value = "test.action") // 在方法上面添加注解 value 为访问路径
@Controller (需要添加Controller,并且在springMVC中配置注解扫描)
Controller返回值
Controller是单例的, 当每个线程进来的时候会从这个程序创建一个副本,然后线程访问这个副本.
ModelAndView : 返回view 和 model (数据)
mav.setViewName("test.jsp"); // 返回视图
mav.addObject("test", "this is mmmmm"); // 封装数据, 内部为封装的request.setAttribute
Model : 常用
public String UserList(Model model){}这样就可以直接return ""; 来返回视图
model.addAttribute("userList",id);内部为封装的request.setAttribute重定向 : return 'redirect:/item/itemlist.action' // 提交表单最好使用重定向,这样可以防止表单重复提交
forward : return 'forward:/item/itemlist.action' // 默认
void : ajax
- 不返回视图
参数绑定
由于Controller是单例的,所以我们需要将参数封装到方法属性中
public String UserList(User user,Model model,String id){}User : 前段的input name和user内的属性名相同,可以自动封装
String id : 接受超链接传过来的值
也可以传递request,response,session
public ModelAndView toEdit(Integer id,HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model){}public ModelAndView updateitem(QueryVo vo){}封装pojovo : User s , 前端 s.name
参数绑定 : 数组
- 直接在形参传递数组,可以接受例如checkbox之类的多选的值
参数绑定 : list
只能使用包装类来提交,不能再形参直接传递list
前段用 itemList[0].name 作为name, 适用于批量修改
自定义参数绑定
使用
<mvc:annotation-driven />如果某些数据的格式不正确(比如日期),则可以自定义日期转换
首先在SpringMVC.xml 中配置类型转换器
然后自定义转换器类,实现需要进行的转换
post提交乱码
在web.xml中配置编码过滤器
异常处理
异常处理器
将下层抛上来的异常做一个统一的处理
过程 :
建一个类,并且实现HandlerExceptionResolver接口,实现对应的方法
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object obj,
Exception e) {
/*
* request / response : 发生异常的响应
* obj : 发生异常的地方
*
* */ ModelAndView andView=new ModelAndView();
andView.addObject("error", e);
andView.setViewName("/error.jsp");
return andView;
}
在springMVC配置文件中配置这个bean
<bean class="com.lyh.exception.CustomerException"></bean>
当有异常时就会按照你所想要的方式去处理
自定义异常
知道异常为什么出现,然后可以进行对应的操作
只需要自定义一个异常类,然后在异常处理器判断这个发生的异常是否是我们自定义的异常类,然后进行对应的操作
上传文件
设置表单name,设置表单post 以及enctype="multipart/form-data"
在controller中的的参数中设置MultipartFile multipartFile , 注意, 属性名要和name名相同
在springmvc中配置 , 在这里可以设置参数来限制上传大小,类型之类
<!-- 上传图片实现类 id 固定-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 控制上传图片的大小 B
<property name="maxUploadSize" value="5000"></property>
-->
</bean>
实现上传
multipartFile.transferTo(new File("D:\\upload\\"+ name+"."+suf)); //保存到指定地点
json
属性添加注解@RequestBody
- 接受json,自动转化为对象(接受的要为json字符串,js中转换字符串的方式JSON.stringify(data))
前段:
<script type="text/javascript">
$(document).ready(function(){
var saveDataAry=[];
var data1={"user":"ququ","age":1};
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath }/jsonTest.do",
dataType:"json",
contentType:"application/json", // 需要设置头为json
data:JSON.stringify(data1), // 转换Json对象为字符串
success:function(data){
}
});
});
</script>@RequestMapping(value="json.action")
public void json(@RequestBody User user){
}
方法添加注解 @ResponseBody , 返回json, 自动转换为json字符串
@ResponseBody
public User json(@RequestBody User user){
return user;
}
拦截器
自定义拦截器
实现接口 HandlerInterceptor , 其中三个方法分别对应方法执行前 , 执行后 , 页面渲染后
配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*.action"></mvc:mapping>
<mvc:exclude-mapping path="/userList.action"></mvc:exclude-mapping>
<bean class="com.lyh.interceptor.InterceptorOne"></bean>
</mvc:interceptor>
</mvc:interceptors>拦截器的执行位置 : 对应方法执行前 , 执行后 , 页面渲染后
多个拦截器执行顺序
拦截器内的跳转需要使序 :
每个阶段都会执行所有拦截器的这个阶段的方法,执行完毕以后再进行下一个阶段的拦截
perHandler 按照拦截器定义顺序调用
postHandler 按照拦截器定义的逆序调用
afterCompletion 按照拦截器定义的逆序调用
postHandler 是在拦截器链所有拦截器返回成功调用
afterCompletion只有在preHandler返回为true的时候才调用
springMVC和Struts的区别
springMVC是单例, Struts2为多例
springMVC参数绑定在形参 , Struts2 绑定成员变量
springMVC没有值栈 Struts2 有值栈
springMVC的入口是一个Servlet, Struts2为一个Filter
SpringMVC知识一锅烩的更多相关文章
- SpringMVC知识大览
SpringMVC大览 springMVC的基础知识 什么是SpringMVC? springmvc框架原理(掌握) 前端控制器.'处理映射器.处理适配器.视图解析器 springmvc的入门程序 目 ...
- SpringMVC 知识整理
SpringMVC架构设计 MVC是一种架构模式,它把业务的实现和展示相分离. SpringMVC与struts2的区别 Struts2是类级别的拦截, 一个类对应一个request上下文,Sprin ...
- SpringMVC知识(1)
1.SpringMVC的工作流程 流程 : 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器. ...
- 二:SpringMVC知识整理
springmvc复习: 1.SpringMVC介绍 2.SpringMVC入门程序 1)创建web工程 2)导入jar包 3)在web.xml中配置前端控制器(指定上下文件的路径 classpath ...
- 「黑客必备技能」Python正则表达式详解
说在前面 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能. 正则表达式在不同的语言中使 ...
- 【CTO辩论会】移动开发人员忠于技术or 背离技术
第一期CTO辩论会结束后,大家在微信群中讨论,学什么编程语言好.有位官人直呼"劳力者治于人,苦差,不学也罢". 在IT.科技变革世界的今天,移动开发人员成为一个很时髦的工种. 就连 ...
- Redis面试热点工程架构篇之数据同步
温馨提示 更佳阅读体验:[决战西二旗]|Redis面试热点之工程架构篇[2] 前言 前面用了3篇文章介绍了一些底层实现和工程架构相关的问题,鉴于Redis的热点问题还是比较多的,因此今天继续来看工程架 ...
- 不要再说不会Spring了!Spring第一天,学会进大厂!
工作及面试的过程中,作为Java开发,Spring环绕在我们的身边,很多人都是一知半解,本次将用14天时间,针对容器中注解.组件.源码进行解读,AOP概念进行全方面360°无死角介绍,SpringMV ...
- 地址标记,SpringMVC转发与调用相关知识存档
1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...
随机推荐
- 每周刷题记录--by noble_
学习hzwer的博客. ----------------------------------------------------------------- 2017.10.3 主要是水题与傻逼dp: ...
- (译)通过 HTML、JS 和 Electron 创建你的第一个桌面应用
原文:Creating Your First Desktop App With HTML, JS and Electron 作者:Danny Markov 近年来 web 应用变得越来越强大,但是桌面 ...
- Online Bayesian Probit Regression介绍之Factor Graph
下面就开始讲讲概率图中的Factor Graph.概率图博大精深,非我等鼠辈能够完全掌握,我只是通过研究一些通用的模型,对概率图了解了一点皮毛.其实我只是从概率这头神兽身上盲人摸象地抓掉几根毛,我打算 ...
- Jmeter脚本录制方法(一)——分别使用Badboy录制和Jmeter自带的代理服务器录制
Jmeter录制方式分三种,分别是:使用Badboy录制.Jmeter自带的代理服务器录制和手工录制,今天先介绍前两种录制方法. Badboy录制 Badboy是用C++开发的动态应用测试工具, 其拥 ...
- PowerBI开发 第七篇:数据集和数据刷新
PowerBI报表是基于数据分析的引擎,数据真正的来源(Data Source)是数据库,文件等数据存储媒介,PowerBI支持的数据源类型多种多样.PowerBI Service(云端)有时不直接访 ...
- SpringMVC框架(四)文件的上传下载,上下文路径
文件目录: SpringMVC配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- python数据结构之栈与队列
python数据结构之栈与队列 用list实现堆栈stack 堆栈:后进先出 如何进?用append 如何出?用pop() >>> >>> stack = [3, ...
- linux下c语言的多线程编程
我们在写linux的服务的时候,经常会用到linux的多线程技术以提高程序性能 多线程的一些小知识: 一个应用程序可以启动若干个线程. 线程(Lightweight Process,LWP),是程序执 ...
- mongodb生产环境(副本集模式)集群搭建配置
mongodb副本集模式由如下几部分组成: 1.路由实例mongos 2.配置实例configsvr 3.副本集集群replset(一主多从) tips: 1.以上实例都是mongod守护进程 2.以 ...
- DevOps之服务-监控工具
唠叨话 关于德语噢屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <DevOps教程> <DevOps之服务-监控工具> 注:关于监控工具的具体 ...