一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java SpringMVC攔截器與異常處理機制詳解分析

Java SpringMVC攔截器與異常處理機制詳解分析

2022-03-02 12:59龍弟-idea Java教程

SpringMVC是一種基于Java,實現了Web MVC設計模式,請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦。基于請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,SpringMVC也是要簡化

攔截器(interceptor)的作用

Spring MVC的攔截器類似于Servlet開發中的過濾器Filter,用于對處理器進行預處理和后處理。
將攔截器按一定的順序聯結成一條鏈,這條鏈稱為攔截器鏈(Interceptor Chain)。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。攔截器也是AOP思想的具體實現。

攔截器和過濾器區別

Java SpringMVC攔截器與異常處理機制詳解分析

 

攔截器快速入門

攔截器快速入門自定義攔截器很簡單,只有如下三步:

①創建攔截器類實現Handlerlnterceptor接口
②配置攔截器
③測試攔截器的攔截效果

①創建攔截器類實現Handlerlnterceptor接口

public class MyInterceptor1 implements HandlerInterceptor {
  //在目標方法執行之前 執行
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
      System.out.println("preHandle.....");
      String param = request.getParameter("param");
      if("yes".equals(param)){
          return true;
      }else{
          request.getRequestDispatcher("/error.jsp").forward(request,response);
          return false;//返回true代表放行  返回false代表不放行
      }
  }

  //在目標方法執行之后 視圖對象返回之前執行
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
      modelAndView.addObject("name","itheima");
      System.out.println("postHandle...");
  }

  //在流程都執行完畢后 執行
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
      System.out.println("afterCompletion....");
  }
}

②配置攔截器

   <mvc:interceptors>    
       <mvc:interceptor>
          <!--對哪些資源執行攔截操作-->
          <mvc:mapping path="/**"/>
          <bean class="com.longdi.interceptor.MyInterceptor1"/>
      </mvc:interceptor>
  </mvc:interceptors>

③測試攔截器的攔截效果

@Controller
public class TargetController {

  @RequestMapping("/target")
  public ModelAndView show(){
      System.out.println("目標資源執行......");
      ModelAndView modelAndView = new ModelAndView();
      modelAndView.addObject("name","itcast");
      modelAndView.setViewName("index");
      return modelAndView;
  }

}

 

案例:用戶登錄權限控制

需求:用戶沒有登錄的情況下,不能對后臺菜單進行訪問操作,點擊菜單跳轉到登錄頁面,只有用戶登錄成功后才能進行后臺功能的操作

public class PrivilegeInterceptor implements HandlerInterceptor {

  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
      //邏輯:判斷用戶是否登錄  本質:判斷session中有沒有user
      HttpSession session = request.getSession();
      User user = (User) session.getAttribute("user");
      if(user==null){
          //沒有登錄
          response.sendRedirect(request.getContextPath()+"/login.jsp");
          return false;
      }

      //放行  訪問目標資源
      return true;
  }
}

spring-mvc.xml:

<mvc:interceptors>
  <mvc:interceptor>
      <!--配置對哪些資源執行攔截操作-->
      <mvc:mapping path="/**"/>
      <!--配置哪些資源排除攔截操作-->
      <mvc:exclude-mapping path="/user/login"/>
      <bean class="com.longdi.interceptor.PrivilegeInterceptor"/>
  </mvc:interceptor>
</mvc:interceptors>

Java SpringMVC攔截器與異常處理機制詳解分析

Java SpringMVC攔截器與異常處理機制詳解分析

UserServiceImpl

  public User login(String username, String password) {
      try {
          User user = userDao.findByUsernameAndPassword(username,password);
          return user;
      }catch (EmptyResultDataAccessException e){
          return null;
      }
  }

UserService

  User login(String username, String password);

UserDaoImpl

  public User findByUsernameAndPassword(String username, String password) throws EmptyResultDataAccessException {
      User user = jdbcTemplate.queryForObject("select * from sys_user where username=? and password=?", new BeanPropertyRowMapper<User>(User.class), username, password);
      return user;
  }

UserDao

  User findByUsernameAndPassword(String username, String password);

 

攔截器方法說明

Java SpringMVC攔截器與異常處理機制詳解分析

 

SpringMVC異常處理

異常處理的思路

系統中異常包括兩類∶預期異常和運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,后者主要通過規范代碼開發、測試等手段減少運行時異常的發生。
系統的Dao、Service、Controller出現都通過throws Exception向上拋出,最后由SpringMVC前端控制器交由異常處理器進行異常處理,如下圖:

Java SpringMVC攔截器與異常處理機制詳解分析

異常處理兩種方式

1、使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver

SpringMVC已經定義好了該類型轉換器,在使用時可以根據項目情況進行相應異常與視圖的映射配置

Java SpringMVC攔截器與異常處理機制詳解分析

2、實現Spring的異常處理接口HandlerExceptionResolver自定義自己的異常處理器

①創建異常處理器類實現HandlerExceptionResolver

public class MyExceptionResolver implements HandlerExceptionResolver {

  /*
      參數Exception:異常對象
      返回值ModelAndView:跳轉到錯誤視圖信息
   */
  public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
      ModelAndView modelAndView = new ModelAndView();

      if(e instanceof MyException){
          modelAndView.addObject("info","自定義異常");
      }else if(e instanceof ClassCastException){
          modelAndView.addObject("info","類轉換異常");
      }

      modelAndView.setViewName("error");

      return modelAndView;
  }
}

②配置異常處理器

  <!--自定義異常處理器-->
  <bean  class="com.longdi.resolver.MyExceptionResolver"/>

③編寫異常頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>Title</title>
</head>
<body>
  <h1>通用的錯誤提示頁面</h1>
  <h1>${info}</h1>
</body>
</html>

④測試異常跳轉

Java SpringMVC攔截器與異常處理機制詳解分析

Java SpringMVC攔截器與異常處理機制詳解分析

到此這篇關于Java SpringMVC攔截器與異常處理機制詳解分析的文章就介紹到這了,更多相關Java SpringMVC內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_48838340/article/details/120890919

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人私人影院www片免费高清 | 国产小视频免费看 | 四虎免费看片 | 免费高清www动漫视频播放器 | 深夜影院深a | 果冻传媒和91制片厂网站软件 | 99久久免费视频 | 国产成人精品免费视频软件 | 明星ai智能人脸替换造梦在线播放 | 护士柔佳 | 四虎网站在线 | 女生被草 | 15同性同志18| 成人影院在线观看视频 | 国产一久久香蕉国产线看观看 | 性刺激欧美三级在线现看中文 | 成人男女网免费 | 婷婷99视频精品全部在线观看 | 色综合图区 | 日韩免费视频播放 | 青丝视频免费版在线看 | 国产私人影院 | yellow视频在线观看免费 | 欧美一二区视频 | mmkk在线看片 | 操日日 | 国产 日韩 一区 | 福利国模私拍视频在线观看 | 红色毛片| 日本在线视 | 操男孩| 亚洲精品动漫在线观看 | 国产一区二区三区欧美精品 | 欧洲男同直粗无套播放视频 | 免费视频精品一区二区三区 | 精品国产一级在线观看 | 国产91在线精品 | 深夜福利一区 | 视频免费 | meyd–456佐山爱在线播放 | 欧美一区二区三区高清不卡tv |