ServletContext
1.它是一種域對象
2.一個Web應用只有一個ServletContext對象
3.服務器啓動時對象就創建了,當服務器關閉時對象才銷燬
功能方法:
(1)獲取ServletContext對象
ServletContext sc = servletconfig.getServletContext();
由於GenericServlet類中定義了方法getServletContext(),
而HttpServlet繼承自GenericServlet,
我們自定義的Servlet類繼承自HttpServlet,所以類中也有
方法getServletContext()
ServletContext sc = this.getServletContext();
(2) 域功能,內部有map,可以存取數據
servletContext.setAttribute("name","Tom");//保存數據
servletContext.setAttribute("name","Jack");//替換數據
servletContext.getAttribute("name");//獲取數據
servletContext.removeAttribute("name");//刪除數據
Enumeration en = servletContext.getAttributeNames();//獲取所有的屬性名
保存在ServletContext中的數據是被當前Web應用中的所有資源共享
(3)訪問當前的web應用的資源
//根據文件相對路徑得到絕對路徑
String getRealPath(String path)
G:\apache-tomcat-6\webapps\day6_2\WEB-INF\web.xml
//將得到的資源包裝成一個InputStream
InputStream is = servletContext.getResourceAsStream("/WEB-INF/web.xml");
(4)獲取在web.xml中配置的初始化參數(不屬於一個Servlet)
<context-param>
<param-name>school</param-name>
<param-value>rjxy</param-value>
</context-param>
<context-param>
<param-name>major</param-name>
<param-value>java</param-value>
</context-param>
String value = this.getInitParameter("name");
————————————————————————————————————————
response:
是service()方法的參數,類型是HttpServletResponse.
在客戶端發出請求時,服務器都會創建一個新的response對象,把它傳給service()方法。
response對象用來完成對客戶端的響應。
它有4種功能:
設置響應頭信息
發送狀態碼
設置響應正文
重定向
1、 response設置響應正文,通過兩種流發送到客戶端的:
PrintWriter out = response.getWriter();//字符流
ServletOutputStream out = response.getOutputStream();//字節流 比如下載一個圖片時
通過字符流發送響應時,要注意字符編碼問題。
response.getWriter()默認編碼爲ISO-8859-1,不支持中文。
把字符集設置爲UTF-8, response.setcharacterEncoding("UTF-8");
這樣發送到客戶端的就是UTF-8編碼的內容。
瀏覽器一般默認的解碼字符集爲GB2312或者GBK。
比如“安陽” UTF-8編碼爲6個字節,而GB2312編碼爲4個字節。
解決亂碼: response.setContentType("text/html;charset=UTF-8");
緩衝區
response.getWriter()有緩衝區,大小爲8KB,如果響應數據沒有達到8KB,
所有數據都暫時存放在緩衝區中,不會立刻發送到客戶端。當Servlet執行完畢後,
服務器纔會將緩衝區中的數據發送到客戶端。如果想立刻發送到客戶端,
調用response.flushBuffer()方法手動刷新緩衝區。
2、設置響應頭信息
告訴客戶端瀏覽器一些關於響應的信息,比如內容編碼,內容長度等。
//3秒鐘自動跳轉到某個主頁
response.setHeader("Refresh","3;URL=http://www.aynu.edu.cn");
//跳轉到本項目內主頁
response.setHeader("Refresh", "3;URL=/day7/index.jsp");
3、設置狀態碼
response.setStatus(200);
response.setStatus(404);
4、重定向
本來瀏覽器訪問的是A地址,服務器卻通知瀏覽器去訪問B地址,即再次發送一個新的請求。
//重定向(到項目外的資源)
response.sendRedirect("http://www.aynu.edu.cn");
//重定向(到項目內的資源)
response.sendRedirect("/day7/FServlet");