JAVA记录-Servlet介绍
1.什么是Servlet
Servlet是sun公司提供的一門用于開發動態web資源的技術。
Sun公司在其API中提供了一個servlet接口,用戶若想用發一個動態web資源(即開發一個Java程序向瀏覽器輸出數據),需要完成以下2個步驟:
1、編寫一個Java類,實現servlet接口。
2、把開發好的Java類部署到web服務器中。
按照一種約定俗成的稱呼習慣,通常我們也把實現了servlet接口的java程序,稱之為Servlet。
Servlet可以通過多種方式進行描述,具體取決于上下文。
- Servlet是一種用于創建Web應用程序的技術。
- Servlet是一個API,它提供了許多接口和類,包括文檔。
- Servlet是一個必須實現的接口,用于創建任何servlet。
- Servlet是一個擴展服務器功能并響應傳入請求的類。它可以響應任何類型的請求。
- Servlet是部署在服務器上的Web組件,用于創建動態網頁。
2.Servlet運行過程
Servlet程序是由WEB服務器調用,web服務器收到客戶端的Servlet訪問請求后:
①Web服務器首先檢查是否已經裝載并創建了該Servlet的實例對象。如果是,則直接執行第④步,否則,執行第②步。
②裝載并創建該Servlet的一個實例對象。?
③調用Servlet實例對象的init()方法。
④創建一個用于封裝HTTP請求消息的HttpServletRequest對象和一個代表HTTP響應消息的HttpServletResponse對象,然后調用Servlet的service()方法并將請求和響應對象作為參數傳遞進去。
⑤WEB應用程序被停止或重新啟動之前,Servlet引擎將卸載Servlet,并在卸載之前調用Servlet的destroy()方法。?
Web容器維護servlet實例的生命周期。下面來看看servlet的生命周期,主要分為以下幾個步驟:
模型流程圖如下所示 -
如上圖所示,servlet有三種狀態:新,就緒和結束。 如果servlet實例被創建,則servlet處于新狀態。 調用init()方法后,Servlet進入就緒狀態。 在就緒狀態下,servlet執行所有任務。當web容器調用destroy()方法時,它轉移到結束狀態。
1.加載Servlet類
類加載器負責加載servlet類。 當Web容器接收到servlet的第一個請求時,將加載servlet類。
2.創建Servlet實例
Web容器在加載servlet類之后創建一個servlet的實例。servlet實例在servlet生命周期中只創建一次。
3.調用init方法
Web容器在創建servlet實例后調用init方法一次。?init方法用于初始化servlet。 它是javax.servlet.Servlet接口的生命周期方法。init方法的語法如下:
public void init(ServletConfig config) throws ServletException4.調用service方法
每當接收到servlet的請求時,Web容器都會調用service方法。如果servlet未初始化,則遵循上述前三個步驟,然后調用service方法。 如果servlet被初始化,它調用service方法。 請注意,servlet僅初始化一次。 Servlet接口的service方法的語法如下:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException Java5.調用destroy方法
從服務中刪除servlet實例之前,Web容器調用destroy方法。它使servlet有機會清理所有資源,例如內存,線程等。Servlet接口的destroy方法的語法如下:
public void destroy() Java架構圖
下圖描述了一個典型的servlet生命周期場景。
- 首先將來到服務器的HTTP請求委托給servlet容器。
- servlet容器在調用service()方法之前加載servlet。
- 然后,servlet容器通過產生多個線程來處理多個請求,每個線程執行servlet的單個實例的service()方法。
要創建war文件,需要使用JDK的jar工具,可使用jar?和-c選項來創建war文件。
進入項目的目錄(WEB-INF外部),然后寫入以下命令:
jar -cvf projectname.war * Shell這里,-c用于創建文件-v生成詳細輸出,-f用于指定war文件名。
*(星號)符號表示此目錄的所有文件(包括子目錄)。
使用Eclipse導出War文件
在項目名稱上點擊右鍵,選擇:Export->War File
在web.xml文件中指定啟動時加載
如果load-on-startup元素值為正,則會在Web應用程序部署或服務器啟動時加載servlet。 它也被稱為servlet的預初始化。
可以指定傳遞servlet的值(load-on-startup元素指定的值)為正或為負。
load-on-startup元素的優點
servlet在第一個請求時被加載。這意味著它會在第一次請求時消耗更多的時間。 如果在web.xml中指定啟動加載,則servlet將在項目部署時間或服務器啟動時加載。 所以,響應第一個請求需要較少的時間。
下面來看一個簡單的web.xml配置load-on-startup元素的示例代碼 -
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>helloworld</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>home.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>com.yiibai.MyServlet</servlet-name> <servlet-class>MyServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet> <servlet-name>com.yiibai.BServlet</servlet-name> <servlet-class>BServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/index</url-pattern> </servlet-mapping> </web-app> XML定義了2個servlet,這兩個servlet將在項目部署或服務器啟動時加載。但是,首先將MyServlet加載,然后再加載BServlet。
傳遞負值
如果傳遞load-on-startup元素為負值,則此servlet將請求時第一個加載
ServletRequest接口
ServletRequest的對象用于向Servlet提供客戶端請求信息,如內容類型,內容長度,參數名稱和值,標題信息,屬性等。
ServletRequest接口的方法
ServletRequest接口中定義了很多方法。 其中一些如下:
| 1 | public String getParameter(String name) | 用于通過名稱獲取參數的值。 |
| 2 | public String[] getParameterValues(String name) | 返回一個包含給定參數名稱的所有值的String數組。它主要用于獲取多選列表框的值。 |
| 3 | java.util.Enumeration getParameterNames() | 返回所有請求參數名稱的枚舉。 |
| 4 | public int getContentLength() | 返回請求實體數據的大小,如果未知則返回-1。 |
| 5 | public String getCharacterEncoding() | 返回此請求輸入的字符集編碼。 |
| 6 | public String getContentType() | 返回請求實體數據的網絡媒體類型,如果未知則返回null。 |
| 7 | public ServletInputStream getInputStream() throws IOException | 返回用于讀取請求正文中二進制數據的輸入流。 |
| 8 | public abstract String getServerName() | 返回接收請求的服務器的主機名。 |
| 9 | public int getServerPort() | 返回接收到此請求的端口號。 |
ServletRequest顯示用戶名稱的示例
在這個例子中,在servlet中顯示用戶提交上來的名字。這里使用getParameter()方法返回指定請求參數名稱的值。
打開Eclipse,創建一個名稱為:ServletRequest?的動態Web網站項目,項目的目錄結構如下 -
關鍵代碼如下 -
ServletRequest.java?-
package com.yiibai;import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ServletRequest */ public class ServletRequest extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // response.getWriter().append("Served at: ").append(request.getContextPath()); response.setContentType("text/html"); PrintWriter pw = response.getWriter(); String name = request.getParameter("name");// will return value if (name == null || name == "") { name = ""; } pw.println("Welcome " + name); pw.close(); } } Javaindex.html?
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Welcome - ServletRequest</title> </head> <body> <div style="text-align: center;"> <form action="/ServletRequest/welcome"> 名字:<input type="text" name="name"><input type="submit" value="提交"> </form> </div> </body> </html> HTMLweb.xml?-
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>ServletRequest</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>ServletRequest</servlet-name> <servlet-class>com.yiibai.ServletRequest</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletRequest</servlet-name> <url-pattern>/welcome</url-pattern> </servlet-mapping> </web-app>3.Web.xml配置
<servlet><!-- 聲明Servlet對象 --><servlet-name>FirstServlet</servlet-name><!-- 上面一句指定Servlet對象的名稱 --><servlet-class>com.net.xinfang.servlet.FirstServlet</servlet-class><!-- 上面一句指定Servlet對象的完整位置,包含包名和類名 --></servlet><servlet-mapping><!-- 映射Servlet --><servlet-name>FirstServlet</servlet-name><!--<servlet-name>與上面<Servlet>標簽的<servlet-name>元素相對應,不可以隨便起名 --><url-pattern>/FirsetServlet</url-pattern><!-- 上面一句話用于映射訪問URL --></servlet-mapping>4.Servlet常用方法
- init():初始化方法
- getServletConfig():可以得到一個ServletConfig對象,利用這個參數可以得到初始化參數
- service():servlet對于請求的一個響應
- getServletInfo():返回servlet的相關信息
- destroy():銷毀Servlet。
5.實例
import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;@WebServlet("/FirstServlet") public class FirstServlet extends HttpServlet {private static final long serialVersionUID = 1L;public FirstServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");response.setCharacterEncoding("GBK");PrintWriter out=response.getWriter();out.print("<HTML>");out.println("<HEAD><TITLE>Servlet實例</TITLE></HEAD>");out.println("<BODY>");out.println("servlet實例");out.println(this.getClass());out.println("</BODY>");out.println("</HTML>");out.flush();out.close();response.getWriter().append("Served at: ").append(request.getContextPath());}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }6.訪問
http://192.168.66.66:8089/xinfang/FirstServlet
?
一、javax.servlet.Servlet接口?
servlet抽象集是javax.servlet.Servlet接口,它規定了必須由Servlet類實現由servlet引擎識別和管理的方法集。?
Servlet接口的基本目標是提供生命期方法init()、service()和destroy()方法。?
servlet接口中的方法????????
void init(ServletConfit config)throws ServletException???? 在servlet被載入后和實施服務前由servlet引擎進行?次性調用。如果init()產生溢出UnavailableException,則servle退出服務。????????
ServletConfig getServletConfig()???? 返回傳遞到servlet的init()方法的ServletConfig對象????????
void service(ServletRequest request, ServletResponse response)throws ServletException,IOException???? 處理request對象中描述的請求,使用response對象返回請求結果????????
String getServletInfo()???????? 返回描述servlet的一個字符串????????
void destory()???????? 當servlet將要卸載時由servlet引擎調用??????
二、javax.servlet.GenericServlet類(協議無關版本)?
GenericServlet是一種與協議無關的servlet,是一種跟本不對請求提供服務的servlet,而是簡單地從init()方法啟動后臺線程并在destory()中殺死。它可以用于模擬操作系統的端口監控進程。?
servlet API提供了Servlet接口的直接實現,稱為GenericServlet。此類提供除了service()方法外所有接口中方法的缺省實現。這意味著通過簡單地擴展GenericServlte可以編寫一個基本的servlet。?
除了Servlet接口外,GenericServlet也實現了ServletConfig接口,處理初始化參數和servlet上下文,提供對授權傳遞到init()方法中的ServletConfig對象的方法。?
GenericServlet類中的方法????????
void destory()???? 編飛組成單詞“destory”的一個注冊入口????????
String getInitParameter(String name)???? 返回具有指定名稱的初始化參數值。通過凋用config.getInitParameter(name)實現。????????
Enumeration getInitParameterNames()???? 返回此serv]et已編碼的所有初始化參數的?個枚舉類型值。調用config.getInitParameterNames()獲得列表。如果未提供初始化參數,則返回?個空的枚舉類型值(但不是null)????????
ServletConfig getServletConfig()???? 返回傳遞到init()方法的ServletConfig對象????????
ServletContext getServletContext()???? 返回在config對象中引用的ServletContext????????
String getServletInfo()???? 返回空字符串????????
void init(ServletConfig config)throws ServletException???? 在一實例變量中保存config對象。編寫組成單詞“init”的注冊入口,然后調用方法init()????????
void init()throws ServletException???? 可以被跳過以處理servlet初始化.在config對象被保存后init(ServletConfig config)的結尾處自動被調用.servlet作者經常會忘記調用super.init(config)?????????
void log(String msg)???? 編寫注冊servlet的入口.為此調用servlet上下文的log()方法.servlet的名字被加到消息文本的開頭。????????
void log(String msg,Throwable t)???? 編寫一個入口和servlet注冊的棧軌跡。此方法也是ServletContext中相應方法的一個副本。????????
abstract void service(Request request,Response response)throws ServletException,IOException???? 由servlet引擎調用為請求對象描述的請求提供服務。這是GenericServlet中唯一的抽象方法。因此它也是唯一必須被子類所覆蓋的方法。????????
String getServletName()???? 返回在Web應用發布描述器(web.xml)中指定的servlet的名字。??????
三、javax.servlet.http.HttpServlet類(HTTP版本)?
雖然servlet API允許擴展到其它協議,但最終所有的servlet均在Web環境下實施操作,只有幾種servlet直接擴展了GenericServlet。對servlet更一般的是擴展其HTTP子類HttpServlet。?
HttpServlet類通過調用指定到HTTP請求方法的方法實現service(),亦即對DELETE、HEAD、GET、OPTIONS、POST、PUT和TRACE,分別調用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()方法,將請求和響應對象置入其HTTP指定子類。?
??
HttpServlet類中的方法????????
Void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException???? 由servlet引擎調用用處理一個HTTP GET請求。輸入參數、HTTP頭標和輸入流可從request對象、response頭標和response對象的輸出流中獲得。????????
Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException???? 由servlet引擎調用用處理一個HTTP POST請求。輸入參數、HTTP頭標和輸入流可從request對象、response頭標和response對象的輸出流中獲得。????????
Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException???? 由servlet引擎調用用處理一個HTTP PUT請求。本方法中請求URI指出被載入的文件位置。????????
Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException???? 由servlet引擎調用用處理一個HTTP DELETE請求。請求URI指出資源被刪除。????????
Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException???? 由servlet引擎調用用處理一個HTTP OPTIONS請求。返回一個Allow響應頭標表明此servlet支持的HTTP方法。一個servlet不需要覆蓋此方法,因為HttpServlet方法已經實現規范所需的功能。????????
Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException???? 由servlet引擎調用用處理一個HTTP TRACE請求。使得請求頭標被反饋成響應關標。一個servlet不需要覆蓋此方法,因為HttpServlet方法已經實現HTTP規范所需的功能。????????
Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException???? Service(Request request,Response response)調用的一個立即方法,帶有指定HTTP請求和響應。此方法實際上將請求導向doGet()、doPost()等等。不應該覆蓋此方法。????????
Void service(Request request,Response response)throws ServletException,IOException???? 將請求和響應對象置入其指定的HTTP子類,并調用指定HTTP的service()方法。??????
四、javax.servlet.ServletRequest類(協議無關版本)?
ServletRequest接口封裝了客戶端請求的細節。它與協議無關,并有一個指定HTTP的子接口。?
ServletRequest主要處理:?
1.找到客戶端的主機名和IP地址?
2.檢索請求參數?
3.取得和設置屬性?
4.取得輸入和輸出流?
ServletRequest類中的方法????????
Object getAttribute(String name)???? 返回具有指定名字的請求屬性,如果不存在則返回null。屬性可由servlet引擎設置或使用setAttribute()顯式加入。????????
Enumeration getAttributeName()???? 返回請求中所有屬性名的枚舉。如果不存在屬性,則返回一個空的枚舉。????????
String getCharacteEncoding()???? 返回請求所用的字符編碼。????????
Int getContentLength()???? 指定輸入流的長度,如果未知則返回-1。????????
ServletInputStream getInputStream()throws IOException???? 返回與請求相關的(二進制)輸入流。可以調用getInputStream()或getReader()方法之一。????????
String getParameter(String name)???? 返回指定輸入參數,如果不存在,返回null。????????
Enumeration getParameterName()???? 返回請求中所有參數名的一個可能為空的枚舉。????????
String[] getParameterValues(String name)???? 返回指定輸入參數名的取值數組,如果取值不存在則返回null。它在參數具有多個取值的情況下十分有用。????????
String get Protocol()???? 返回請求使用協議的名稱和版本。????????
String getScheme()???? 返回請求URI的子串,但不包含第一個冒號前的內容。????????
String getServerName()???? 返回處理請求的服務器的主機名。????????
String getServerPort()???? 返回接收主機正在偵聽的端口號。????????
BufferedReader getReader()throws IOException???? 返回與請求相關輸入數據的一個字符解讀器。此方法與getInputStream()只可分別調用,不能同時使用。????????
String getRemoteAddr()???? 返回客戶端主機的數字型IP地址。????????
String getRemoteHost()???? 如果知道,返回客戶端主機名。????????
void setAttribute(String name,Object obj)???? 以指定名稱保存請求中指定對象的引用。????????
void removeAttribute(String name)???? 從請求中刪除指定屬性????????
Locale getLocale()???? 如果已知,返回客戶端的第一現場或者為null。????????
Enumeration getLocales()???? 如果已知,返回客戶端的第一現場的一個枚舉,否則返回服務器第一現場。????????
boolean isSecure()???? 如果請求使用了如HTTPS安全隧道,返回true????????
RequestDispatcher getRequestDispatcher(String name)???? 返回指定源名稱的RequsetDispatcher對象。??????
五、javax.servlet.http.HttpServletRequest接口(HTTP版本)?
HttpServletRequest類主要處理:?
1.讀取和寫入HTTP頭標?
2.取得和設置cookies?
3.取得路徑信息?
4.標識HTTP會話。?
HttpServletRequest接口中的方法????????
String getAuthType()???? 如果servlet由一個鑒定方案所保護,如HTTP基本鑒定,則返回方案名稱。????????
String getContextPath()???? 返回指定servlet上下文(web應用)的URL的前綴。????????
Cookie[] getCookies()???? 返回與請求相關cookie的一個數組。????????
Long getDateHeader(String name)???? 將輸出轉換成適合構建Date對象的long類型取值的getHeader()的簡化版。????????
String getHeader(String name)???? 返回指定的HTTP頭標指。如果其由請求給出,則名字應為大小寫不敏感。????????
Enumeration getHeaderNames()???? 返回請求給出的所有HTTP頭標名稱的權舉值。????????
Enumeration getHeaders(String name)???? 返回請求給出的指定類型的所有HTTP頭標的名稱的枚舉值,它對具有多取值的頭標非常有用。????????
int getIntHeader(String name)???? 將輸出轉換為int取值的getHeader()的簡化版。????????
String getMethod()???? 返回HTTP請求方法(例如GET、POST等等)????????
String getPathInfo()???? 返回在URL中指定的任意附加路徑信息。????????
String getPathTranslated()???? 返回在URL中指定的任意附加路徑信息,被子轉換成一個實際路徑。????????
String getQueryString()???? 返回查詢字符串,即URL中?后面的部份。????????
String getRemoteUser()???? 如果用戶通過鑒定,返回遠程用戶名,否則為null。????????
String getRequestedSessionId()???? 返回客戶端的會話ID????????
String getRequestURI()???? 返回URL中一部分,從“/”開始,包括上下文,但不包括任意查詢字符串。????????
String getServletPath()???? 返回請求URI上下文后的子串????????
HttpSession getSession()???? 調用getSession(true)的簡化版。????????
HttpSession getSession(boolean create)???? 返回當前HTTP會話,如果不存在,則創建一個新的會話,create參數為true。????????
Principal getPrincipal()???? 如果用戶通過鑒定,返回代表當前用戶的java.security.Principal對象,否則為null。????????
boolean isRequestedSessionIdFromCookie()???? 如果請求的會話ID由一個Cookie對象提供,則返回true,否則為false。????????
boolean isRequestedSessionIdFromURL()???? 如果請求的會話ID在請求URL中解碼,返回true,否則為false????????
boolean isRequestedSessionIdValid()???? 如果客戶端返回的會話ID仍然有效,則返回true。????????
Boolean isUserInRole(String role)???? 如果當前已通過鑒定用戶與指定角色相關,則返回true,如果不是或用戶未通過鑒定,則返回false。??????
六、javax.servlet.ServletResponse接口(協議無關版本)?
ServletResponse對象將一個servlet生成的結果傳到發出請求的客戶端。ServletResponse操作主要是作為輸出流及其內容類型和長度的包容器,它由servlet引擎創建.?
ServletResponse接口中的方法????????
void flushBuffer()throws IOException???? 發送緩存到客戶端的輸出內容。因為HTTP需要頭標在內容前被發送,調用此方法發送狀態行和響應頭標,以確認請求。????????
int getBufferSize()???? 返回響應使用的緩存大小。如果緩存無效則返加0。????????
String getCharacterEncoding()???? 返回響應使用字符解碼的名字。除非顯式設置,否則為ISO-8859-1????????
Locale getLocale()???? 返回響應使用的現場。除非用setLocale()修改,否則缺省為服務器現場。????????
OutputStream getOutputStream()throws IOException???? 返回用于將返回的二進制輸出寫入客戶端的流,此方法和getWrite()方法二者只能調用其一。????????
Writer getWriter()throws IOException???? 返回用于將返回的文本輸出寫入客戶端的一個字符寫入器,此方法和getOutputStream()二者只能調用其一。????????
boolean isCommitted()???? 如果狀態和響應頭標已經被發回客戶端,則返回true,在響應被確認后發送響應頭標毫無作用。????????
void reset()???? 清除輸出緩存及任何響應頭標。如果響應已得到確認,則引發事件IllegalStateException。????????
void setBufferSize(int nBytes)???? 設置響應的最小緩存大小。實際緩存大小可以更大,可以通過調用getBufferSize()得到。如果輸出已被寫入,則產生IllegalStateException。????????
void setContentLength(int length)???? 設置內容體的長度。????????
void setContentType(String type)???? 設置內容類型。在HTTP servlet中即設置Content-Type頭標。????????
void setLocale(Locale locale)???? 設置響應使用的現場。在HTTP servlet中,將對Content-Type頭標取值產生影響。??????
七、javax.servlet.http.HttpServletResponse接口(HTTP版本)?
HttpServletResponse加入表示狀態碼、狀態信息和響應頭標的方法,它還負責對URL中寫入一Web頁面的HTTP會話ID進行解碼。?
HttpServletResponse接口中的方法????????
void addCookie(Cookie cookie)???? 將一個Set-Cookie頭標加入到響應。????????
void addDateHeader(String name,long date)???? 使用指定日期值加入帶有指定名字(或代換所有此名字頭標)的響應頭標的方法。????????
void setHeader(String name,String value)???? 設置具有指定名字和取值的一個響應頭標。????????
void addIntHeader(String name,int value)???? 使用指定整型值加入帶有指定名字的響應頭標(或代換此名字的所有頭標)。????????
boolean containsHeader(String name)???? 如果響應已包含此名字的頭標,則返回true。????????
String encodeRedirectURL(String url)???? 如果客戶端不知道接受cookid,則向URL加入會話ID。第一種形式只對在sendRedirect()中使用的URL進行調用。其他被編碼的URLs應被傳遞到encodeURL()????????
String encodeURL(String url)????????????
void sendError(int status)???? 設置響應狀態碼為指定值(可選的狀態信息)。HttpServleetResponse定義了一個完整的整數常量集合表示有效狀態值。????????
void sendError(int status,String msg)????????????
void setStatus(int status)???? 設置響應狀態碼為指定指。只應用于不產生錯誤的響應,而錯誤響應使用sendError()。??????
八、javax.servlet.ServletContext接口?
一個servlet上下文是servlet引擎提供用來服務于Web應用的接口。Servlet上下文具有名字(它屬于Web應用的名字)唯一映射到文件系統的一個目錄。?
一個servlet可以通過ServletConfig對象的getServletContext()方法得到servlet上下文的引用,如果servlet直接或間接調用子類GenericServlet,則可以使用getServletContext()方法。?
Web應用中servlet可以使用servlet上下文得到:?
1.在調用期間保存和檢索屬性的功能,并與其他servlet共享這些屬性。?
2.讀取Web應用中文件內容和其他靜態資源的功能。?
3.互相發送請求的方式。?
4.記錄錯誤和信息化消息的功能。?
ServletContext接口中的方法????????
Object getAttribute(String name)???? 返回servlet上下文中具有指定名字的對象,或使用已指定名捆綁一個對象。從Web應用的標準觀點看,這樣的對象是全局對象,因為它們可以被同一servlet在另一時刻訪問。或上下文中任意其他servlet訪問。????????
void setAttribute(String name,Object obj)???? 設置servlet上下文中具有指定名字的對象。????????
Enumeration getAttributeNames()???? 返回保存在servlet上下文中所有屬性名字的枚舉。????????
ServletContext getContext(String uripath)???? 返回映射到另一URL的servlet上下文。在同一服務器中URL必須是以“/”開頭的絕對路徑。????????
String getInitParameter(String name)???? 返回指定上下文范圍的初始化參數值。此方法與ServletConfig方法名稱不一樣,后者只應用于已編碼的指定servlet。此方法應用于上下文中所有的參數。????????
Enumeration getInitParameterNames()???? 返回(可能為空)指定上下文范圍的初始化參數值名字的枚舉值。????????
int getMajorVersion()???? 返回此上下文中支持servlet API級別的最大和最小版本號。????????
int getMinorVersion()????????????
String getMimeType(String fileName)???? 返回指定文件名的MIME類型。典型情況是基于文件擴展名,而不是文件本身的內容(它可以不必存在)。如果MIME類型未知,可以返回null。????????
RequestDispatcher getNameDispatcher(String name)???? 返回具有指定名字或路徑的servlet或JSP的RequestDispatcher。如果不能創建RequestDispatch,返回null。如果指定路徑,必須心“/”開頭,并且是相對于servlet上下文的頂部。????????
RequestDispatcher getNameDispatcher(String path)????????????
String getRealPath(String path)???? 給定一個URI,返回文件系統中URI對應的絕對路徑。如果不能進行映射,返回null。????????
URL getResource(String path)???? 返回相對于servlet上下文或讀取URL的輸入流的指定絕對路徑相對應的URL,如果資源不存在則返回null。????????
InputStream getResourceAsStream(String path)????????????
String getServerInfo()???? 返順servlet引擎的名稱和版本號。????????
void log(String message)?
void log(String message,Throwable t)???? 將一個消息寫入servlet注冊,如果給出Throwable參數,則包含棧軌跡。????????
void removeAttribute(String name)???? 從servlet上下文中刪除指定屬性。??????
九、javax.servlet.http.HttpSession接口?
HttpSession類似于哈希表的接口,它提供了setAttribute()和getAttribute()方法存儲和檢索對象。HttpSession提供了一個會話ID關鍵字,一個參與會話行為的客戶端在同一會話的請求中存儲和返回它。servlet引擎查找適當的會話對象,并使之對當前請求可用。?
HttpSession接口中的方法????????
Object getAttribute(String name)???? 將會話中一個對象保存為指定名字,返回或刪除前面保存的此名稱對象。 void setAttribute(String name,Object value)????????????
void removeAttribute(String name)????????????
Enumeration getAttributeName()???? 返回捆綁到當前會話的所有屬性名的枚舉值。????????
long getCreationTime()???? 返回表示會話創建和最后訪問日期和時間的一個長整型,該整型形式為java.util.Date()構造器中使用的形式。????????
long getLastAccessedTime()????????????
String getId()???? 返回會話ID,servlet引擎設置的一個唯一關鍵字。????????
ing getMaxInactiveInterval()???? 如果沒有與客戶端發生交互,設置和返回會話存活的最大秒數。????????
void setMasInactiveInterval(int seconds)????????????
void invalidate()???? 使得會話被終止,釋放其中任意對象。????????
boolean isNew()???? 如果客戶端仍未加入到會話,返回true。當會話首次被創建,會話ID被傳入客戶端,但客戶端仍未進行包含此會話ID的第二次請示時,返回true。
轉載于:https://www.cnblogs.com/xinfang520/p/7692747.html
總結
以上是生活随笔為你收集整理的JAVA记录-Servlet介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq音乐如何一起听歌(PC版官方网站)
- 下一篇: TCP Congestion Contr