javaweb-Servlet

* Servlet:server applet  運行在服務器端的小程序
* 概念:
* 定義了一個類被瀏覽器訪問的規則。是一個接口。
* 功能:
* 接受請求
* 處理請求
* 作出響應
* 快速入門:
0.創建web項目
1.定義一個Java類,實現Servlet接口
2.重寫所有未實現方法
3.配置Servlet,在web.xml
  <!-- 配置Servlet,爲了配置Servlet的訪問路徑 -->
  <servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
  </servlet>
  
  <servlet-mapping>
<servlet-name>demo1</servlet-name>
<!-- 設置訪問路徑,以/開頭  -->
<url-pattern>/demo</url-pattern>
  </servlet-mapping>
4.發佈項目
5.訪問/demo路徑訪問該Servlet
瀏覽器中:http://127.0.0.1:8080/項目名/web.xml中配置的虛擬路徑名

* 原理:
* 服務器通過反射的方式 創建Servlet對象,調用其方法


* servlet生命週期:
* 被創建:默認情況下,Servlet第一次被訪問時,被創建,調用init()方法。
  只執行一次。Servlet是單例的。可能會存在線程安全問題,儘量不要定義成員變量。
  可以配置Servlet的創建時機。在web.xml的<servlet>標籤中配置<load-on-startup>
<!-- 修改servlet的創建時機:
* 負整數:默認值 -1,在第一次被訪問時創建
* 非負整數:在服務器啓動時創建
* 數字越小,優先級越高
-->
<load-on-startup>0</load-on-startup>

* 提供服務:每一次被訪問時,會調用service()方法提供服務

* 被銷燬:服務器關閉時,servlet被銷燬。
  服務器正常關閉是,在銷燬Servlet之前,會調用destory()方法



* ServletConfig對象:配置對象   ServletConfig是一個接口 在Servlet初始化的時候 有服務器創建其子類對象傳遞給 init()方法
* 功能
1.獲取servlet初始化參數
*  String getInitParameter(String name)  
*  Enumeration getInitParameterNames()  
例子:
System.out.println(config.getInitParameter("src"));
System.out.println(config.getInitParameter("href"));
Enumeration<String> names = config.getInitParameterNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
System.out.println(key);
System.out.println(config.getInitParameter(key));


}


初始化參數可在 web.xml中配置
<servlet>
    <servlet-name>demo3</servlet-name>
    <servlet-class>com.click369.servlet.ServletDemo3</servlet-class>
<!--配置一些初始話參數-->
    <init-param>
      <param-name>src</param-name>
      <param-value>c://a.txt</param-value>
    </init-param>
    <init-param>
      <param-name>href</param-name>
      <param-value>d://a.txt</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo3</servlet-name>
    <url-pattern>/demo3</url-pattern>
  </servlet-mapping>
2.獲取ServletContext對象   因爲 ServletContext對象是由服務器創建出來的 我們要獲取其對象 得通過ServletConfig對象中的方法才能獲取出來
* ServletContext getServletContext()  
3.獲取servlet配置的名稱 就是在web.xml中給servlet起的名字
* String getServletName()  
* Servlet中對應getServletConfig方法。要想使用該方法獲取config對象。
則需要提升config對象的作用域。
1.聲明成員變量ServletConfig 
2.在init方法中賦值
3.在getServletConfig方法中獲取


* 創建方式:
1. 實現Servlet
2. 繼承GenericServlet
1.適配器
2.對ServletConfig進行優化。提升config對象的作用域
3.實現了ServletConfig接口,簡化對config對象的使用方式
3. 繼承HttpServlet:對http協議的封裝
* 重寫doGet()和doPost()...方法      注意去掉super.doGet(); 和 super.doPost();


* 自動創建Servlet
* 修改模板:
1 D:\MyEclipse\Common\plugins
2 搜索wizards
3.找到.jar 修改templemnts/Servlet.java





* ServletContext:代表了整個web應用
* 特點:
* 由服務器創建
* 單例


* 功能:
* 域對象:在域的範圍內共享數據
* 範圍:整個web應用
* 存儲所有用戶共享的數據
* setAttribute():
* getAttribute():
* removeAttribute():


* JavaWeb中四大域對象:
* ServletContext:代表整個web應用
* HttpSession:會話域
* ServletRequest:請求域
* PageContext:頁面域


* 獲取文件mime類型:
* getMimeType(文件名稱):
* 獲取文件運行的真實路徑:
* 真實路徑:指服務器路徑
* getRealPath():
* 1.webRoot下:項目根目錄下
* 2.WEB-INF下: 項目根目錄下/WEB-INF
* 3.src下: 項目根目錄下/WEB-INF/classes
 
* *注意:如果getRealPath("/"),獲取的路徑是項目的根目錄


//根目錄
ServletContext context = this.getServletContext();
String rootpath = context.getRealPath("/");
//System.out.println(rootpath);
//1.webRoot
String b = context.getRealPath("/b.txt");
System.out.println(b);
//2.WEB-INF
String c = context.getRealPath("/WEB-INF/c.txt");
System.out.println(c);
//3.src
String a = context.getRealPath("/WEB-INF/classes/a.txt");
System.out.println(a);


* ServletContext只能用於web環境。如果是非web環境,則使用ClassLoader來獲取真實路徑


比如我web項目裏有一個普通的java工具類 我想獲取文件的真實路徑 那我就用不了 ServletContext
//1.獲取該類對應的類加載器對象
ClassLoader loader = this.getClass().getClassLoader();
//2.獲取文件運行的真實路徑
URL url = loader.getResource("a.txt");
String path = url.getPath();
//注意類加載器來獲取路徑也有侷限性 只能獲取src目錄下的文件



































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