SpringMVC高级开发功能实现过程解析

一. 全局的异常处理器

1、编写一个自定义的异常类, 区分哪些异常是系统异常, 哪些异常是用户不正当操作的异常

//继承Exception
public class UserException extends Exception{

  private static final long serialVersionUID = -8469276157483476569L;

  public UserException() {
    super();
  }

  public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
    super(message, cause, enableSuppression, writableStackTrace);
  }

  public UserException(String message, Throwable cause) {
    super(message, cause);
  }

  public UserException(String message) {
    super(message);
  }

  public UserException(Throwable cause) {
    super(cause);
  }

2、编写一个全局异常处理器, 这个处理器必须实现HandlerExceptionResolver

//将异常处理类交给spring容器管理
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
  @Override
  public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
      Exception ex) {
    // ex 接收是抛出的异常对象
    // 分类处理, 自定义异常, 直接响应 错误信息
    // 系统异常, 响应的: 系统错误, 请联系管理员
    ModelAndView modelAndView = new ModelAndView();if (ex instanceof UserException) {//用户异常
      modelAndView.addObject("error", ex.getMessage());
    } else {//系统异常
      modelAndView.addObject("error", "系统错误,联系管理员!!!");
    }
    modelAndView.setViewName("error");
    return modelAndView;
  }

3、 在springMVC的配置文件中配置全局的异常处理器

①使用Component ②在springmvc配置文件中手动添加<bean/>

4、扫描这个exception包中的注解

二、响应json支持

  AJAX: 要求后台响应的是数据, 后台重定向,转发到一个页面, 把这个页面当成一个数据,响应给ajax,

后台: java对象

前台: ajax--> js对象, 使用json, 需要后台把java对象转换为json格式的字符串,

  Servlet: 使用 json-lib, 手动调用JSONObject

  SpringMVC转换json, 使用: 1)jackson *** 2) fastjson

1、导入jackson的依赖: 注意添加完把<type>bundle</type>删除,会附带导入所需要的jar

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.10.0</version>
</dependency>

  Controller方法的返回值 java对象, 需要配合@ResponseBody, 把方法的返回值作为数据响应给前端, ****

  如果是一个java对象,而且导入json的相关依赖(jaskson/fastJson), 调用转换器, 把java对象转换为json格式字符串响应给前端

把日期转换为 指定格式的字符串

@DateTimeFormat(pattern = "yyyy-MM-dd") // SpringMVC的注解, 把前端的字符串转换为Date
@JsonFormat(pattern = "yyyy-MM-dd") // jackson的注解, 把Date转换为json指定格式的字符串

@JsonFormat(pattern = "yyyy-MM-dd")

private Date brithday;[/code]

忽略某个属性转换为json

@JsonIgnoreprivate String password;

@RequestBody:主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),只能是post提交,get没有请求体

注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。

//前端发送json, 响应json
@RequestMapping("/queryUserByCondition.action")
@ResponseBody
public User  queryUserByCondition( @RequestBody User user) throws Exception{
  return user;
}

前端代码

//请求的是json
    function requestJson(){
      //请求参数是json
      // 默认情况下, data中json, 变成js对象, 变成key/value
      //contentType:"application/json;charset=utf-8", 改为json 格式的传输
      $.ajax({
      url:"${pageContext.request.contextPath }/user/queryUserByCondition.action",
      type:"post",
      //data:"id=2&username=张三&sex=男&brithday=1999-12-21",
      contentType:"application/json;charset=utf-8",
      data:'{"id":3,"username":"李四","sex":"男","brithday":"2012-12-12"}',
      success:function(rs){
        alert(rs.username+"-->"+rs.sex); // json 字符串转换为js对象
      },
      dataType:"json"
        });
    }

三、文件上传

1、对页面的要求:

form 的method:postform的enctype: 默认值: application/x-www-form-urlencoded 一定设置为: multipart/form-data使用<input type=”file”> 选择文件

2、对页面的要求:

  导入文件上传的依赖: commons-fileupload commons-io

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.4</version>
</dependency>

