@RequestMapping

  通过@RequestMapping注解可以定义不同的处理器映射规则。

  @RequestMapping(value="item")或@RequestMapping("/item") 只有一个参数时,value可以省略不写,多个参数时,必须写value。value的值是一个数组可以指定多个url,@RequestMapping(value = { "itemList", "itemListAll" })。

  如果添加在类上面就是加一个前缀 /product/item

  第二个参数是请求方法限定,@RequestMapping(value = "itemList",method = RequestMethod.POST) 只可以post提交,是一个数组 可以写多个来同时支持get和post请求@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST}),如果不写就是所有请求都可以。

Controller方法返回值

  1.ModelAndView:可以添加model数据和view页面路径。 不建议使用

  2.String:返回页面路径 需要使用model形参携带数据 解耦

    @RequestMapping(value={"/haha","/hehe"})
public String hehe(Model model){
model.addAttribute("hehe","hehe");
return "list";
}

  3.void:需要使用request转发或response重定向 多用于异步请求

    @RequestMapping(value={"/haha","/hehe"})
public void hehe(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("list").forward(request,response);
}

  4.redirect:重定向一个路径

    @RequestMapping(value={"/haha","/hehe"})
public String hehe(){
return "redirect:/product/list";
}

  5.forward:转发 处理一个Controller之后继续下一个Controller处理

    @RequestMapping(value={"/haha","/hehe"})
public String hehe(){
return "forward:/product/edit";
}

异常处理

  springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过补货异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

自定义异常类

  为了区别不同的异常,通常根据异常类型进行区分,自定义一个系统异常。

package com.david.utils;

public class MyException extends Exception {
private String message; public MyException() {
} public MyException(String message) {
this.message = message;
} @Override
public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} }

自定义异常处理器

package com.david.utils;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer; public class CustomHandleException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { String msg; if(e instanceof MyException){ // 如果是自定义异常
msg = e.getMessage();
}else{
//运行时异常
Writer out = new StringWriter();
PrintWriter s = new PrintWriter(out);
e.printStackTrace(s);
msg = out.toString();
} //记录日志 发送邮件 ModelAndView mav = new ModelAndView();
mav.addObject("msg",msg);
mav.setViewName("error");
return mav;
}
}

配置异常处理器 springmvc.xml

    <!-- 配置全局异常处理器 -->
<bean id="customHandleException" class="com.david.utils.CustomHandleException"/>

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>500</title>
</head>
<body>
服务器发生异常 500
${msg}
</body>
</html>

测试异常

     throw new MyException("自定义异常");

上传图片

1.导入commons-fileupload.jar commons-io.jar两个包

2.配置springmvc.xml

    <!-- 文件上传,id必须设置为multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传大小 -->
<property name="maxUploadSize" value="5000000" />
</bean>

3.jsp页面

<form action="/product/upload" method="post" enctype="multipart/form-data">
<input type="file" name="imgFile">
<button type="submit">提交</button>
</form>

4.controller

@RequestMapping("/upload")
public String upload(MultipartFile imgFile,HttpServletRequest request) throws IOException {
// 获取文件名
String fileName = imgFile.getOriginalFilename();
// 获取图片后缀
String extName = fileName.substring(fileName.lastIndexOf("."));
if(extName.equals(".jpg")){
// 项目在容器中实际发布运行的根路径
String realPath=request.getSession().getServletContext().getRealPath("/"); // 自定义的文件名称
String trueFileName=String.valueOf(System.currentTimeMillis())+fileName;
// 设置存放图片文件的路径
String path=realPath+"/upload/" +trueFileName;
// 开始上传
imgFile.transferTo(new File(path));
} return "list";
}

json数据交互

  @RequestBody注解用于获取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。

  @ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为制定格式的数据如:xml,json等,通过response响应给客户端。

加入jar包:jackson-annotation.jar jackson-core.jar jackson-databind.jar

    @RequestMapping("/add")
@ResponseBody
public Product add(@RequestBody Product product){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
ProductMapper mapper = ac.getBean(ProductMapper.class);
mapper.addProduct(product);
return product;
}

json请求-contentType要application/json dataType要json

<script  src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
<script>
$(function(){
var data = {
name:'水果梨',
price:'18.4',
categoryId:3
};
$.ajax({
url:'/product/add',
data:JSON.stringify(data),
contentType:'application/json;charset=UTF-8',
type:"post",
dataType:"json",
success:function(data){
console.log(data)
}
})
})
</script>

springmvc.xml要开启注解

<mvc:annotation-driven />

restful支持

  restful就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

资源操作:使用post、delete、put、get 分别对应添加,删除,修改,查询不同方法对资源进行操作。

  使用restful

    查询 www.david.com/item/1 get请求

    新增 www.david.com/item post请求

    修改 www.david.com/item put请求

    删除 www.david.com/item/1 delete请求

1.这种url我们可以使用@RequstMapping("item/{id}") 来声明请求的url {id}是占位符,请求的url可以是item/1 或item/23

2.使用(@PathVariable() Integer id)获取url上的数据

    @RequestMapping("item/{id}")
