web.xml文件配置、Servlet API、Servlet中的幾個接口、免xml.web配置


web.xml文件配置

<servlet>
    <servlet-name>Servlet類名稱</servlet-name>
    <servlet-class>Servlet所在位置</servlet-class>
    <load-on-startup>優先級</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>Servlet類名稱</servlet-name>
  <url-pattern>映射地址</url-pattern>
</servlet-mapping>
  • <load-on-startup>num</load-on-startup>
    • WEB應用程序在啟動時就會裝載並創建Servlet的實例對象,以及調用Servlet實例對象的init()方法應用:為WEB應用寫一個InitServlet,這個servlet為啟動時裝載num為優先級,數字小的優先級高(范圍:0-無窮)

Servlet API

HttpServletRequest 

HttpServletRequest 接口的使用和 JSP 內置對象的 request 對象非常類似。request 對象其實就是 HttpServletRequest
接口實現類的一個實例,不過其實例化過程是自動的無須自定義的。
在 Servlet 中 request 對象也是由容器初始化的,如果要在程序中使用 request 對象,直接使用就是,無需手動初始
化。

getRequestDispatcher(String path) 

構建一個轉發對象,參數值是跳轉的地址(下面有演示)

 getHeaderNames()  獲取所有請求頭的名字   (下面有演示)
getHeader(String name) 獲取對應請求頭名字的值
方法 說明
public String getContextPath()  返回請求的上下文路徑,此路徑以“/”開頭(即返回項目名稱)
public Cookie[] getCookies()  返回請求中發送的所有 cookie對象,返回值為 cookie 數組
public String getMethod() 返回請求所使用的 HTTP 類型,如 get、post 等
public String getQueryString()  返回請求中參數的字符串形式,如請求 MyServlet?username=timo,則返回 username=timo
public String getRequestURI() 返回主機名到請求參數之間部分的字符串形式(不帶IP)
public StringBuffer getRequestURL()

返回請求的 URL,此 URL 中不包含請求的參數。注意此方法返回的數據類型為
StringBuffer(帶IP)

public String getServletPath() 返回URI中的Servlet路徑(url-pattern中的值),不包含請求中的參數信息
public HttpSession getSession() 返回與請求關聯的 HttpSession對象
setAttribute(String name, Object o) 設置屬性值
getAttribute(String name) 獲取屬性值(需要根據設置的屬性進行類型強轉)
setCharacterEncoding(String env)  設置字符編碼集
getCharacterEncoding()  獲取字符編碼集
getParameter(String name) 獲取參數的值,即獲取?user=timo&age=26的值
getParameterValues(String name) 獲取參數的多個值,即獲取?user=timo&name=jinxin中name的多個值
 getParameterNames()  獲取請求參數名字的方法,即獲取?user=timo&age=26中的name跟age (下面有演示)
getRemoteAddr() 獲取發送請求者的IP
getRemoteHost() 獲取請求者的主機名稱,如果不能解析,直接返回IP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 1 // getRequestDispatcher()用法
 2 RequestDispatcher d = request.getRequestDispatcher("/index.jsp");  // 獲取轉發對象
 3 d.forword(request, response);  // 將request response傳到下一個頁面
 4 
 5 // getHeaderNames()跟getHeader(String name)聯用
 6 Enumeration<String> e = request.getHeaderNames();
 7 while(e.hasMoreElements()){
 8     String name = e.nextElement();
 9     System.out.print(name + ": ");
10     String names = request.getHeader(name);
11     System.out.println(names);
12 }
13 
14 // getParameterNames()跟getParameter(String name)聯用
15 Enumeration<String> e1 = request.getParameterNames();
16 while(e1.hasMoreElements()){
17     String np = e1.nextElement();
18     System.out.println(np + ":");
19     String namer = request.getParameter(np); 
20     System.out.println(namer); 
21 }
22             

HttpServletResponse 