3、在springMVC配置文件上传的解析器

<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 <!-- 设置最大的上传文件大小 :10M-->
<property name="maxUploadSize" value="10485760"></property>
</bean>

注意:bean的id一定为multipartResolver,否则获取不到数据

4、文件代码

@PostMapping("/addUser.action")
  public String addUser(User user, MultipartFile photo,Model model) throws Exception{
    if(photo == null) {
      throw new UserException("请选择图片");
    }else {
      //保存文件
      String savePath = "D:\\upload";
      //File类
      File pathFile = new File(savePath);
      if(!pathFile.exists()) {
        //创建文件夹
        pathFile.mkdirs();
      }
      //文件名取名: 时间戳   UUID
      //获取上传文件的后缀名
      String uploadFileName = photo.getOriginalFilename();
      String suffix = uploadFileName.substring(uploadFileName.lastIndexOf("."));
      String saveFilename = UUID.randomUUID().toString().replace("-", "").toUpperCase()+suffix;
      //保存
      photo.transferTo(new File(savePath,saveFilename));
      //给user对象的photoPath属性赋值
      user.setPhotoPath(saveFilename);

      //调用业务层,保存用户
      userService.saveUser(user);
      model.addAttribute("msg", "保存成功");
    }
    return "msg";
  }

  <img src="/img/${user.photoPath }"/>

