亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Springmvc中的轉發重定向和攔截器的示例

2024-07-14 08:40:44
字體:
來源:轉載
供稿:網友

本文介紹了Springmvc中的轉發重定向和攔截器的示例,分享給大家,具體如下:

可變參數在設計方法時,使用 數據類型... 來聲明參數類型,例如: public static void function(int... numbers)

在實現方法體時,可變參數是作為數組來處理

public class Test{  public static void main(String[] args){ System.out.println(Test.sum(1,2,3)); System.out.println(Test.sum(1,2,3,4,54)); } public static int sum(int... numbers){ int sum=0;  for(int i=0;i<numbers.length;i++){  sum+=numbers[i]; } return sum; }}

注意:每個方法中,最多只允許存在1個可變參數,并且,如果存在 可變參數 ,那么必須是最后一個參數

轉發和重定向

在控制器內部處理請求的方法中,默認返回字符串時的處理方式是 轉發 ,轉發的值是 view 組件的名稱,比如 return "login" ,實質上會根據視圖解析器( ViewResolver )得到最終負責顯示的頁面,而通過 return redirect:路徑 這樣的語法表示重定向,在 redirect: 右側的內容是路徑,這個路徑通常使用相對的路徑,是以當前客戶端的地址欄中的路徑為標準進行參考,例如當前的地址為: http://localhost:8080/Project/user/reg.do ,然后 return "redirect:login.do" ,則會重定向到 http://localhost:8080/Project/user/login.do ,如果 return "redirect:/main/index.do" 或者 return "redirect:../main/index.do" ,則會重定向到 http://localhost:8080/Project/main/index.do

forward:

默認的方式,但是也是可以使用 return "forward:login"
返回的一定是一個 view ,經過視圖解析器之后會轉發到指定的視圖

redirect:

重定向 : return "redirect:login.do"
返回的是一個Controller方法的路徑,而不是一個view,這個不會經過視圖解析器,而是直接跳轉

實例

