其他更多java基礎文章: java基礎學習(目錄)
Servlet規範核心類圖
接下來我們要說的是Servlet的四個類:
ServletConfig物件,ServletContext物件、下一節講request物件,response物件
從圖中我們可以知道這幾個物件之間的聯絡!
ServletConfig物件
獲取ServletConfig物件
- 通過繼承父類(HttpServlet或GenericServlet)的方法得到一個ServletConfig物件
ServletConfig config = this.getServletConfig();
複製程式碼
ServletConfig物件的作用
- getServletName() :獲取servlet的名稱,也就是我們在web.xml中配置的servlet-name
- getServletContext():獲取ServletContext物件,該物件的作用看下面講解
- getInitParameter(String):獲取在servlet中初始化引數的值。這裡注意與全域性初始化引數的區分。這個獲取的只是在該servlet下的初始化引數
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.hiway.servlet.Myservlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/Myservlet</url-pattern>
</servlet-mapping>
複製程式碼
- getInitParameterNames():獲取在Servlet中所有初始化引數的名字,也就是key值,可以通過key值,來找到各個初始化引數的value值。注意返回的是列舉型別
Enumeration<String> initParameterNames = this.getInitParameterNames();
while(initParameterNames.hasMoreElements()){
String name = initParameterNames.nextElement();
String value = this.getInitParameter(name);
}
複製程式碼
ServletContext物件
獲取ServletContext物件
- 通過ServletConfig獲取,如果繼承父類(HttpServlet或GenericServlet),則可直接呼叫方法獲取
getServletContext();
//或
getServletConfig().getServletContext();
複製程式碼
- 還有一種在web應用中,通過HttpServletRequest獲取
request.getSession().getServletContext()
複製程式碼
ServletContext物件的作用
tomcat為每個web專案都建立一個ServletContext例項,tomcat在啟動時建立,伺服器關閉時銷燬,在一個web專案中共享資料,管理web專案資源,為整個web配置公共資訊等,通俗點講,就是一個web專案,就存在一個ServletContext例項,每個Servlet讀可以訪問到它。
1. web專案中共享資料
在一定範圍內(當前應用),使多個Servlet共享資料getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)
1.1 setAttribute(String name, Object obj) 在web專案範圍記憶體放內容,以便讓在web專案中所有的servlet讀能訪問到
1.2 getAttribute(String name) 通過指定名稱獲得內容
1.3 removeAttribute(String name) 通過指定名稱移除內容
2. 獲取全域性配置資訊
整個web專案初始化引數 (這個就是全域性初始化引數,每個Servlet中都能獲取到該初始化值)
2.1)getInitPatameter(String name) //通過指定名稱獲取初始化值
2.2)getInitParameterNames() //獲得列舉型別
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
複製程式碼
3. 獲取web專案資源
3.1)獲取web專案下指定資源的路徑 :
String getRealPath(String path);//根據資源名稱得到資源的絕對路徑
ServletContext servletContext = this.getServletContext();
String path = servletContext.getRealPath("/WEB-INF/web.xml");
System.out.println(path);
F:\myworkspace\ServletTest\out\artifacts\ServletTest_war_exploded\WEB-INF\web.xml
複製程式碼
3.2)獲取web專案下指定資源的內容,返回的是位元組輸入流。InputStream getResourceAsStream(java.lang.String path)
InputStream in = servletContext.getResourceAsStream("/WEB-INF/web.xml");
InputStreamReader isr = new InputStreamReader(in,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String s = null;
while((s =br.readLine())!=null){
System.out.println(s);
}
複製程式碼
3.3)getResourcePaths(java.lang.String path) 指定路徑下的所有內容。
Set set = servletContext.getResourcePaths("/WEB-INF");
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
複製程式碼
3.4)實現servlet的轉發
RequestDispatcher getRequestDispatcher(String path) ;//參數列示要跳轉到哪去
RequestDispatcher rd = servletContext.getRequestDispatcher("/Servlet1");
rd.forward(req,resp);
複製程式碼