spring笔记4 spring MVC的基础知识4
//todo
5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等
spring MVC 默认使用AcceptHeaderLocalResolver,根据报文头的Accept-Language参数来确定本地化类型;
此外还可以使用CookieLocalResolver和SessionLocalResolver,如果想从每次请求的参数中获取本次请求对应的本地化类型,采用LocalChangerIntercepter拦截器;
有空写个实现国际化的实例...
spring实现文件上传相当简单,首先引入依赖包,common-upload ,common-io包,然后定义个MultipartResolver解析器,写个表单就可实现;这里给个例子:
<!--文件上传依赖包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="2097152"/>
<property name="uploadTempDir" value="temp"/> </bean>
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="file"/>
<input type="submit">
</form>
@RequestMapping(value = "/upload")
public String uploadImg(@RequestParam("file")MultipartFile file){ if(null!=file)
{
File newFile=new File("E://aaa.jpg");
try {
file.transferTo(newFile);
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
} return "redirect:/account/list";
}
结果是在E盘看到了一个上传的aaa.jpg图片;
静态资源的处理:在spring mvc的配置文件当中加上如下的配置,同时用默认的资源处理器和spring mvc自带的资源处置方式;
<mvc:default-servlet-handler/>
<mvc:resources mapping="/ftp/**" location="/resource/"/>
还可以在一个类中增加版本号的形式改变mapping的名称;
装配拦截器:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/account/*"/>
<bean class="com.lfc.sh.web.sp.framework.intercepter.LoginIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
package com.lfc.sh.web.sp.framework.intercepter; import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Company: Copyright© 2009 www.7road.com All rights reserved.
* com.lfc.sh.web.sp.framework.intercepter
* Create Date: 13-11-19 下午5:47
* Note: 登录的拦截器
*/
public class LoginIntercepter implements HandlerInterceptor { private static Logger logger = Logger.getLogger(LoginIntercepter.class); @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.warn("进入登录拦截器的preHandle方法"+" url:"+ request.getRequestURI());
return true;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.warn("进入登录拦截器的postHandle方法");
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.warn("进入登录拦截器的afterCompletion方法");
}
}
下面是日志:
2013-11-19 18:00:16 com.lfc.sh.web.sp.framework.intercepter.LoginIntercepter.preHandle(26)---[160013]
[WARN] 进入登录拦截器的preHandle方法 url:/account/create
2013-11-19 18:00:16 com.lfc.sh.web.sp.framework.intercepter.LoginIntercepter.postHandle(32)---[160015]
[WARN] 进入登录拦截器的postHandle方法
2013-11-19 18:00:16 com.lfc.sh.web.sp.framework.intercepter.LoginIntercepter.afterCompletion(37)---[160028]
[WARN] 进入登录拦截器的afterCompletion方法
异常处理:
spring Mvc 通过HandlerExceptionResolver处理程序的异常;
接口的功能见截图:

实现类:

spring mvc 默认安装的DefaultHandlerExceptionResolver,将异常转换为相应的状态码;
对某个Contoller指定异常处理@ExceptionHandler(Exception.class) @ResponseStatus
如果需要对所有的异常进行统一处理,可以通过SimpleMappingExceptionResolver来指定;
如果要自定,实现ExceptionResolve;
6,小结
spring mvc是一架实际精密的机器,理解其内部实现原理可以更好的使用和扩展它;
spring笔记4 spring MVC的基础知识4的更多相关文章
- 《Programming Hive》读书笔记(两)Hive基础知识
<Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...
- tensorflow笔记(一)之基础知识
tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...
- php面试笔记(5)-php基础知识-自定义函数及内部函数考点
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...
- php面试笔记(3)-php基础知识-运算符
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而运算符相关的考 ...
- spring笔记3 spring MVC的基础知识3
4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...
- Spring笔记(4) - Spring的编程式事务和声明式事务详解
一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...
- Spring笔记1——Spring起源及其核心技术
Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...
- php面试笔记(2)-php基础知识-常量和数据类型
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...
- Spring笔记(6) - Spring的BeanFactoryPostProcessor探究
一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...
- Spring笔记(7) - Spring的事件和监听机制
一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种 ...
随机推荐
- 一道js面试题看变量的作用域
[问题]分别求下面程序的输出结果: 1. <script type="text/javascript"> var a = 10; sayHi(); function s ...
- linux执行sh脚本文件命令
linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...
- 加载的过程中图片变形了? --教你自定义自动适配图片宽高比的RatioLayout
很多同行在开发中可能会遇到这样的问题,就是在加载图片的时候会出现图片变形的问题.其实这很可能就是你的图片宽高比和图片所在容器的宽高比不匹配造成的.比如说图片的宽为200,高为100.宽高比就是2,那么 ...
- CSS技能汇总,研究及实践
最近一直在研究CSS,因为发现实践中大部分时间都在写CSS,且自己感觉写的很烂,虽然以前看的很多,但却很少有去实践过,更别提研究了,现在发现根本就不是你懂你就会,很多都是你用着用着才真的会了的,于是现 ...
- 专为设计师而写的GitHub快速入门教程
专为设计师而写的GitHub快速入门教程 来源: 伯乐在线 作者:Kevin Li 原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目 ...
- Android入门(十四)内容提供器-实现跨程序共享实例
原文链接:http://www.orlion.ga/661/ 打开SQLite博文中创建的 DatabaseDemo项目,首先将 MyDatabaseHelper中使用 Toast弹出创建数据库成功的 ...
- UML简介
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型 ...
- UNIX/Linux打包,压缩 ,解压:
1.tar打包命令 ①tar cvf tarname.tar file1 file2 $ .log $ .log $ .log $ tar cvf alllog.tar *.log a .log 0K ...
- Network - DNS
珠玉在前,不再赘言 DNS 原理入门 从理论到实践,全方位认识DNS(理论篇) 从理论到实践,全方位认识DNS(实践篇)
- 【Android】[转] Android中Bitmap,byte[],Drawable相互转化
一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...