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 Servlet
在 web.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 對象
- 配置 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>
獲取初始化參數:
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);
}
- 獲取 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 相關的幾個方法: