java基礎學習:JavaWeb之ServletConfig與ServletContext

其餘更多java基礎文章: java基礎學習(目錄)java


Servlet規範核心類圖

  

image

接下來咱們要說的是Servlet的四個類:web

  ServletConfig對象,ServletContext對象、下一節講request對象,response對象tomcat

從圖中咱們能夠知道這幾個對象之間的聯繫!bash

ServletConfig對象

獲取ServletConfig對象
  1. 經過繼承父類(HttpServlet或GenericServlet)的方法獲得一個ServletConfig對象
ServletConfig config = this.getServletConfig();
複製代碼
ServletConfig對象的做用

image.png

  1. getServletName() :獲取servlet的名稱,也就是咱們在web.xml中配置的servlet-name
  2. getServletContext():獲取ServletContext對象,該對象的做用看下面講解
  3. 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>
複製代碼
  1. getInitParameterNames():獲取在Servlet中全部初始化參數的名字,也就是key值,能夠經過key值,來找到各個初始化參數的value值。注意返回的是枚舉類型
Enumeration<String> initParameterNames = this.getInitParameterNames();
while(initParameterNames.hasMoreElements()){
   String name = initParameterNames.nextElement();
   String value = this.getInitParameter(name);
}
複製代碼

ServletContext對象

獲取ServletContext對象
  1. 經過ServletConfig獲取,若是繼承父類(HttpServlet或GenericServlet),則可直接調用方法獲取
getServletContext();
//或
getServletConfig().getServletContext();
複製代碼
  1. 還有一種在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)服務器

    

image

1.1 setAttribute(String name, Object obj) 在web項目範圍內存放內容,以便讓在web項目中全部的servlet讀能訪問到
1.2 getAttribute(String name) 經過指定名稱得到內容
1.3 removeAttribute(String name) 經過指定名稱移除內容app

2. 獲取全局配置信息
整個web項目初始化參數 (這個就是全局初始化參數,每一個Servlet中都能獲取到該初始化值)
2.1)getInitPatameter(String name)  //經過指定名稱獲取初始化值 2.2)getInitParameterNames()  //得到枚舉類型post

<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)ui

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);
        }
複製代碼

image.png

3.3)getResourcePaths(java.lang.String path) 指定路徑下的全部內容。this

Set set = servletContext.getResourcePaths("/WEB-INF");
        Iterator iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
複製代碼

image.png

3.4)實現servlet的轉發
RequestDispatcher getRequestDispatcher(String path) ;//參數表示要跳轉到哪去

RequestDispatcher rd = servletContext.getRequestDispatcher("/Servlet1");
        rd.forward(req,resp);
複製代碼
相關文章
相關標籤/搜索