HttpServletRequest HttpServletResponse 常見操作


一,HttpServletResponse 

   response.getWriter().write("<h1>response</h1>");以字符流的方式寫數據

   response.getOutputStream().write("response"):以字節流的方式寫數據

   response.setCharacterEncoding("utf-8"):設定響應數據為utf-8,字符流

   response.setHeader("Content-Type","text/html;charset=utf-8”):設置頁面編碼

   response.setContentType("text/html;charset=UTF-8");"):解決響應數據亂碼

二,HttpServletRequest  獲取客戶機信息

   getRequestURL():獲取資源請求完整路徑

   getRequestURI():獲取資源部分路徑

   getQueryString ():方法返回請求行中的參數部分。

   getRemoteAddr():獲取發出請求客戶機的IP

   getRemotePort():獲取發出請求客戶機的端口

   getRemoteHost():獲取發出請求客戶機名稱

   getLocalAddr():返回web服務器的IP

   getLocalName():返回web服務器主機名

   getMethod():返回客戶機請求方式

三,request獲取頭信息

   request.getHeader(name);//獲取單個請求頭name對應的value值

   request.getHeaders("Accept-Encoding");//獲取多個同名請求頭對應的一組value值,因此返回枚舉類型數據

   request.getHeaderNames();//獲取請求頭的所有name值,返回的數據也是一個枚舉類型的數據,將枚舉中的元素依次遍歷出來,根據name獲取對應的value值,即可得到Http請求頭的所有信息

具體操作:

/**
* 獲取頭信息
*/
String headValue = request.getHeader("Accept-Encoding");//獲取單個請求頭name對應的value值
System.out.println(headValue);


Enumeration e = request.getHeaders("Accept-Encoding");//獲取多個同名請求頭對應的一組value值,因此返回枚舉類型數據
/**
* 將數據遍歷出來
*/
while(e.hasMoreElements()){
//遍歷枚舉中存儲的每一個元素
String value = (String)e.nextElement();
System.out.println(value);//將值輸出
}

/**
* 獲取所有請求頭信息
*/
Enumeration er = request.getHeaderNames();//獲取請求頭的所有name值
while(er.hasMoreElements()){
String name =(String) er.nextElement();
String value = request.getHeader(name);
System.out.println(name+"="+value);
}

四,獲取客戶端請求參數

getParameter(name):獲取指定名稱的參數值。這是最為常用的方法之一。
getParameterValues(String name):獲取指定名稱參數的所有值數組。它適用於一個參數名對應多個值的情況。如頁面表單中的復選框,多選列表提交的值。
getParameterNames():返回一個包含請求消息中的所有參數名的Enumeration對象。通過遍歷這個Enumeration對象,就可以獲取請求消息中所有的參數名
getParameterMap():返回一個保存了請求消息中的所有參數名和值的Map對象。Map對象的key是字符串類型的參數名,value是這個參數所對應的Object類型的值數組。

五,各種路徑獲取

request.getRealPath() 這個方法已經不推薦使用了,代替方法是:

request.getSession().getServletContext().getRealPath()

request.getSession().getServletContext().getRealPath("/"); 獲取Web項目的全路徑

request.getContextPath(),返回的是項目的根目錄,項目放在Tomcat的ROOT下就為空,本地中如果沒有配置Application context,也會返回空,反之配置了就返回配置的值

ps:Java中讀取配置文件方式

方式一:采用ServletContext讀取,讀取配置文件的realpath,然后通過文件流讀取出來。

因為是用 ServletContext讀取文件路徑,所以配置文件可以放入在 WEB-INFclasses目錄中,也可以在 應用層級WEB-INF的目錄中。
文件存放位置具體在eclipse工程中的表現是: 可以放在src下面,也可放在web-info及webroot下面等。
因為是讀取出路徑后,用文件流進行讀取的,所以可以讀取任意的配置文件包括xml和properties。 缺點:不能在servlet外面應用讀取配置信息。

String realPath = getServletContext().getRealPath(path);

InputStreamReader reader =new InputStreamReader(new FileInputStream(realPath),"utf-8");

方式二:采用ResourceBundle類讀取配置信息

優點是:可以以完全限定類名的方式加載資源后,直接的讀取出來,且可以在非Web應用中讀取資源文件。
缺點:只能加載類classes下面的資源文件,且只能讀取.properties文件。

/** * 獲取指定.properties配置文件中所以的數據 * @param propertyName * 調用方式: * 1.配置文件放在resource源包下,不用加后綴 * PropertiesUtil.getAllMessage("message"); * 2.放在包里面的 * PropertiesUtil.getAllMessage("com.test.message"); * @return */ public static List<String> getAllMessage(String propertyName) { // 獲得資源包 ResourceBundle rb = ResourceBundle.getBundle(propertyName.trim()); // 通過資源包拿到所有的key Enumeration<String> allKey = rb.getKeys(); // 遍歷key 得到 value List<String> valList = new ArrayList<String>(); while (allKey.hasMoreElements()) { String key = allKey.nextElement(); String value = (String) rb.getString(key); valList.add(value); } return valList; }

方式三:采用ClassLoader方式進行讀取配置信息

優點是:可以在非Web應用中讀取配置資源信息,可以讀取任意的資源文件信息。
缺點:只能加載類classes下面的資源文件。

 /**獲取的是classes路徑下的文件 * 優點是:可以在非Web應用中讀取配置資源信息,可以讀取任意的資源文件信息 * 缺點:只能加載類classes下面的資源文件。 * 如果要加上路徑的話:com/test/servlet/jdbc_connection.properties */ private static void use_classLoador(){ //獲取文件流 InputStream is=TestJava.class.getClassLoader().getResourceAsStream("message.properties"); //獲取文件的位置 String filePath=TestJava.class.getClassLoader().getResource("message.properties").getFile(); System.out.println(filePath); }

方法四:getResouceAsStream

XmlParserHandler.class.getResourceAsStream 與 classloader 的不同之處在於使用的是當前類的相對路徑。

方法五:PropertiesLoaderUtils 工具類

Spring 提供的 PropertiesLoaderUtils 允許您直接通過基於類路徑的文件地址加載屬性資源。
最大的好處就是:實時加載配置文件,修改后立即生效,不必重啟。

   private static void springUtil(){ Properties props = new Properties(); while(true){ try { props=PropertiesLoaderUtils.loadAllProperties("message.properties"); for(Object key:props.keySet()){ System.out.print(key+":"); System.out.println(props.get(key)); } } catch (IOException e) { System.out.println(e.getMessage()); } try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }

參考:

https://www.jianshu.com/p/efdd1a526939


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM