1. 程式人生 > >spring幾種獲取 HttpServletRequest 物件的方式

spring幾種獲取 HttpServletRequest 物件的方式

以下的 request 例項都編號了,一共 4 種 方式

[email protected] 方式
2.public void Test(HttpServletRequest request1, HttpServletResponse resp,HttpSession session1) 方式
3.((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); 方式
4.Global.getHttpServletRequest(); 方式,該方式基於 第三種做的封裝


方法4 最靈活,不需要每個 action 中都定義 HttpServletRequest 引數。



LoginController.java

  1. @Controller
  2. @RequestMapping("/demo")  
  3. publicclass LoginController{  
  4.     @Autowired
  5.     private  HttpServletRequest request2;  
  6.     @RequestMapping("test")  
  7.     @ResponseBody
  8.     publicvoid Test(HttpServletRequest request1, HttpServletResponse resp,HttpSession session1){  
  9.         resp.setCharacterEncoding("UTF=8"
    );  
  10.         resp.setContentType("text/html;charset=UTF-8");  
  11.         String key = "test_date";  
  12.         HttpSession session = request1.getSession();  
  13.         session.setAttribute(key, new Date());  
  14.         String sessionId = session.getId();  
  15.         Date time = (Date)session.getAttribute(key);  
  16.         HttpServletRequest request3 = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
  17.         HttpServletRequest request4 = Global.getHttpServletRequest();  
  18.         //判斷session是不是新建立的
  19.         try {  
  20.             if (session.isNew()) {  
  21.                     resp.getWriter().print(java.text.MessageFormat.format(  
  22.                             "【{0}】session建立成功,session的id是:</br>{1}</br>{2}</br>{3}</br>{4}</br>{5}"
  23.                             , StringExtend.getString(time)  
  24.                             , sessionId  
  25.                             , session1.getId()  
  26.                             , request2.getSession().getId()  
  27.                             , request3.getSession().getId()  
  28.                             , request4.getSession().getId()));  
  29.             }else {  
  30.                 resp.getWriter().print(java.text.MessageFormat.format(  
  31.                         "【{0}】伺服器已經存在該session了,session的id是:</br>{1}</br>{2}</br>{3}</br>{4}</br>{5}"
  32.                             , StringExtend.getString(time)  
  33.                             , sessionId  
  34.                             , session1.getId()  
  35.                             , request2.getSession().getId()  
  36.                             , request3.getSession().getId()  
  37.                             , request4.getSession().getId()));  
  38.             }  
  39.         } catch (IOException e) {  
  40.                 // TODO Auto-generated catch block
  41.                 e.printStackTrace();  
  42.         }  
  43.     }  




Global.java

  1. import javax.servlet.http.HttpServletRequest;  
  2. import javax.servlet.http.HttpSession;  
  3. import org.springframework.web.context.request.RequestContextHolder;  
  4. import org.springframework.web.context.request.ServletRequestAttributes;  
  5. /**  
  6. * 使用該類必須在 web.xml 中新增監聽(org.springframework.web.context.request.RequestContextListener) 
  7. * 該作用域僅適用於WebApplicationContext環境 
  8. */
  9. publicclass Global {  
  10.     static String _loginSessionKey="login_session";  
  11.     /** 
  12.      * 獲取當前請求session 
  13.      * @return 
  14.      */
  15.     publicstatic HttpServletRequest getHttpServletRequest(){  
  16.         HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder  
  17.                 .getRequestAttributes())  
  18.                 .getRequest();  
  19.         return request;  
  20.     }     
  21.     /** 
  22.      * 獲取當前請求session 
  23.      * @return 
  24.      */
  25.     publicstatic HttpSession getHttpSession(){  
  26.         return getHttpServletRequest().getSession();  
  27.     }  
  28. }  




web.xml 加入監聽


<!-- 5. spring 註冊監聽,獲取上下文中的 HttpServletRequest 物件(對 Global 支援)  -->
  1. <listener>
  2.     <listener-class>
  3.         org.springframework.web.context.request.RequestContextListener    
  4.     </listener-class>
  5. </listener>

相關推薦

spring獲取 HttpServletRequest 物件方式

以下的 request 例項都編號了,一共 4 種 方式[email protected] 方式2.public void Test(HttpServletRequest request1, HttpServletResponse resp,HttpSession

jquery獲取元素left方式的異同

pan min blue 坐標 utf-8 text cli 包括 NPU offset()函數用於設置或返回當前匹配元素相對於當前文檔的偏移,也就是相對於當前文檔的坐標。該函數只對可見元素有效。 該函數返回一個坐標對象(Object),該對象有一個left屬性和top屬性

java(JSP)中獲取專案路徑方式

struts2設定了struts.multipart.saveDir後會在根目錄建立資料夾,這樣會涉及linux下的許可權問題, 最好不要設定,使用struts預設 需要使用路徑時,用下面的方法取得專案根目錄的絕對路徑(Tools為方法類) public static String getRootP

Spring框架建立bean的方式

Spring框架下,Bean的建立和裝配非常的靈活,提供了三種主要的方式,並且相互見可以互相看見,也就是你可以隨意地採用你喜歡且合適的方式建立Bean,而不用擔心他們之間的相容問題。     一、使用XML顯示配置Bean      

SpringBoot配置分析、獲取到SpringBoot配置檔案資訊以及獲取配置檔案資訊的方式

SpringBoot的預設的配置檔案application.properties配置檔案。 1、第一種方式直接獲取到配置檔案裡面的配置資訊。 第二種方式是通過將已經注入到容器裡面的bean,然後再注入Environment這個bean進行獲取。具體操作如下所示: 1 package com.bie

spring 獲取ServletContext物件獲取HttpServletRequest物件

String rootPath = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/"); private HttpServletRequest getRequest() {

spring boot 在普通類中獲取HttpServletRequest物件

import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import j

獲取spring環境上下文方法

  獲得spring裡註冊Bean的四種方法,特別是第三種方法,簡單: 一:方法一(多在struts框架中)繼承BaseDispatchAction   import com.mas.wawacommunity.wap.service.UserManager;   pu

Spring aop--不同的使用方式

最近聽老師講關於AOP關於容器的課,突然覺得之前對aop的理解都不是很到位,先不說理解就是應用都很少,最近也寫了幾篇關於AOP的部落格,都是一些簡單的demo,今天在這裡再說一下關於Spring AOP的幾種實現方式。 我們經常會用到的有如下幾種         1、基於代理的AOP         2、

Keystonetoken生成的方式分析

.cn 組裝 cap ack 3-0 con 隨機 tput dom 從Keystone的配置文件中,我們可見,Token的提供者目前支持四種。 Token Provider:UUID, PKI, PKIZ, or Fernet 結合源碼及官方文檔,我們用一個表格來闡述一下

第四節課:常見的攻擊方式

pxc wql ptc hvm oid hsv ffd stl -1 1.中間人攻擊 局域網ARP攻擊 受害者經過攻擊者向網關發送數據。當主機A、和主機B通信時,都由主機C來為其“轉發”,如圖一,而A、B之間並沒有真正意思上的直接通信,他們之間的信息傳遞同C作為中介來完成

Java常見的編碼方式

計算 是把 oca java 編碼 不同 sta 換上 基礎上 examples 幾種常見的編碼格式 為什麽要編碼 不知道大家有沒有想過一個問題,那就是為什麽要編碼?我們能不能不編碼?要回答這個問題必須要回到計算機是如何表示我們人類能夠理解的符號的,這些符號也就是我們人類

jmeter的參數化方式

Coding 所有 com 對手 var 取數 TE mod ros 在用到jmeter工具時,無論做接口測試還是性能測試,參數化都是一個必須掌握且非常有用的知識點。參數化的使用場景,例如: 1)多個請求都是同一個ip地址,若服務器地址更換了,則腳本需要更改每個請求的ip

RestTemplate中常見的請求方式

see 信息 book ren new 三個參數 body turn 表示 GET請求 第一種:getForEntity getForEntity方法的返回值是一個ResponseEntity<T>,ResponseEntity<T>是Spring對

java反射機制——三獲取class物件的方法

package cn.itcast.reflect.demo; import cn.itcast.bean.demo.Person; /** * * 獲取Class物件的3中方法: * * * */ public class ReflectDemo1 { public st

C#常用的加密方式

read int ati htop 磁盤 tarray dem new lac 一、AES加密算法 AES算法基於排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換為另一個。AES 使用幾種不同的方法來執行排列和置換運算。 AES是一個叠代的、對稱

05 識別毒酒——演算法和編碼方式的分析和比較

說明 問題 識別毒酒 方法1 視為一個有約束的最優化問題進行求解 1 模型的進一步討論 3方法2 使用編碼的方法 1 結論 2 具體方法 3一個瑕疵和改進的方法

spark讀檔案的方式

spark.read.textFile和sc.textFile的區別 val rdd1 = spark.read.textFile("hdfs://han02:9000/words.txt")   //讀取到的是一個RDD物件 val rdd2 = sc.textFile("hdfs://han02:90

詳解ES6中的解決非同步的方式

前置知識準備 Generator 函式 執行會返回一個迭代器(Iterator), 在迭代器上可以呼叫 next() 方法, 執行下一個 yield 或 return 呼叫 next() 方法,會返回一個物件 {value: res, done: false} , value 的值 為 yield 之

SpringCloud之RestTemplate,常見的請求方式

https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服務的發現與消費一文中,當我們從服務消費端去呼叫服務提供者的服務的時候,使用了一個很好用的物件,叫做RestTemplate,當時我們只使