一,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-INF的 classes目錄中,也可以在 應用層級及 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(); } } }
參考: