Spring MVC 知识总结
参考文章:http://www.oschina.net/question/84460_9608
孔浩视频
1. 几个关键类:
RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter 替代 DefaultAnnoationHandlerMapping 和 AnnotationMethodHandlerAdapter
DispatcherServlet , InternalResourceViewResolver
2. 默认配置文件名称:
*-servlet.xml
3. 可以使用<init-param>元素,手动指定配置文件的路径;
4. 基本配置
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
5. 传入参数的方式:
1). (@RequestParam("username") String username) // @RequestParam("username")中的参数会被认为是地址的一部分,如果不传此值,会报错
2). (String username)
3). (User user) // 页面以spring的form表单提交
4). (@ModelAttribute("user")User user) // 等于将user放到model中,可以处理页面跳转到添加页面时,无值可取的错误
5). @RequestMapping(value = "/{uniqueId:^\\d+$}",method = RequestMethod.GET)
public ModelAndView edit(@PathVariable("uniqueId") String uniqueId,
@RequestMapping(value="/{username}/update",method=RequestMethod.GET)
(@PathVariable String username,Model model) {
6). public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session)
可以传入HttpServletRequest、HttpServletResponse、HttpSession,值得注意的是,如果第一次访问页面,HttpSession没被创建,可能会出错;
将值传递给页面:
1). 参数中加map(Map<String,Obect)),map中添加要传递给页面的参数。取值方式:${key}
2). Model model ,model.addAttribute("username",username)
3). public String testParam(PrintWriter out, @RequestParam("username") String username) { //out直接输出
6. Controller中方法的返回值:
void:多数用于使用PrintWriter输出响应数据;
String 类型:返回该String对应的View Name;
任意类型对象:
返回ModelAndView:
7. 拦截器:
preHandle:拦截器的前端,执行控制器之前所要处理的方法,通常用于权限控制、日志,其中,Object o表示下一个拦截器;
postHandle:控制器的方法已经执行完毕,转换成视图之前的处理;
afterCompletion:视图已处理完后执行的方法,通常用于释放资源;
在MVC的配置文件中,配置拦截器与需要拦截的URL:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/index.htm" />
<bean class="com.minx.crm.web.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
8. Spring标签:
<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>,使用<spring:message code="key" />调用
Spring form标签:<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>,使用方式如下:
<form:form method="post" modelAttribute="user" enctype="multipart/form-data">
Username:<form:input path="username"/><form:errors path="username"/><br/>
Password:<form:password path="password"/><form:errors path="password"/><br/>
Attach:<input type="file" name="attachs"/><br/> <input type="file" name="attachs"/><br/> <input type="file" name="attachs"/><br/>
<input type="submit" value="添加用户"/>
</form:form>
9. 国际化:
在MVC配置文件中,配置国际化属性文件:
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="message">
</bean>
那么,Spring就会在项目中搜索相关的国际化属性文件,如:message.properties、message_zh_CN.properties
10. 自定义视图(JstlView,ExcelView)
启用jstl支持, 在InternalResourceViewResolver中加入,貌似新版可以不加,默认启用:
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
11. 异常:
局部异常处理,举例如下:
@ExceptionHandler(value={UserException.class})
public String handlerException(UserException e,HttpServletRequest req) {
req.setAttribute("e",e);
return "error";
}
全局异常处理:
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- UserException异常由error处理-->
<prop key="zttc.itat.model.UserException">error</prop>
</props>
</property>
</bean>
页面获取异常:
发现错误:<h1>${exception.message}</h1>
12. 返回json数据:
需要jackson的jar包,url以params="json"中的json结尾:
@RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")
@ResponseBody
public User show(@PathVariable String username) {
return users.get(username);
}
13. 静态资源处理:
方法一:
<!-- 将静态文件指定到某个特殊的文件夹中统一处理,/resources/以/结尾 -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
方法二:
<mvc:default-servlet-handler>:当在web.xml 中DispatcherServlet使用<url-pattern>/</url-pattern> 映射时,能映射静态资源(当Spring Web MVC框架
没有处理请求对应的控制器时(如一些静态资源),转交给默认的Servlet来响应静态文件,否则报404找不到资源错误,)
14. 验证:
@Validated User user,BindingResult br ;两个必须放在一起,将验证结果放到br中
public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException {
if(br.hasErrors()) {
//如果有错误直接跳转到add视图
return "user/add";
}
}
页面显示错误信息的代码: <form:errors path="username"/>
15 返回页面的两种方式:
return "user/show";
return "redirect:/user/users";
16. map集合取值
(map.put("users",users),users为也是个map):
<c:forEach items="${users }" var="um"> ${um.value.username } ----<a href="${um.value.username }">${um.value.nickname }</a> ----${um.value.password } ----${um.value.email }--<a href="${um.value.username }/update">修改</a> <a href="${um.value.username }/delete">删除</a><br/> </c:forEach>
17. 字符编码处理:
<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
19. 文件上传
页面要求:POST请求;enctype="multipart/form-data":
只上传一个文件: jsp页面:<input type="file" name="attach"/> 类:@RequestParam("attachs")MultipartFile attach 上传多个文件: jsp页面:Attach:<input type="file" name="attachs"/><br/> <input type="file" name="attachs"/><br/> <input type="file" name="attachs"/><br/> 类: //在具体添加用户时,是post请求,就访问以下代码 @RequestMapping(value="/add",method=RequestMethod.POST) //一定要紧跟Validate之后写验证结果类 public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException { if(br.hasErrors()) { //如果有错误直接跳转到add视图 return "user/add";
} String realpath = req.getSession().getServletContext().getRealPath("/resources/upload"); System.out.println(realpath); for(MultipartFile attach:attachs) { if(attach.isEmpty()) continue; File f = new File(realpath+"/"+attach.getOriginalFilename()); FileUtils.copyInputStreamToFile(attach.getInputStream(),f); } users.put(user.getUsername(), user); return "redirect:/user/users"; } @RequestParam("attachs")MultipartFile[] attachs 数组的时候不会自动赋值,不可以使用MultipartFile[] attachs
20. 返回json数据
需要jackson的jar包,url以params="json"中的json结尾:
@RequestMapping(value="/{username}",method=RequestMethod.GET,params="json") @ResponseBody public User show(@PathVariable String username) { return users.get(username); }
Spring MVC 知识总结的更多相关文章
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
- Spring MVC知识
f-sm-1. 讲下SpringMvc和Struts1,Struts2的比较的优势 性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差 ...
- Spring MVC知识梳理
同上一篇博客,复习梳理SpringMVC知识点,这次的梳理比较快,很多细节没有顾虑到,后期可能会回来补充 1. 整体架构 1.1 在学习了SSM框架后我们来理清三者的应用层面 浏览器发送请求,请求到达 ...
- spring、spring mvc、mybatis框架整合基本知识
学习了一个多月的框架知识了,这两天很想将它整合一下.网上看了很多整合案例,基本都是基于Eclipse的,但现在外面公司基本都在用Intellij IDEA了,所以结合所学知识,自己做了个总结,有不足之 ...
- Spring MVC基础知识整理➣拦截器和自定义注解
概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...
- spring笔记4 spring MVC的基础知识4
//todo 5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等 spring MVC 默认使用AcceptHeaderLocalResolver,根据报文头的Accep ...
- spring笔记3 spring MVC的基础知识3
4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...
- spring笔记2 spring MVC的基础知识2
2,spring MVC的注解驱动控制器,rest风格的支持 作为spring mvc的明星级别的功能,无疑是使得自己的code比较优雅的秘密武器: @RequestMapping处理用户的请求,下面 ...
- spring笔记1 spring MVC的基础知识1
1,spring MVC的流程 优秀的展现层框架-Spring MVC,它最出彩的地方是注解驱动和支持REST风格的url. 流程编号 完成的主要任务 补充 1 用户访问web页面,发送一个htt ...
随机推荐
- 获取jqGrid中选择的行的数据以及 jqGrid获得所有行数据的方法
获取jqGrid中选择的行的数据: 获取选择一行的id,如果你选择多行,那下面的id是最后选择的行的id: 1 var id=$('#gridTable').jqGrid('getGridPara ...
- java基础---->数组的基础使用(一)
数组是一种效率最高的存储和随机访问对象引用序列的方式,我们今天来对数组做简单的介绍.手写瑶笺被雨淋,模糊点画费探寻,纵然灭却书中字,难灭情人一片心. 数组的简单使用 一.数组的赋值 String[] ...
- matlab 中关于 varargin 参数
varargin 提供了一种函数可变参数列表机制,允许调用者调用该函数时根据需要来改变输入参数的个数: varargin{1}代表可变参数列表的第一个实参,同理varargin{2}代表可变参数列表的 ...
- webpack配置(二)
在配置webpack json loader的时候报错,如下: 解决方案: 首先,json文件中不能有注释 其次: 这里webpack.consig.js里面,modul下的loaders的loade ...
- Zabbix监控web,MySQL,TCP状态,Nginx
接上篇Zabbix使用SMTP发送邮件报警并且制定报警内容 Zabbix怎么设置声音告警 web监控 在zabbix server选择web 创建一个监控web的场景 添加后这里有数字1 查看 假如在 ...
- 第八课——MySQL优化之InnoDB基础原理
一.事务隔离级别 理解各种事务隔离级别的优缺点 (一)四种事务隔离级别总结 (二)四种事务隔离级别下,去重现脏读现象.不可重复读现象.幻读现象 1.在RU隔离级别下,会出现脏读现象 2.在RC隔离级别 ...
- 设计模式——抽象工厂模式
Abstract Factory模式,即抽象工厂模式,该模式要求Factory类为抽象的,并且里面的生产出来的产品也是抽象的! 这里需要着重说的一点就是,抽象类和抽象方法的作用--规范了子类的实现,以 ...
- RHEL6.×配置Centos YUM源
Step1: 清除原有的yum源rpm -aq|grep yum|xargs rpm -e --nodeps Step2:下载新的yum()源进行安装,注意操作系统支持64位还是32位wget htt ...
- 剑指Offer——删除链表中重复的结点
题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...
- LeetCode_Isomorphic Strings
Isomorphic Strings Given two strings s and t, determine if they are isomorphic. Two strings are isom ...