HttpServletResponse 接口的使用和 JSP 內置對象的 response 對象非常類似。response 對象其實就是
HttpServletResponse 接口的實現類一個實例,不過其實例化過程是自動的無須自定義的。
在 Servlet 中 response 對象也是由容器初始化的,如果要在程序中使用 response 對象,直接使用就是,無需手動初
始化。

方法 說明
public void addCookie(Cookie cookie) 向客戶端寫入 cookie 信息
public void sendError(int sc)  發送一個錯誤狀態碼為 sc的錯誤響應到客戶端
public void sendError(int sc, String msg)

發送一個包含錯誤狀態碼及錯誤信息的響應到客戶端,參數 sc為錯誤狀態碼,參數 msg
為錯誤信息

public void sendRedirect(String location)  使用客戶端重定向到新的 URL,參數 location 為新的地址
setContentType(String type)  設置內容類型
setHeader(String name,String value)  設置響應頭信息
setStatus  設置響應狀態碼

 

 

 

 

 

 

 

 

 

 

 

 

 1 /**
 2 * 關於setHeader()的幾個常見用法
 3 */
 4 
 5 // 1秒鍾刷新一次頁面
 6 response.setHeader("refresh", "1");    
 7 
 8 // 2秒鍾跳轉到別的頁面
 9 response.setHeader("refresh", "2;URL=otherpage.jsp");
10 
11 // 設置無緩存
12 response.setHeader("expires", 0);
13 response.setHeader("cache-control", "no-cache");
14 response.setHeader("pragma", "no-cache");
15 
16 // 設置壓縮數據
17 response.setHeader("content-encoding", "gzip");

Servlet中的幾個接口

ServletContext接口

ServletContext 定義了一組方法,Servlet 可以使用這些方法和它的 Servlet 容器進行通訊。WEB 容器在啟動時,會為每個 web 應用程序都創建一個對應的 ServletContext 對象,這個對象就代表當前 web 應用。

ServletContext 對象被包含在 ServletConfig 對象中,開發人員在編寫 servlet 時,可以通過ServletConfig.getServletContext 方法獲得對 ServletContext 對象的引用。

由於一個 WEB 應用中的所有 Servlet 共享同一個 ServletContext 對象,因此 Servlet 對象之間可以通過 ServletContext 對象來實現通訊。ServletContext 對象通常也被稱之為 context 域對象。

ServletContext 接口的使用和 JSP 內置對象的 application 對象非常類似。application 對象其實就是ServletContext 接口實現類的一個實例,不過其實例化過程是自動的無須自定義的。

在 Servlet 中 application 對象必須通過 HttpServlet 接口的 getServletContext()方法獲得。將 ServletContext 作為域對象,實現多個 Servlet 對象共享數據

So,ServletContext最大的作用就是:可以實現各個Servlet之間的通信!!!!

獲取ServletContext對象:

    ServletContext con = request.getServletContext();

   ServletContext con = this.getServletConfig.getServletContext();

   ServletContext con = this.getServletContext();

   ServletContext con = session.getServletContext();

方法 說明
void setAttribute(String name,Object obj)  設置共享屬性
Object getAttribute(String name)  讀取共享屬性
void removeAttribute(String name) 移除共享屬性
ServletContext getContext(String uri)  獲取指定 uri的上下文對象
String getContextPath()  返回 web程序的上下文路徑
String getInitParameter(String param)  獲取上下文初始化參數,即獲取web.xml中的<context-param>標簽中的值
String getRealPath(String path)  返回資源在服務器上的真實路徑,例如C:\Program Files\...
RequestDispatcher getRequestDispatcher(String path)  返回一個包裝了路徑信息的 Dispatcher對象

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 1 /**
 2 * 關於getInitParameter()用法
 3 */
 4 
 5 // web.xml文件中
 6 <context-param>
 7     <param-name>username</param-name>
 8     <param-value>timo</param-value>
 9 </context-param>
10 <context-param>
11     <param-name>age</param-name>
12     <param-value>26</param-value>
13 </context-param>
14 
15 // Servlet中獲取參數
16 ServletContext con = request.getServletContext();
17 con.getInitParameter("username");
18 con.getInitParameter("age");

 ServletConfig接口