@RequestMapping(value="/handle_reg.do", method=RequestMethod.POST) public String handleReg(User user,ModelMap map){ try {  userService.reg(user);  System.out.println("注冊成功!");  return "redirect:login.do"; //重定向到login.do這個控制方法,login.do對應的就是轉發到login.jsp } catch (UsernameConflictException e) {  System.out.println(e.getMessage());  map.put("errorMessage", e.getMessage());  return "error"; } }  @RequestMapping(value="login.do") public String handleLogin(){ return "login"; }

攔截器

基本概念

  1. 攔截器( interceptor )是springmvc中的一個 組件 ,是運行在 DispatcherServlet 之后,運行在 Controller 之前的
  2. 攔截器可以決定對某些符合條件的進行 攔截 或者 放行 ,所以,通常用于對一些具有相同運行條件的功能進行約束

使用攔截器

自定義攔截器類

創建一個攔截類( DemoInterceptor ),實現 HandlerInterceptor 接口

public class DemoInterceptorimplements HandlerInterceptor{ /** * 處理器執行之前調用 * @param request HttpServletRequest對象,可以獲取請求參數等等 * @param response HttpServletResponse對象 * @param Handler 攔截器的Controller對象 * @return 如果返回false,就會中斷處理流程,不會處理后續的攔截器和Controller。如果返回true,則會執行后續的攔截器和處理器 */ public boolean preHandle(HttpServletRequest request,  HttpServletResponse response, Object handler) throws Exception {  System.out.println("DemoInterceptor的PreHandler執行"); return true; } /** * 處理器執行之后調用,跳轉到指定視圖之前調用 * @param request HttpServletRequest對象 * @param response HttpServletResponse對象 * @param Handler 攔截器的Controller對象 * @param modelAndView ModelAndView對象,其中存放的是處理結果和視圖的信息 */ public void postHandle(HttpServletRequest request,  HttpServletResponse response, Object handler,  ModelAndView modelAndView) throws Exception { /**  * 1. 可以自己設計邏輯,例如某些情況下返回false,返回true  * 2. 返回true表示執行后續的處理器和攔截器,返回false會中斷處理流程  */ System.out.println("handler:"+handler); System.out.println("DemoInterceptor的PostHandler執行"); //設置視圖的名稱,那么執行完成之后就會條跳轉到index.jsp頁面 //modelAndView.setViewName("index"); }  /** * 請求處理完成之后調用 */ public void afterCompletion(HttpServletRequest request,  HttpServletResponse response, Object handler, Exception ex)  throws Exception { System.out.println("DemoInterceptor的afterCompletion執行"); }}

在springmvc的配置文件中配置

  1. 配置攔截的路徑: <mvc:mapping path=""/> 可以使用通配符 * 比如: /** 匹配所有的路徑, /user/* 只能匹配 /user 的子路徑
  2. 配置不攔截的路徑 : <mvc:exclude-mapping path=""/> 可以配置 多個
  3. 配置攔截器類( bean ) : <bean class="">

配置

必須按照上面的順序配置,否則將會報錯

<!-- 配置攔截器,其中可以配置多個攔截器 --><mvc:interceptors>     <mvc:interceptor>  <!-- 配置攔截器的攔截路徑,攔截/user下的全部處理器方法映射  比如:http://localhost:8080/Springmvc/user/login.do這個請求就會被攔截  --> <mvc:mappingpath="/user/*"/>  <!-- 配置不被該攔截器攔截器的controller方法,這個是可選配置  比如:http://localhost:8080/Springmvc/user/index.do將不會被攔截器 --> <mvc:exclude-mappingpath="/user/index.do"/>       <mvc:exclude-mappingpath="/user/login.do"/>   <!-- 配置攔截器的bean,指定的是全類名 --> <beanclass="cn.tedu.spring.interceptor.DemoInterceptor"></bean> </mvc:interceptor>    </mvc:interceptors>

其中實現的方法

public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)

  1. 該方法在 controller 處理請求之前執行
  2. 如果返回的 false ,則會中斷處理流程,不會執行后續的攔截器和處理器,返回 true 會執行后續的攔截器和處理器
  3. 可以自行設計邏輯返回 false 或者 true

public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView)

  1. 處理器執行之后,視圖處理之前調用,此時可以通過對 ModelAndView 對數據和視圖進行處理
  2. 當然需要 prehandler 方法返回 true 才會執行

public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)

  1. 所有的請求處理完畢之后調用,比如性能監控中,我們可以在此記錄結束時間和消耗時間,還可以進行一些資源處理
  2. 當然需要 prehandler 方法返回 true 才會執行

演示登錄檢查

  1. 登錄檢查: 當涉及到用戶信息的修改,查看什么的,必須要驗證是否登錄,因此需要設計攔截器驗證登錄
  2. 先設定登錄數據,即: 在 login.jsp 中添加登錄按鈕,登錄完成之后,需要自己定義一個標記存儲在 session 中,比如 用戶的id 或者 用戶的對象
  3. 我們使用用戶的 id 作為標記驗證是否已經的登錄,如果用戶登錄成功,會在 session 中添加一個 uid 的屬性
  4. 用戶退出登錄使用 session.invalidate(); 清除 session ,并且重定向到 登錄界面

自定義攔截器(LoginInterceptor)

具體流程在 prehandler 方法中寫的很清楚

public class LoginInterceptorimplements HandlerInterceptor{ /* * 在處理器執行之前調用(non-Javadoc) * 1. 獲取session * 2. 讀取session中的uid的值 *  如果為null,表示沒有登錄,那么直接重定向到登錄界面,同時返回false,不需要執行后面的流程了 *  如果不為null,表示已經登錄了,那么直接返回true,繼續執行后面的攔截器或者處理器 */ public boolean preHandle(HttpServletRequest request,  HttpServletResponse response, Object handler) throws Exception { HttpSession session=request.getSession();  //獲取session Object uid=session.getAttribute("uid"); //讀取session中的對象 //如果uid存在,那么即可登錄完成 if (uid!=null) {  return true;  //返回true,登錄成功就需要執行后續的流程 } response.sendRedirect(request.getContextPath()+"/user/login.do"); //重定向到登錄界面 return false;  //返回false,后面的流程也不用執行了,直接中斷 } public void postHandle(HttpServletRequest request,  HttpServletResponse response, Object handler,  ModelAndView modelAndView) throws Exception { } public void afterCompletion(HttpServletRequest request,  HttpServletResponse response, Object handler, Exception ex)  throws Exception {  }}

springmvc中配置攔截器

由于這里只是跳轉到用戶中心需要驗證登錄,那么只是匹配了 user_center.do

<!-- 配置攔截器,其中可以配置多個攔截器 -->   <mvc:interceptors> <mvc:interceptor>  <mvc:mappingpath="/user/user_center.do"/>  <beanclass="cn.tedu.spring.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>

多個攔截器的執行順序

根據在 springmvc 配置文件中配置的順序執行,即是在 <mvc:interceptors> 下配置的攔截器的順序,如果對同一個路徑進行了攔截器,那么先配置的先攔截

攔截器和過濾器的區別(主要的區別)

  1. 攔截器是springmvc中,僅僅當使用 springmvc 才可以使用攔截器,過濾器是 Java EE 體系中的,無論使用哪種框架都可以使用過濾器
  2. 攔截器在 DispatcherServlet 之后,在處理器之前執行,過濾器在 DispatcherServlet 之前執行
  3. 過濾器會在所有的 servlet 之前執行(所有的請求都會執行),而攔截器會在springmvc中 DispatcherServlet 之后執行,所以過濾器在項目中可以過濾任何請求(只要是配置了對應的路徑),而攔截器只會在 DispatcherServlet 處理的請求的基礎之上進行攔截

總結

當多種請求都需要做相同或者極為相似的任務時,可以使用攔截器

開發好攔截器,那么需要在 springmvc 的配置文件中配置

在 <mvc:interceptors> 可以有如果若干個 <mvc:interceptor> ,即是配置若干個攔截器,配置的多個攔截器將會形成 攔截器鏈 ,如果配置多個攔截器對同一個路徑都會攔截,那么會按照配置的節點順序執行。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜www高清视频| 日韩一区二区三区国产| 亚洲字幕一区二区| 性欧美暴力猛交69hd| 日韩精品一区二区三区第95| 欧美精品videossex88| 欧美最顶级丰满的aⅴ艳星| 国产精品久久77777| 色哟哟亚洲精品一区二区| 日韩欧美中文字幕在线观看| 亚洲3p在线观看| 91免费人成网站在线观看18| 伊人伊成久久人综合网站| 国产精品一区二区3区| 在线激情影院一区| 91欧美日韩一区| 国产剧情久久久久久| 国产91久久婷婷一区二区| 国产成人精品日本亚洲专区61| 日韩精品视频免费| 亚洲第一福利视频| 亚洲精品在线看| 久久久之久亚州精品露出| 日本一本a高清免费不卡| 精品久久久久久中文字幕一区奶水| 欧美精品日韩三级| 蜜月aⅴ免费一区二区三区| 欧美一级视频免费在线观看| 久久成人免费视频| 日韩**中文字幕毛片| 亚洲第一二三四五区| 中文字幕不卡在线视频极品| 日本精品一区二区三区在线| 国产午夜精品视频免费不卡69堂| 国产一区二区三区四区福利| 久久久久久久一| 亚洲无限av看| 日韩欧美亚洲国产一区| 97香蕉超级碰碰久久免费软件| 国产婷婷成人久久av免费高清| 国内久久久精品| 久久偷看各类女兵18女厕嘘嘘| 欧美理论在线观看| 国产欧美日韩高清| 俺去亚洲欧洲欧美日韩| 91亚洲国产成人久久精品网站| 岛国精品视频在线播放| 日韩精品免费一线在线观看| 欧美巨乳美女视频| 国产精品高潮视频| 国产精品va在线| 成人深夜直播免费观看| 性视频1819p久久| 日韩中文字幕在线看| 日韩中文在线不卡| 亚洲另类激情图| 久久久国产精品x99av| 久久久久久久久久亚洲| 伦理中文字幕亚洲| 国产精品久久一| 久久这里有精品| 日韩av电影在线播放| 亚洲精品中文字| 久久精品国产69国产精品亚洲| 日韩在线观看免费高清完整版| 欧美最顶级丰满的aⅴ艳星| 成人精品视频99在线观看免费| 国内免费久久久久久久久久久| 日本精品久久久久影院| 夜夜狂射影院欧美极品| 国产在线观看91精品一区| 精品一区二区三区四区| 国产精品网址在线| 亚洲国产古装精品网站| 欧美影院在线播放| 在线观看欧美视频| 亚洲精选在线观看| 国产精品久久久久久久午夜| 欧美黄色片免费观看| 91色视频在线导航| 亚洲精品久久久久久久久久久久久| 亚洲色图18p| 国产a级全部精品| 亚洲欧美综合另类中字| 亚洲福利在线观看| 国产精品视频1区| 欧美大片大片在线播放| 久久影视电视剧免费网站| 久久全球大尺度高清视频| 亚洲第一二三四五区| 国产精品91免费在线| 蜜臀久久99精品久久久无需会员| 国产亚洲欧美日韩美女| 亚洲第一男人av| 日韩精品免费在线观看| 久久精品视频亚洲| 精品五月天久久| 国内成人精品一区| 国产欧亚日韩视频| 国产亚洲成av人片在线观看桃| 日韩动漫免费观看电视剧高清| 久久视频免费观看| 国产精品国产三级国产aⅴ9色| 色狠狠av一区二区三区香蕉蜜桃| 亚洲娇小xxxx欧美娇小| 亚洲最大福利网站| 中文国产亚洲喷潮| 在线日韩欧美视频| 色偷偷888欧美精品久久久| 精品视频久久久久久久| 国产97在线观看| 午夜精品久久久久久久99热| 91高清视频免费| 欧美成人免费全部观看天天性色| 韩曰欧美视频免费观看| 在线观看精品自拍私拍| 91色p视频在线| 国产精品白嫩初高中害羞小美女| 欧美与欧洲交xxxx免费观看| 欧美成人中文字幕| 国产香蕉一区二区三区在线视频| 亚州国产精品久久久| 精品亚洲一区二区三区在线播放| 久久精品国产清自在天天线| 91在线色戒在线| 欧美国产日本在线| 一区二区三区四区视频| 精品国产依人香蕉在线精品| 91亚洲精品久久久久久久久久久久| 久久天天躁夜夜躁狠狠躁2022| 国产亚洲a∨片在线观看| 久久久久久国产三级电影| 久久人人97超碰精品888| 97涩涩爰在线观看亚洲| 国产精品日韩专区| 欧美精品性视频| 欧美激情精品久久久久久久变态| 日韩中文字幕免费| 亚洲国产精品va在线看黑人动漫| 久久久久女教师免费一区| 色视频www在线播放国产成人| 欧美激情亚洲综合一区| 亚洲精品理论电影| 欧美激情久久久久| 97香蕉久久超级碰碰高清版| 91免费版网站入口| 久久亚洲精品成人| 欧美黑人极品猛少妇色xxxxx| 国产精品6699| 午夜精品久久久99热福利| 欧洲成人午夜免费大片| 韩曰欧美视频免费观看| 中文字幕久热精品视频在线| 97在线视频国产| 91日本视频在线| 不卡在线观看电视剧完整版| 日韩在线视频观看| 亚洲欧美日本精品| 在线亚洲国产精品网| 国产视频在线观看一区二区| 日韩精品中文字幕有码专区| 九九精品视频在线观看| 粉嫩老牛aⅴ一区二区三区| 久久久av免费|