1. 程式人生 > 程式設計 >SpringMVC高階開發功能實現過程解析

SpringMVC高階開發功能實現過程解析

一. 全域性的異常處理器

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支援

SpringMVC高階開發功能實現過程解析

  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中配置對映路徑

SpringMVC高階開發功能實現過程解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。