在 servlet 的配置項中,可以使用一個或多個<init-param>標簽為當前 servlet 配置一些初始化參數。

web 容器在創建 servlet 實例對象時,會自動將這些初始化參數封裝到一個 ServletConfig 對象中,並在調用 servlet 的 init 方法時,將 ServletConfig 對象作為參數傳遞給 servlet。

程序員通過操作 ServletConfig 對象就可以得到當前 servlet 的初始化參數信息

So,ServletConfig的作用是獲取web.xml文件中的初始化參數

獲取ServletConfig對象:

    ServletConfig config = this.getServletConfig();

方法 說明
public String getInitParameter(String name) 此方法返回 String 類型名稱為 name 的初始化參數值
public Enumeration getInitParameterNames() 獲取所有初始化參數名的枚舉集合
public ServletContext getServletContext()  用於獲取 ServletContext對象
public String getServletName()  返回 Servlet 對象的實例名,即獲取類名

 

 

 

 

 

 

 

/**
* 關於ServletConfig的用法
*/

// web.xml中
<servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>com.jinxin.day1.Test</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>timo</param-value>
    </init-param>
    <init-param>
        <param-name>age</param-name>
        <param-value>26</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/test</url-pattern>
</servlet-mapping>

// Servlet中獲取
ServletConfig config = this.getServletConfig();
// 通過getInitParameter()方法獲取
String user = config.getInitParameter("username");

// 通過getInitParameterNames()獲取所有的參數名
Enumeration<String> e = config.getInitParameterNames();
while(e.hasMoreElements()){
    String n = e.nextElement();
    String v = config.getInitParameter(n);
    System.out.println(v);
}

 RequestDispatcher接口

要完成請求轉發,那么就需要使用 javax.servlet. RequestDispatcher 接口 RequestDispatcher 對象由 Servlet 容器創建

  • 該對象封裝了一個由路徑標示的服務器資源
  • 利用該對象,可以把請求轉發給其他的 Servlet 或者 JSP 頁面

獲取RequestDispatcher對象:

    ServletRequest接口提供的方法

        ---- getRequestDispatcher(String path);   該方法中參數路徑可以以”/”開始,也可以不以”/”開始

    ServletContext接口提供的方法

        ---- getRequestDispatcher(String path);   該方法中參數路徑必須以”/”開始,表示相對於上下文根路徑

          ---- getNamedDispatcher(String name);   以部署描述符(web.xml)中的 Servlet 的名字作為參數,即要跳轉的Servlet類名

方法 說明

void forward(ServletRequest req,
ServletResponse resp)

將請求從一個 Servlet 傳遞給另外一個 Servlet、JSP、HTML

void include(ServletRequest req,
ServletResponse resp)

 用於在響應中包含其他資源(Servlet/JSP/HTML)的內容

 

 

 

 

 

 

 

 

幾種跳轉

一、通過request.getRequestDispatcher()跳轉

1 RequestDispatcher r = request.getRequestDispatcher("/index.jsp");
2 r.foeword(request, response);

 

二、通過response.sendRedierct()跳轉

三、通過response.setHeader()跳轉

1 response.setHeader("refresh', "2;URL=index.jsp");  // 兩秒之后跳轉到index.jsp頁面

 

四、通過RequestDispatcher對象實現servlet與Servlet之間的跳轉

1 ServletContext sc = request.getServletContext();
2 RequestDispatcher rd = sc.getNamedDispatcher("要跳轉的Servlet類名");
3 rd.forward(request, response);

免xml.web配置

在Servlet中注解配置
@WebServlet("/server/ServletProject")
or
@WebServlet(urlPatterns="/session", name="session", loadOnStartup=1)
替代了web.xml文件中的一堆標簽,不再需要寫
<server>
<server-name></server-name>
<server-class></server-class>
</server>
<server-mapping>
<server-name></server-name>
<url=pattern></url=pattern>
</server-mapping>
這一堆冗長的代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM