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");