public String getItemById(@PathVariable() Integer id){
System.out.print(id);
return "list";
}

测试地址:http://localhost:9999/product/item/13

拦截器

  springmvc中的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

定义拦截器,实现org.springframework.web.servlet.HandlerInterceptor接口

package com.david.utils;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class myInterceptor implements HandlerInterceptor {
/**
* controller执行前调用此方法
* 返回true表示继续执行,返回false终止执行 这里可以加入登陆校验、权限拦截等
*/
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("preHandler");
return false;
} /**
* controller执行后但未返回视图前调用此方法
* 这里可在返回用户前对模型数据进行加工处理 比如可以加入共用信息以便页面显示
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.print("postHandle");
} /**
* controller执行后且试图返回后调用此方法
* 这里可得到执行controller时的异常信息 也可以记录日志
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.print("afterCompletion");
}
}

配置拦截器 springmvc.xml-定义拦截规则即可

    <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/product/*"/>
<bean class="com.david.utils.myInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

springMVC上传图片,json交互(三)的更多相关文章

  1. springmvc实现json交互 -requestBody和responseBody

    json数据交互 1.为什么要进行json数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. 2. ...

  2. SpringMVC之JSON交互

    #什么是json? json是一种用于储存数据格式,是js脚本语言的子集. #json的作用? 它可以传递对象.数组等数据结构.如果是单个数据,则要用数组,不用对象,因为对象都是键值对的 方式去存储, ...

  3. SpringMVC的json交互

    一.注解说明 1.@RequestBody  作用:@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内 ...

  4. springmvc之json交互406异常(Not Acceptable)和415异常(Unsupported Media Type)

    一. 406异常(Not Acceptable) 1. 没有添加jackson-databind包2. 请求的url的后缀是*.html.在springmvc中如果请求的后缀是*.html的话,是不可 ...

  5. Ajax和SpringMVC之间JSON交互

    Ajax和SpringMVC之间的json数据传输有两种方式: 1.直接传输Json对象 2.将Json序列化成json字符串 1.直接传输Json对象 前端Ajax $(document).read ...

  6. 九 SpringMvc与json交互

    将json输出到页面: 1 加入jar包 2 配置Controller层,开启注解ResponseBody,将json发送到页面: 3 访问url 4 响应json,在形参列表里面加上注解

  7. SpringMvc 返回json的三种方式

    参考:https://blog.csdn.net/fupengyao/article/details/62220886

  8. SpringMVC详解(六)------与json交互

    Json(JavaScript Object Notation),它是一种轻量级数据交换格式,格式简单,易于读写,目前使用特别广泛.那么这篇博客我们主要谈谈在 SpringMVC 中,如何对 json ...

  9. SpringMVC学习--json

    简介 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便.比如:webservice接口,传输json数据. springmvc与json交互 @RequestB ...

  10. SpringMVC框架五:图片上传与JSON交互

    在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包,之前上传过的图片会丢失 为了解决这个问题:可以不在Tomcat下保存图片,而是另找一个目录. 上传图片: & ...

随机推荐

  1. Burnside引理和polay计数 poj2409 Let it Bead

    题目描述 "Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. As you ...

  2. Unittest加载执行用例的方法总结

    前言 说到测试框架,unittest是我最先接触的自动化测试框架之一了, 而且也是用的时间最长的, unittest框架有很多方法加载用例,让我们针对不同的项目,不同项目的大小及用例的多少自己选择加载 ...

  3. Redis防护建议

    1.Redis本身防护  (1)不要使用默认端口(6379)  (2)增加Redis用户名和密码  (3)在Redis绑定指定IP访问(位置配置文件[redis.config]中的bind节点)2.L ...

  4. 13.multi_match实现dis_max+tie_breaker

    主要知识点: 基于multi_match语法实现dis_max+tie_breaker     1.best_fields+tie_breaker GET /forum/article/_search ...

  5. 基本数据类型:布尔型(bool)和空值None

    一.布尔型(bool) 布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断: 一件事情成立就是True,不成立就是False,也可以将bool值归类为数字, 是因 ...

  6. php 漏洞分析

    addslashes() 函数返回在预定义字符之前添加反斜杠的字符串.

  7. (39.2). Spring Boot Shiro权限管理【从零开始学Spring Boot】

    (本节提供源代码,在最下面可以下载) (4). 集成Shiro 进行用户授权 在看此小节前,您可能需要先看: http://412887952-qq-com.iteye.com/blog/229973 ...

  8. LightOJ 1370 Bi-shoe and Phi-shoe

    /* LightOJ 1370 Bi-shoe and Phi-shoe http://lightoj.com/login_main.php?url=volume_showproblem.php?pr ...

  9. Flash-制作空心文字

    常常看到站点上用很多空心文字作为站点的名称或者特色项目的名称等等,那这些空心文字是怎么做出来的呢? 用Flash事实上非常快就能做出来.过程例如以下: (1)新建空白文件.工具箱中选择"文本 ...

  10. 读取到配置文件的C语言的接口实现

    /*********************************************************************  * Author  : Samson  * Date   ...