SpringMVC-异常处理
在项目运行过程中,可能会出现一些预知异常和运行时异常
预知异常:程序员知道的可能会出现的异常
运行时异常:在程序运行过程中出现的未知的异常
1、在项目中无论是dao、service、controller都有可能出现异常
2、项目是打成war包放在tomcat服务器上的,tomcat在linux系统上部署的
步骤:
1、创建异常类实现HandlerExceptionResolver
public class MyException implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(
HttpServletRequest request, //请求信息
HttpServletResponse response, //相应信息
Object obj,//异常信息 包名+类名+方法名+参数类型
Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("error", "未知异常");
mav.setViewName("error");
return mav;
}
}
2、配置异常处理器让SpringMVC识别(spring-mvc.xml)
<bean id="handlerExceptionResolver" class="cn.yunhe.exception.MyException"></bean>
3、创建一个jsp页面用于出现错误时呈现给用户看的内容
SpringMVC-图片上传功能
如果按照之前jsp的上传形式将图片文件放在打包后的tomcat目录下,那么一旦项目重新打包,那之前的图片就不存在了,所以通常会将图片存储在一个图片服务器上等,此处模拟,将图片存储本地磁盘上的某个文件夹中(图片服务器:将图片存储在linux系统中的某个文件夹中)
1、需要给到一个虚拟路径用于访问
2、上传图片-d:\asset目录
表单中要求请求方式为post,需要加上enctype=“multipart/form-data”
<form class="layui-form" action="../user/updateUserCustom2.do" enctype="multipart/form-data" method="post">
<div class="layui-form-item">
<label for="L_email" class="layui-form-label">
<span class="x-red">*</span>用户ID</label>
<div class="layui-input-inline">
<input type="text" id="uid" name="user.uid" value="${user.uid}" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="L_username" class="layui-form-label">
<span class="x-red">*</span>用户姓名</label>
<div class="layui-input-inline">
<input type="text" id="uname" name="user.uname" value="${user.uname}" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="L_pass" class="layui-form-label">
<span class="x-red">*</span>联系方式</label>
<div class="layui-input-inline">
<input type="text" id="phone" name="user.phone" value="${user.phone}" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label">
<span class="x-red">*</span>家庭住址</label>
<div class="layui-input-inline">
<input type="text" id="address" name="user.address" value="${user.address}" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label">
<span class="x-red">*</span>上传图片</label>
<div class="layui-input-inline">
<input type="file" name="multipartFile">
</div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label"></label>
<button class="layui-btn" lay-filter="add" lay-submit="">修改</button></div>
</form>
3、在controller层接收请求解析图片(注意:需要jar/ commons-fileupload.jar commons-io.jar)
@RequestMapping("/updateUserCustom2.do")
public ModelAndView updateUserCustom2(Custom custom,MultipartFile multipartFile) throws Exception {
ModelAndView mv = new ModelAndView();
//避免名字冲突,给上传的图片生成一个随机名字
String name = UUID.randomUUID().toString().replace("-", "");
String fileName = multipartFile.getOriginalFilename();
String sufix = fileName.substring(fileName.lastIndexOf("."), fileName.length());
String newName = name + sufix;
//将图片写入到指定的路径中
multipartFile.transferTo(new File("D:\\asset\\"+newName));
mv.addObject("picName", newName);
mv.setViewName("show");
return mv;
}
4、配置MultipartFile类型解析(spring-mvc.xml)
<!-- 配置multipartResolver解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传图片的最大值 -->
<property name="maxUploadSize" value="5242880"></property>
</bean>
5、根据配置的虚拟路径在页面中回显
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src="/pic/${picName }"/>
</body>
</html>
SpringMVC-JSON数据交互
流程:前台发送一个ajax请求,携带一个json数据,后台接收请求,直接将发送过来的json数据映射成一个实体类对象,再将接收到的数据以json的形式返回给前端
步骤:
1、需要给到SpringMVC使用的jackson相关的jar包
2、前端发送一个ajax请求
<button>click to ajax</button>
<script>
$('button').click(function(){
var jsonData = {
"uid":1,
"uname":"haha",
"upwd":"123456",
"phone":"1234564878",
"address":"我的期待您的你"
};
$.ajax({
url:"/05-09/user/insertMethod.do",
type:"post",
//回调类型,后台返回给前台的数据类型
dataType:"json",
//发送给后台的数据类型
contentType:"application/json;charset=utf-8",
data:JSON.stringify(jsonData),
success:function(data){
console.log(data.uname);
}
})
})
</script>
3、后台接收请求并进行数据处理
//@RequestBody将前台发送过来的json数据映射成Java对象
//@ResponseBody将Java对象转换成json字符串返回
@RequestMapping("/insertMethod.do")
@ResponseBody
public User insertMethod(@RequestBody User user) {
System.out.println(user);
return user;
}
SpringMVC-Restful风格
http://localhost:8080/05-09/user/queryUser.do?uid=1
http://localhost:8080/05-09/user/queryUser.do/1
@RequestMapping("/{id}/query.do")
@ResponseBody
public User queryUser2(@PathVariable("id") Integer id) {
User user = userDao.queryUser(id);
return user;
}