需要在tomcat中配置映射路径

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringMVC+EasyUI实现页面左侧导航菜单功能

    1. 效果图展示 2. 工程目录结构 注意: webapp下的resources目录放置easyui和js(jQuery文件是另外的) 3. 代码 index.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>学生成绩管理系统 管理员后台</title> <link re

  • SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    今天做了文件的上传下载,小小总结一下,基本的web项目建立及SpringMVC框架搭建此处不详细写出来了. 上传form: <form id="uploadfiles" enctype="multipart/form-data"> <input type="file" multiple="multiple" id="file_upload" name="file_upload&q

  • SpringMVC实现表单验证功能详解

    本章节内容很丰富,主要有基本的表单操作,数据的格式化,数据的校验,以及提示信息的国际化等实用技能. 首先看效果图 项目结构图 接下来用代码重点学习SpringMVC的表单操作,数据格式化,数据校验以及错误提示信息国际化.请读者将重点放在UserController.java,User.java,input.jsp三个文件中. maven 项目必不可少的pom.xml文件.里面有该功能需要的所有jar包. <?xml version="1.0" encoding="UTF

  • 利用SpringMVC和Ajax实现文件上传功能

    个人根据相关资料实现利用SpringMVC和Ajax实现文件上传功能: 环境: 1.JDK1.7 2.maven3.3.9 3.Tomcat7 第一步: 导入相关jar包: 第二步: 配置springmvc-config.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xml

  • SpringMVC整合websocket实现消息推送及触发功能

    本文为大家分享了SpringMVC整合websocket实现消息推送,供大家参考,具体内容如下 1.创建websocket握手协议的后台 (1)HandShake的实现类 /** *Project Name: price *File Name: HandShake.java *Package Name: com.yun.websocket *Date: 2016年9月3日 下午4:44:27 *Copyright (c) 2016,578888218@qq.com All Rights Rese

  • layui的数据表格+springmvc实现搜索功能的例子

    如下所示: 主要在前端页面加: <div class="demoTable"> 搜索ID: <div class="layui-inline"> <input class="layui-input" name="keyWord" id="keyWord" autocomplete="off"> </div> <span class=&

  • Spring MVC+MyBatis+MySQL实现分页功能实例

    前言 最近因为工作的原因,在使用SSM框架实现一个商品信息展示的功能,商品的数据较多,不免用到分页,查了一番MyBatis分页的做法,终于是实现了,在这里记录下来分享给大家,下面来一起看看详细的介绍: 方法如下:  首先写一个分页的工具类,定义当前页数,总页数,每页显示多少等属性. /** * 分页 工具类 */ public class Page implements Serializable { private static final long serialVersionUID = -22

  • SpringMVC多个文件上传及上传后立即显示图片功能

    多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话MultipartFile类不能初始化,它不支持数组 package com.meng.upload; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.servlet.http.HttpServletRe

  • SpringMVC高级开发功能实现过程解析

    一. 全局的异常处理器 1.编写一个自定义的异常类, 区分哪些异常是系统异常, 哪些异常是用户不正当操作的异常 //继承Exception public class UserException extends Exception{ private static final long serialVersionUID = -8469276157483476569L; public UserException() { super(); } public UserException(String me

  • springmvc处理模型数据Map过程解析

    这篇文章主要介绍了springmvc处理模型数据Map过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 SpringmvcTest.java @RequestMapping("/springmvc") @Controller public class SpringmvcTest { private static final String SUCCESS = "success"; @RequestMapping

  • SpringMVC使用@PathVariable接收参数过程解析

    PathVariable 映射 URL 绑定的占位符 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中. 使用MVC时,总是出现一些问题,当然都是使用造成的. 今天遇到一个问题,使用@PathVariable

  • 通过实例了解JavaBean开发及使用过程解析

    一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用,有以下的优点: 1.可将HTML和Java代码分离,这主要是为了日后维护的方便.如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难. 2.可利用JavaBean的优点.将日常用到的程序写成JavaBean组件,当在JSP要使用时,只要调用J

  • 微信公众号平台接口开发 获取access_token过程解析

    新建Asp.net MVC 4.0项目 WeChatSubscript是项目UI层 WeChatTools是封装操作访问公众号接口的一些方法类库 获取AccssToken 我们要的得到AccessToken,这是所有接口访问的基础,我们看看官方给出的接口调用文档 很简单明了,grant_type=client_credential,这是固定的不会变 appid与secret就是前面一章我叫大家记起来的那个认证口令数据. 下边我们来实现这个功能,新建WeCharBase.cs public cla

  • SpringSecurity rememberme功能实现过程解析

    记住我功能原理分析 还记得前面咱们分析认证流程时,提到的记住我功能吗? 现在继续跟踪找到AbstractRememberMeServices对象的loginSuccess方法: 再点进去上面if判断中的rememberMeRequested方法,还在当前类中: 如果上面方法返回true,就表示页面勾选了记住我选项了. 继续顺着调用的方法找到PersistentTokenBasedRememberMeServices的onLoginSuccess方法: 注意name和value属性的值不要写错哦!

  • Springmvc获取前台请求数据过程解析

    1)基本数据类型或String,在方法参数中定义参数,参数名与请求传递数据名一致即可自动封装: // RequestMapping:指定方法对应的请求地址 //return:页面地址,表示方法执行完成之后跳转到对应的页面(转发) //springmvc:接收请求参数,直接在方法的参数中定义名称与传递参数名一致的形参即可 //name:会自动接收请求传递的name值 @RequestMapping("/hello") public String hello(String name,Int

  • SpringMVC如何访问WEB-INF jsp过程解析

    当输入localhost:8080/项目名 浏览器弹出不知道神马错误 The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application 出现这个问题百度的下说是将jstl-impl.jar包放到lib目录下就可以解决了, 尝试后确实可以解决问题. 然而,当我把这个jar包从我项目中删除后再访

  • Java双向链表倒置功能实现过程解析

    题目要求:Java实现一个双向链表的倒置功能(1->2->3 变成 3->2->1) 提交:代码.测试用例,希望可以写成一个Java小项目,可以看到单元测试部分 该题目的代码,已经放到了我的github上,地址为:https://github.com/jiashubing/alibaba-linkedlist-reversed.git 最关键的是自定义节点Node 和自定义双向链表MyLinkedList 两个类,倒置的方法放在自定义链表类里reversed() ,具体的说明都在代

  • SpringMVC JSON数据交互实现过程解析

    为什么使用JSON进行数据交互? JSON数据格式比较简单.解析比较方便,在接口调用及HTML页面Ajax调用时较常用. JSON交互方式 请求是Key/Value,响应是JSON(推荐使用) 请求是JSON,响应是JSON 依赖包 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <ver

随机推荐