最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC高級開發(fā)功能實現(xiàn)過程解析

 更新時間:2020年06月19日 14:47:55   作者:64Byte  
這篇文章主要介紹了SpringMVC高級開發(fā)功能實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一. 全局的異常處理器

1、編寫一個自定義的異常類, 區(qū)分哪些異常是系統(tǒng)異常, 哪些異常是用戶不正當操作的異常

//繼承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、編寫一個全局異常處理器, 這個處理器必須實現(xiàn)HandlerExceptionResolver

//將異常處理類交給spring容器管理
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
  @Override
  public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
      Exception ex) {
    // ex 接收是拋出的異常對象
    // 分類處理, 自定義異常, 直接響應 錯誤信息
    // 系統(tǒng)異常, 響應的: 系統(tǒng)錯誤, 請聯(lián)系管理員
    ModelAndView modelAndView = new ModelAndView();if (ex instanceof UserException) {//用戶異常
      modelAndView.addObject("error", ex.getMessage());
    } else {//系統(tǒng)異常
      modelAndView.addObject("error", "系統(tǒng)錯誤,聯(lián)系管理員?。?!");
    }
    modelAndView.setViewName("error");
    return modelAndView;
  }

3、 在springMVC的配置文件中配置全局的異常處理器

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

4、掃描這個exception包中的注解

二、響應json支持

  AJAX: 要求后臺響應的是數(shù)據(jù), 后臺重定向,轉(zhuǎn)發(fā)到一個頁面, 把這個頁面當成一個數(shù)據(jù),響應給ajax,

后臺: java對象

前臺: ajax--> js對象, 使用json, 需要后臺把java對象轉(zhuǎn)換為json格式的字符串,

  Servlet: 使用 json-lib, 手動調(diào)用JSONObject

  SpringMVC轉(zhuǎn)換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, 把方法的返回值作為數(shù)據(jù)響應給前端, ****

  如果是一個java對象,而且導入json的相關依賴(jaskson/fastJson), 調(diào)用轉(zhuǎn)換器, 把java對象轉(zhuǎn)換為json格式字符串響應給前端

把日期轉(zhuǎn)換為 指定格式的字符串

@DateTimeFormat(pattern = "yyyy-MM-dd") // SpringMVC的注解, 把前端的字符串轉(zhuǎn)換為Date
@JsonFormat(pattern = "yyyy-MM-dd") // jackson的注解, 把Date轉(zhuǎn)換為json指定格式的字符串

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

private Date brithday;[/code]

忽略某個屬性轉(zhuǎn)換為json

@JsonIgnoreprivate String password;

@RequestBody:主要用來接收前端傳遞給后端的json字符串中的數(shù)據(jù)的(請求體中的數(shù)據(jù)的),只能是post提交,get沒有請求體

注解用于讀取http請求的內(nèi)容(字符串),通過springmvc提供的HttpMessageConverter接口將讀到的內(nèi)容轉(zhuǎn)換為json、xml等格式的數(shù)據(jù)并綁定到controller方法的參數(shù)上。

//前端發(fā)送json, 響應json
@RequestMapping("/queryUserByCondition.action")
@ResponseBody
public User  queryUserByCondition( @RequestBody User user) throws Exception{
  return user;
}

前端代碼

//請求的是json
    function requestJson(){
      //請求參數(shù)是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 字符串轉(zhuǎn)換為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,否則獲取不到數(shù)據(jù)

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()) {
        //創(chuàng)建文件夾
        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);
      
      //調(diào)用業(yè)務層,保存用戶
      userService.saveUser(user);
      model.addAttribute("msg", "保存成功");
    }
    return "msg";
  }

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

需要在tomcat中配置映射路徑

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Spring的@Conditional詳解

    Spring的@Conditional詳解

    這篇文章主要介紹了Spring的@Conditional詳解,給想要注入Bean增加限制條件,只有滿足限制條件才會被構造并注入到Spring的IOC容器中,通常和@Bean注解一起使用,需要的朋友可以參考下
    2024-01-01
  • 解決Intellij IDEA運行報Command line is too long的問題

    解決Intellij IDEA運行報Command line is too long的問題

    這篇文章主要介紹了解決Intellij IDEA運行報Command line is too long的問題,本文通過兩種方案給大家詳細介紹,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 詳解Java匿名內(nèi)部類

    詳解Java匿名內(nèi)部類

    這篇文章介紹了Java匿名內(nèi)部類的實現(xiàn),對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • Spring 自動裝配的二義性實例解析

    Spring 自動裝配的二義性實例解析

    這篇文章主要介紹了Spring 自動裝配的二義性實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java8的default和static關鍵字的使用講解

    Java8的default和static關鍵字的使用講解

    今天小編就為大家分享一篇關于Java8的default和static關鍵字的使用講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • MyBatis-Plus更新對象時將字段值更新為null的四種常見方法

    MyBatis-Plus更新對象時將字段值更新為null的四種常見方法

    MyBatis-Plus 是一個 MyBatis 的增強工具,在簡化開發(fā)、提高效率方面表現(xiàn)非常出色,而,在使用 MyBatis-Plus 更新對象時,默認情況下是不會將字段值更新為 null 的,如果你需要將某些字段的值更新為 null,有幾種方法可以實現(xiàn),本文將介紹幾種常見的方法
    2024-11-11
  • Java中的比較器詳細解析

    Java中的比較器詳細解析

    這篇文章主要介紹了Java中的比較器詳細解析,基本數(shù)據(jù)類型的數(shù)據(jù)(除boolean類型外)需要比較大小的話,直接使用比較運算符即可,但是引用數(shù)據(jù)類型是不能直接使用比較運算符來比較大小的,需要的朋友可以參考下
    2023-11-11
  • 解決使用IDEA時跳轉(zhuǎn)到.class的問題

    解決使用IDEA時跳轉(zhuǎn)到.class的問題

    這篇文章主要介紹了解決使用IDEA時跳轉(zhuǎn)到.class的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java神操作:圖片快速轉(zhuǎn)換PDF秘籍

    Java神操作:圖片快速轉(zhuǎn)換PDF秘籍

    想掌握Java神操作,將圖片快速轉(zhuǎn)換成PDF嗎?這份秘籍將一步步引導你,輕松實現(xiàn)這一目標,別等了,跟著我們一起,解鎖這項超實用技能吧!
    2024-02-02
  • springboot驗證碼的生成與驗證的兩種方法

    springboot驗證碼的生成與驗證的兩種方法

    本文主要介紹了springboot驗證碼的生成與驗證的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

昭苏县| 浪卡子县| 大足县| 五莲县| 富顺县| 波密县| 凭祥市| 三台县| 双牌县| 九龙坡区| 砚山县| 乌拉特中旗| 榕江县| 昌都县| 营山县| 沂南县| 莆田市| 翼城县| 扎囊县| 怀集县| 黄山市| 潍坊市| 祁连县| 喜德县| 建宁县| 社旗县| 曲周县| 安化县| 南投县| 广汉市| 辽中县| 商河县| 庆阳市| 莱芜市| 阳江市| 敦煌市| 环江| 仙桃市| 广元市| 凯里市| 正定县|