Servlet中request、response、ServletContext 及其常用方法


request對象的類是HttpServletRequest


request的常見方法:

request.getRequestURL(): 瀏覽器發出請求時的完整URL,包括協議 主機名 端口(如果有)
request.getRequestURI(): 瀏覽器發出請求的資源名部分,去掉了協議和主機名
request.getQueryString(): 請求行中的參數部分,只能顯示以get方式發出的參數,post方式的看不到
request.getRemoteAddr(): 瀏覽器所處於的客戶機的IP地址
request.getRemoteHost(): 瀏覽器所處於的客戶機的主機名
request.getRemotePort(): 瀏覽器所處於的客戶機使用的網絡端口
request.getLocalAddr(): 服務器的IP地址
request.getLocalName(): 服務器的主機名
request.getMethod(): 得到客戶機請求方式一般是GET或者POST

獲取參數:

request.getParameter(): 是常見的方法,用於獲取單值的參數
request.getParameterValues(): 用於獲取具有多值的參數,比如注冊時候提交的多選框,可以是多選的。
request.getParameterMap(): 用於遍歷所有的參數,並返回Map類型。

獲取頭信息:

request.getHeader() 獲取瀏覽器傳遞過來的頭信息。 
比如getHeader("user-agent") 可以獲取瀏覽器的基本資料,這樣就能判斷是firefox、IE、chrome、或者是safari瀏覽器
request.getHeaderNames() 獲取瀏覽器所有的頭信息名稱,根據頭信息名稱就能遍歷出所有的頭信息

頭信息:

host: 主機地址
user-agent: 瀏覽器基本資料
accept: 表示瀏覽器接受的數據類型
accept-language: 表示瀏覽器接受的語言
accept-encoding: 表示瀏覽器接受的壓縮方式,是壓縮方式,並非編碼
connection: 是否保持連接
cache-control: 緩存時限

使用URL的GET方法傳遞數據

跳轉地址?參數名1=參數值1&參數名2=參數值2  
例如:http://localhost:8080/TomcatTest/HelloForm?name=333ddd333&id=12
因為傳參的編碼不支持中文,參數值是中文會亂碼
可以通過一下方法處理中文問題:
String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");


response是HttpServletResponse的實例,用於提供給瀏覽器的響應信息


設置響應內容

PrintWriter pw= response.getWriter();
通過response.getWriter(); 獲取一個PrintWriter 對象
可以使用println(),append(),write(),format()等等方法設置返回給瀏覽器的html內容。

設置響應格式

response.setContentType("text/html");
"text/html" 是即格式 ,在request獲取頭信息 中對應的request.getHeader("accept"). 
"text/html" 是存在的,表示瀏覽器可以識別這種格式,如果換一個其他的格式, 比如 "text/lol" ,瀏覽器不能識別,那么打開此servlet就會彈出一個下載的對話框。
這樣的手段也就常常用於實現下載功能


設置不使用緩存

使用緩存可以加快頁面的加載,降低服務端的負擔。但是也可能看到過時的信息,可以通過如下手段通知瀏覽器不要使用緩存
response.setDateHeader("Expires",0 );
response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");

ServletContext 對象
WEB容器在啟動時,它會為每個Web應用程序都創建一個對應的ServletContext,它代表當前Web應用。並且它被所有客戶端共享。
WEB應用中的所有Servlet共享同一個ServletContext對象
ServletContext中的屬性的生命周期從創建開始,到服務器關閉而結束

ServletContext sc = this.getServletContext()方法獲得其對象的引用
添加屬性:setAttribute(String name, Object obj);
得到值:getAttribute(String name),這個方法返回Object
刪除屬性:removeAttribute(String name)
讀取到一個文件的全路徑:getRealPath(String path) 其中path必須是/開頭,代表當前web應用程序的根目錄
獲取資源流,即把資源以輸入流的方式獲取:getResourceAsStream(String path)
返回的一個代表某個資源的URL對象:getResource(String parh)
獲取指定目錄下所有資源路徑:getResourcePaths(String path)

例如獲取/WEB-INF下所有資源的路徑:


代碼:
Set set = context.getResourcePaths("/WEB-INF");
System.out.println(set);


結果:
[/WEB-INF/lib/, /WEB-INF/classes/, /WEB-INF/b.txt, /WEB-INF/web.xml]

如果資源不在Web應用的根目錄,通過ServletContext是讀不到的,必須要使用類加載器去讀取
比如在src下的com.gavin包下,此時類加載器要加上包的路徑,如下:
InputStream stream = MyServlet.class.getClassLoader().getResourceAsStream("com/gavin/dbinfo.properties")

獲得初始化參數:
我們可以使用一個或多個<init-param>標簽為servlet配置一些初始化參數,然后我們通過ServletConfig對象獲取這些參數
假如有如下的MyServlet,它的配置為:


<servlet>
  
    <servlet-name>MyServlet</servlet-name>
  
    <servlet-class>com.gavin.servlet.MyServlet</servlet-class>
  
    <init-param>
  
        <param-name>encoding</param-name>
  
        <param-value>utf-8</param-value>
  
    </init-param>
  
</servlet>
可以看到它配置了一個初始化參數:encoding=utf-8,那么我們在MyServlet的源代碼中需要這樣去得到這個參數:


String encoding = this.getServletConfig().getInitParameter("encoding");


免責聲明!

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



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