ServletConfig對象,叫Servlet配置對象。主要用於加載配置文件的初始化參數。java
ServletConfig對象在servlet對象建立以後,調用init方法以前建立,該Config對象隨着init方法傳入到servlet中。web
java.lang.String getInitParameter(java.lang.String name) 根據名稱獲取參數值tomcat
java.util.Enumeration getInitParameterNames() 獲得全部參數服務器
ServletContext getServletContext() 獲取servlet上下文對象app
ava.lang.String getServletName() 獲得servlet名稱工具
問題:SevletConfig中的初始化參數不能被其餘Servlet共享!!this
下面來演示一下這些方法的使用:spa
咱們先在servlet的配置文件web.xml配置servlet的初始化參數,而後運用上面的方法獲得這些數據! code
配置文件: 視頻
<servlet> <servlet-name>testpath</servlet-name> <servlet-class>com.vmaxtam.dotest.testpath</servlet-class> <init-param> --這個標籤寫在要設置的servlet內 <param-name>color</param-name> -屬性名 <param-value>red</param-value> -屬性值 </init-param> </servlet>
下面咱們就在相應的servlet內獲得配置好的數據吧!
ServletConfig servletConfig = getServletConfig();
String color = servletConfig.getInitParameter("color");
這樣就能獲得配置好的數據了!還有更簡單的方法:
先說明一下:首先HttpServlet繼承自GenericServlet類,而GenericServlet類又繼承自Servlet接口,Servlet接口有方法getServletConfig() ,因此HttpServlet確定有方法getServletConfig()。而GenericServlet類又實現了ServletConfig 接口,也就是他確定實現了ServletConfig接口中的全部方法,因此以上代碼咱們還能夠這樣寫:
String color = getInitParameter("color");
其它方法也差很少,這裏不作示範~~~
咱們知道一個Web應用裏面能夠有多個servlet,若是如今有一份數據須要傳給全部的servlet使用,那麼咱們就可使用ServletContext對象了。
ServletContext對象叫servlet上下文對象。該對象在一個web應用中只會建立一個對象,表明當前web應用的環境。在當前的web應用中全部servlet都共享一個ServletContext對象。
由ServletContext對象的特性咱們能夠推斷出它被建立的時機:每當一個web應用被加載,那麼一個ServletContext對象就被建立了,而後web應用裏的servlet就能夠同使用它了!
那麼,咱們如何在servlet裏獲得這個已經建立的對象呢?
開發者十分巧妙的將ServletContext對象放入在了該web應用裏的每個servlet中的ServletConfig對象裏!
在一個servlet被建立時,會調用它的構造方法,隨後就會調用init()方法對它初始化,而在初始化的過程當中,就把ServletContext對象放入到ServletConfig對象中了!那麼這個servlet獲得ServletContext對象對象就十分方便了,只須要用一句代碼!
ServletContext servletContext = this.getServletContext();
獲得了ServletContext對象,咱們就要想:這個對象有什麼用呢!?如下介紹一下它的經常使用的方法。
主要有五種用法:
一)獲得web應用的上下文路徑:
java.lang.String getContextPath()
二)獲取web應用的全局參數 :
java.lang.String getInitParameter(java.lang.String name)
java.util.Enumeration getInitParameterNames()
三)域對象相關的方法:
java.lang.Object getAttribute(java.lang.String name)
void setAttribute(java.lang.String name, java.lang.Object object)
void removeAttribute(java.lang.String name)
四)用於轉發:
RequestDispatcher getRequestDispatcher(java.lang.String path)
五)web應用加載資源文件方法:
java.lang.String getRealPath(java.lang.String path)
java.io.InputStream getResourceAsStream(java.lang.String path)
下面示範一下使用這些方法:
經過request來調用該方法
String path = request.getContextPath();
System.out.println(path);
輸出結果:
/TestArea
web應用的路徑 是 tomcat服務器中web應用的名稱,而不是ecplise中的項目名稱。
request.getContextPath(); 爲了方便獲取上下文路徑。推薦使用該方法。
先在web應用對應的web.xml中設置全局參數: 全局參數的標籤寫咋<web-app>標籤內
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!-- 全局參數 --> <context-param> <param-name>AAA</param-name> <param-value>AAA's value</param-value> </context-param> <context-param> <param-name>BBB</param-name> <param-value>BBB's value</param-value> </context-param>
而後在servlet內獲得這個參數:
//1.獲得ServletContext對象 ServletContext context = this.getServletContext(); //2.獲取全局參數 System.out.println(context.getInitParameter("AAA")); Enumeration<String> enums = context.getInitParameterNames(); while(enums.hasMoreElements()){ String paramName = enums.nextElement(); String paramValue = context.getInitParameter(paramName); System.out.println(paramName+"="+paramValue); }
注意: 全部的servlet均可以獲取全局參數!!!
什麼是域對象?
域對象:保存數據 和 獲取數據,用於在不一樣資源之間共享數據。
那麼咱們如今嘗試把第一個servlet的數據傳到 另外一個servlet裏吧!
方法一:利用跳轉,從servlet1跳轉到servlet2時,把數據寫在跳轉uri裏
response.sendRedirect("/servlet2?id=867");
方法二:利用域對象方法
setAttribute(name,Object): 保存數據方法.name名稱,object數據
getAttribute(name) 獲取數據。name是保存數據時的名稱
removeAtrribute(name): 清除數據。
servlet1寫上:
ServletContext context = this.getServletContext(); context.setAttribute("id", 123);
而後servlet2得到它吧!
ServletContext context = this.getServletContext(); String id = context.getAttribute("id");
RequestDispatcher getRequestDispatcher(java.lang.String path)
在servlet中跳轉資源:重定向 / 轉發
重定向:
1)地址欄會發送改變,變成重定向到的地址
2)重定向能夠跳轉到web應該內,其餘web應用,甚至站外的應用。
3)調用者和被調用者處於兩次不一樣的請求。不能經過request域對象來共享數據。
轉發:
1)地址欄不會發送改變。
2)轉發不能轉發到應用外的資源,不能轉發到站外資源;只能轉發到當前web應用下的資源。
3)調用者和被調用者處於同一次請求,能夠經過request域對象共享數據。
資源:
1)內部資源:web應用內的資源
2)應用外的資源: 其餘web應用下的資源
3)其餘站點的資源
先了解一下web應用運行時的目錄:
相對路徑是指java命令的運行目錄。
java項目:ecplise工具把java命令運行的目錄設置到web應用的根目錄。
web項目: java命令運行的目錄在tomcat/bin目錄下。
有時候咱們須要web應用加載一些圖片,音樂,視頻等,就須要得到他們的路徑而後使用,能夠用如下方法得到:
java.lang.String getRealPath(java.lang.String path) --獲得資源的絕對路徑
java.io.InputStream getResourceAsStream(java.lang.String path)--獲得資源的的一個輸入流