Spring MVC第五讲(SpringMVC-异常处理、SpringMVC-图片上传功能、SpringMVC-JSON数据交互、SpringMVC-Restful风格)

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值