1、@RequestMapping 注解的用法
- value:多个请求地址可以同时指向同一个方法
@RequestMapping(value={"/list","/list2"})
- method:限制请求方式,默认为post和get
@RequestMapping(value="/list",method= {RequestMethod.GET,RequestMethod.POST})
- RequestMapping注解写在Controller上是,表示窄化请求映射(路径)
@Controller
@RequestMapping(value="/item/")
2、文件上传
-
文件上传页面三要素
- 需要添加两个jar commons-io.jar commons-fileupload.jar
- 表单提交方式一定为post
- 表单中enctype的值一定为multipart/form-data
- input的类型一定为file
-
SpringMVC的要素
- 在springmvc容器中配置文件解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置最大上传为5MB --> <property name="maxUploadSize"> <value>5242880</value> </property> </bean>- 绑定参数类型 MultipartFile ,参数的名字要和 input的name属性值保持一致
-
文件保存实例
@RequestMapping("/updateitem")
public String updateItem(Items item,MultipartFile pictureFile,Model model) throws Exception, IOException {
//获取到文件的名称和后缀
String originalFilename = pictureFile.getOriginalFilename();
//获取到文件的后缀
String extendName = originalFilename.substring(originalFilename.lastIndexOf("."));
//通过uuid设置文件的名称
String name = UUID.randomUUID().toString().replace("-", "");
//合并文件的名称和后缀
String fileName = name + extendName;
//保存文件到文件系统
pictureFile.transferTo(new File("F:\\upFile\\"+fileName));
//将路径保存到item中
item.setPic(fileName);
itemsService.update(item);
return "success";
}
3、json交互
-
@ResponseBody:把即将返回的对象转成json字符串并且回写到浏览器
需要包:jackson-annotations-2.4.0.jar、jackson-core-2.4.2.jar、jackson-databind-2.4.2.jar
<!-- 前台ajax -->
<script type="text/javascript">
function save(){
$.ajax({
url:'${pageContext.request.contextPath }/updateitemAjax.action',
type:'post',
/* 将form表中的数据序列号为一个对象 */
data:$("#itemForm").serialize(),
dataType:'json',
success:function(data){
alert(data.success)
}
})
}
</script>
//后台接收数据,并返回json数据
@RequestMapping("/updateitemAjax")
@ResponseBody
public Map updateItemAjax(Items item,MultipartFile pictureFile,Model model) throws Exception, IOException {
Map<String,Object> json = new HashMap<String,Object>();
json.put("success", true);
//平常方式:将json转换为json格式,然后通过Request.getWrite().Write("..")回写数据到页面
return json;
}
- @RequestBody:强制请求的参数是json对象
4、SpringMVC对resultful风格的支持
需求:将访问路径改为第二种
/items/itemEdit.action?id=2 -------> /items/itemEdit/2/3
- 修改web.xml中的url-pattern
<!-- 拦截除jsp以外的所有资源 -->
<url-pattern>/</url-pattern>
- 修改方法的@RequestMapping注解
//通过占位符表示请求中的参数
@RequestMapping("/itemEdit/{id}")
public String itemEdit(@PathVariable("id")int id,Model model) {
Items items = itemsService.findById(id);
model.addAttribute("item", items);
return "editItem";
}
- 处理静态资源 (如果是静态资源,直接访问相应文件夹中的文件)
<!-- 如果是静态资源,直接访问相应文件夹中的文件 -->
<!-- location:请求的访问路径 mapping:映射出文件的路径 -->
<mvc:resources location="/js/" mapping="/js/**"/>
5、SpringMVC中的拦截器
-
定义:
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
-
使用
- 必须实现HandlerInterceptor接口
Public class HandlerInterceptor1 implements HandlerInterceptor{ /** * controller执行前调用此方法 * 返回true表示继续执行,返回false中止执行 * 这里可以加入登录校验、权限拦截等 */ @Override Public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub Return false; } /** * controller执行后但未返回视图前调用此方法 * 这里可在返回用户前对模型数据进行加工处理,比如这里加入公用信息以便页面显示 */ @Override Public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub } /** * controller执行后且视图返回后调用此方法 * 这里可得到执行controller时的异常信息 * 这里可记录操作日志,资源清理等 */ @Override Public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } }- 拦截器的配置
<!--拦截器 --> <mvc:interceptors> <!--多个拦截器,顺序执行 --> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.edu.springmvc.filter.HandlerInterceptor1"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.edu.springmvc.filter.HandlerInterceptor2"></bean> </mvc:interceptor> </mvc:interceptors>
本文深入探讨SpringMVC框架的高级应用,包括@RequestMapping注解的详细使用、文件上传的处理流程、JSON交互的实现、RESTful风格的支持及配置、以及拦截器的定义与使用。适合有一定SpringMVC基础的开发者进一步提升技能。
1412





