日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

java元婴期(31)----java进阶(springmvc(5)---数据回显数据交互拦截器)

發布時間:2025/3/21 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java元婴期(31)----java进阶(springmvc(5)---数据回显数据交互拦截器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據回顯

什么數據回顯

提交后,如果出現錯誤,將剛才提交的數據回顯到剛才的提交頁面。

pojo數據回顯方法

1、springmvc默認對pojo數據進行回顯。

pojo數據傳入controller方法后,springmvc自動將pojo數據放到request域,key等于pojo類型(首字母小寫)

使用@ModelAttribute指定pojo回顯到頁面在request中的key

?

2、@ModelAttribute還可以將方法的返回值傳到頁面

在商品查詢列表頁面,通過商品類型查詢商品信息。

在controller中定義商品類型查詢方法,最終將商品類型傳到頁面。

頁面上可以得到itemTypes數據。

使用最簡單方法使用model,可以不用@ModelAttribute

簡單類型數據回顯

使用最簡單方法使用model

model.addAttribute("id", id);

?

數據交互

上傳圖片

需求

在修改商品頁面,添加上傳商品圖片功能。

springmvc中對多部件類型解析

頁面form中提交enctype="multipart/form-data"的數據時,需要springmvc對multipart類型的數據進行解析。

在springmvc.xml中配置multipart類型解析器。

加入上傳圖片的jar

上邊的解析內部使用下邊的jar進行圖片上傳。

?

創建圖片虛擬目錄存儲圖片

通過圖形界面配置:(此處是基于eclipse開發)

也可以直接修改tomcat的配置:

在conf/server.xml文件,添加虛擬目錄 :

注意:在圖片虛擬目錄 中,一定將圖片目錄分級創建(提高i/o性能),一般我們采用按日期(年、月、日)進行分級創建。

上傳圖片代碼

頁面

controller方法

修改:商品修改controller方法:

json數據交互(重點掌握,涉及到與HTML頁面的交互)

為什么要進行json數據交互

json數據格式在接口調用中、html頁面中較常用,json格式比較簡單,解析還比較方便。

比如:webservice接口,傳輸json數據.

springmvc進行json交互

1、請求json、輸出json,要求請求的是json串,所以在前端頁面中需要將請求的內容轉成json,不太方便。

2、請求key/value、輸出json。此方法比較常用。

環境準備

加載json轉的jar包

springmvc中使用jackson的包進行json轉換(@requestBody和@responseBody使用下邊的包進行json轉),如下:

配置json轉換器

在注解適配器中加入messageConverters

<!--注解適配器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean></list></property></bean>

?

注意:如果使用<mvc:annotation-driven /> 則不用定義上邊的內容。

json交互測試

?

輸入json串,輸出是json串

jsp頁面

使用jquery的ajax提交json串,對輸出的json結果進行解析。

controller

測試結果

輸入key/value,輸出是json串

jsp頁面

使用jquery的ajax提交key/value串,對輸出的json結果進行解析。

controller

測試

攔截器

攔截定義

定義攔截器,實現HandlerInterceptor接口。接口中提供三個方法。

public class HandlerInterceptor1 implements HandlerInterceptor {//進入 Handler方法之前執行//用于身份認證、身份授權//比如身份認證,如果認證通過表示當前用戶沒有登陸,需要此方法攔截不再向下執行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {//return false表示攔截,不向下執行//return true表示放行return false;}//進入Handler方法之后,返回modelAndView之前執行//應用場景從modelAndView出發:將公用的模型數據(比如菜單導航)在這里傳到視圖,也可以在這里統一指定視圖@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}//執行Handler完成執行此方法//應用場景:統一異常處理,統一日志處理@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {}}

攔截器配置

針對HandlerMapping配置

?

springmvc攔截器針對HandlerMapping進行攔截設置,如果在某個HandlerMapping中配置攔截,經過該 HandlerMapping映射成功的handler最終使用該 攔截器。

<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="interceptors"><list><ref bean="handlerInterceptor1"/><ref bean="handlerInterceptor2"/></list></property> </bean><bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/><bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>

一般不推薦使用。

類似全局的攔截器

springmvc配置類似全局的攔截器,springmvc框架將配置的類似全局的攔截器注入到每個HandlerMapping中。

攔截測試

測試需求

測試多個攔截器各各方法執行時機。

編寫兩個攔截

兩個攔截器都放行

HandlerInterceptor1...preHandle

HandlerInterceptor2...preHandle

?

HandlerInterceptor2...postHandle

HandlerInterceptor1...postHandle

?

HandlerInterceptor2...afterCompletion

HandlerInterceptor1...afterCompletion

總結:

preHandle方法按順序執行,

postHandleafterCompletion按攔截器配置的逆向順序執行。

攔截器1放行,攔截器2不放行

HandlerInterceptor1...preHandle

HandlerInterceptor2...preHandle

HandlerInterceptor1...afterCompletion

總結:

攔截器1放行,攔截器2 preHandle才會執行。

攔截器2 preHandle不放行,攔截器2 postHandleafterCompletion不會執行。

只要有一個攔截器不放行,postHandle不會執行。

攔截器1不放行,攔截器2不放行

HandlerInterceptor1...preHandle

攔截器1 preHandle不放行,postHandleafterCompletion不會執行。

攔截器1 preHandle不放行,攔截器2不執行。

小結

根據測試結果,對攔截器應用。

比如:統一日志處理攔截器,需要該 攔截器preHandle一定要放行,且將它放在攔截器鏈接中第一個位置。

比如:登陸認證攔截器,放在攔截器鏈接中第一個位置。權限校驗攔截器,放在登陸認證攔截器之后。(因為登陸通過后才校驗權限)

攔截器應用(實現登陸認證)

需求

1、用戶請求url

2、攔截器進行攔截校驗

  • 如果請求的url是公開地址(無需登陸即可訪問的url),讓放行

  • 如果用戶session 不存在跳轉到登陸頁面

  • 如果用戶session存在放行,繼續操作。

登陸controller方法

@Controller public class LoginController {// 登陸@RequestMapping("/login")public String login(HttpSession session, String username, String password)throws Exception {// 調用service進行用戶身份驗證// ...// 在session中保存用戶身份信息session.setAttribute("username", username);// 重定向到商品列表頁面return "redirect:/items/queryItems.action";}// 退出@RequestMapping("/logout")public String logout(HttpSession session) throws Exception {// 清除sessionsession.invalidate();// 重定向到商品列表頁面return "redirect:/items/queryItems.action";}}

登陸認證攔截實現

代碼實現

public class LoginInterceptor implements HandlerInterceptor {//進入 Handler方法之前執行//用于身份認證、身份授權//比如身份認證,如果認證通過表示當前用戶沒有登陸,需要此方法攔截不再向下執行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {//獲取請求的urlString url = request.getRequestURI();//判斷url是否是公開 地址(實際使用時將公開 地址配置配置文件中)//這里公開地址是登陸提交的地址if(url.indexOf("login.action")>=0){//如果進行登陸提交,放行return true;}//判斷sessionHttpSession session = request.getSession();//從session中取出用戶身份信息String username = (String) session.getAttribute("username");if(username != null){//身份存在,放行return true;}//執行這里表示用戶身份需要認證,跳轉登陸頁面request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);//return false表示攔截,不向下執行//return true表示放行return false;}

攔截器配置

小結

ssm框架的學習到此基本結束,后面的即是渡劫期(ssm的整合以及項目的實踐訓練)

?

總結

以上是生活随笔為你收集整理的java元婴期(31)----java进阶(springmvc(5)---数据回显数据交互拦截器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。