JavaWEB項目的web.xml文件怎麼配置servlet,load-on-startup參數,serlvet-mapping,ServletConfig,ServletContext

1. 使用 JavaEE 版的 Eclipse 開發動態的 WEB 工程(JavaWEB 項目)

1). 把開發選項切換到 JavaEE
2). 可以在 Window -> Show View 中找到 Package Explorer, 並把其拖拽到開發區的左邊
3). 在 Servers 面板中新建 Tomcat 服務器. 一定要關聯到 Tomcat 安裝的根目錄
4). 新建一個 Dynamic Web Project. 其中 Target Runtime 需選擇 Tomcat6.0
5). 開發 Java WEB 應用
6). 可以通過 run on server 來運行 WEB 項目.
. Servlet 的 HelloWorld

2. 創建一個 Servlet 接口的實現類.

public class HelloServlet implements Servletweb.xml 文件中配置和映射這個 Servlet
<!-- 配置和映射 Servlet -->
<servlet>
    <!-- Servlet 註冊的名字 -->
    <servlet-name>helloServlet</servlet-name>
    <!-- Servlet 的全類名 -->
    <servlet-class>com.atguigu.javaweb.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
    <!-- 需要和某一個 servlet 節點的 serlvet-name 子節點的文本節點一致 -->
    <servlet-name>helloServlet</servlet-name>
    <!-- 映射具體的訪問路徑: / 代表當前 WEB 應用的根目錄. -->
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

3. Servlet 容器: 運行 Servlet、JSP、Filter 等的軟件環境.

1). 可以來創建 Servlet, 並調用 Servlet 的相關生命週期方法.
2). JSP, Filter, Listener, Tag ..…

4. Servlet 生命週期的方法: 以下方法都是由 Serlvet 容器負責調用.

1). 構造器: 只被調用一次. 只有第一次請求 Servlet 時, 創建 Servlet 的實例. 調用構造器.
這說明 Serlvet 的單實例的!
2). init 方法: 只被調用一次. 在創建好實例後立即被調用. 用於初始化當前 Servlet.
3). service: 被多次調用. 每次請求都會調用 service 方法. 實際用於響應請求的.
4). destroy: 只被調用一次. 在當前 Servlet 所在的 WEB 應用被卸載前調用. 用於釋放當前 Servlet 所佔用的資源.

5. load-on-startup 參數:

1). 配置在 servlet 節點中:

  <servlet>
    <!-- Servlet 註冊的名字 -->
    <servlet-name>secondServlet</servlet-name>
    <!-- Servlet 的全類名 -->
    <servlet-class>com.atguigu.javaweb.SecondServlet</servlet-class>
    <!-- 可以指定 Servlet 被創建的時機 -->
    <load-on-startup>2</load-on-startup>
  </servlet>

2). load-on-startup: 可以指定 Serlvet 被創建的時機. 若爲負數, 則在第一次請求時被創建.若爲 0 或正數, 則在當前 WEB 應用被
Serlvet 容器加載時創建實例, 且數組越小越早被創建.

6.關於serlvet-mapping

1). 同一個Servlet可以被映射到多個URL上,即多個 元素的子元素的設置值可以是同一個
Servlet的註冊名。

2). 在Servlet映射到的URL中也可以使用 * 通配符,但是只能有兩種固定的格式:
一種格式是“.擴展名”,另一種格式是以正斜槓(/)開頭並以“/”結尾。

<servlet-mapping>
    <servlet-name>secondServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>]()

OR

<servlet-mapping>
    <servlet-name>secondServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

注意: 以下的既帶 ==/==又帶擴展名的不合法.

<servlet-mapping>
    <servlet-name>secondServlet</servlet-name>
    <url-pattern>/*.action</url-pattern>不合法
</servlet-mapping>

7. ServletConfig: 封裝了 Serlvet 的配置信息, 並且可以獲取 ServletContext 對象

  1. 配置 Serlvet 的初始化參數
<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.atguigu.javaweb.HelloServlet</servlet-class>

    <!-- 配置 Serlvet 的初始化參數。 且節點必須在 load-on-startup 節點的前面 -->
    <init-param>
        <!-- 參數名 -->
        <param-name>user</param-name>
        <!-- 參數值 -->
        <param-value>root</param-value>
    </init-param>

    <init-param>
        <param-name>password</param-name>
        <param-value>1230</param-value>
    </init-param>

    <load-on-startup>-1</load-on-startup>

</servlet>
  1. 獲取初始化參數:

    getInitParameter(String name): 獲取指定參數名的初始化參數

    getInitParameterNames(): 獲取參數名組成的 Enumeration 對象.

String user = servletConfig.getInitParameter("user");
System.out.println("user: " + user);

Enumeration<String> names = servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
    String name = names.nextElement();
    String value = servletConfig.getInitParameter(name);
    System.out.println("^^" + name + ": " + value);
}
  1. 獲取 Serlvet 的配置名稱(瞭解)

8. ServletContext

1). 可以由 SerlvetConfig 獲取:

ServletContext servletContext = servletConfig.getServletContext();

2). 該對象代表當前 WEB 應用: 可以認爲 SerlvetContext 是當前 WEB 應用的一個大管家. 可以從中獲取到當前 WEB 應用的各個方面的信息.

①. 獲取當前 WEB 應用的初始化參數

設置初始化參數: 可以爲所有的 Servlet 所獲取, 而 Servlet 的初始化參數只用那個 Serlvet 可以獲取.

<context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
</context-param>

方法:

getInitParameter
getInitParameterNames

代碼:

ServletContext servletContext = servletConfig.getServletContext();

String driver = servletContext.getInitParameter("driver");
System.out.println("driver:" + driver);

Enumeration<String> names2 = servletContext.getInitParameterNames();
while(names2.hasMoreElements()){
    String name = names2.nextElement();
    System.out.println("-->" + name); 
}

②. 獲取當前 WEB 應用的某一個文件在服務器上的絕對路徑, 而不是部署前的路徑

getRealPath(String path);

代碼:

String realPath = servletContext.getRealPath("/note.txt");
System.out.println(realPath);

③. 獲取當前 WEB 應用的名稱:

getContextPath()

代碼:

String contextPath = servletContext.getContextPath();
System.out.println(contextPath);

④. 獲取當前 WEB 應用的某一個文件對應的輸入流.

getResourceAsStream(String path): path 的 / 爲當前 WEB 應用的根目錄.

代碼:

InputStream is2 = servletContext.getResourceAsStream(“/WEB-INF/classes/jdbc.properties”);

⑤. 和 attribute 相關的幾個方法:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章