Servlet
Servlet是一個(gè)Java程序,是在服務(wù)器上運(yùn)行以處理客戶端請(qǐng)求并做出響應(yīng)的程序。
初識(shí)Servlet
-
步驟1:導(dǎo)入所需的包、處理請(qǐng)求的方法、將數(shù)據(jù)發(fā)送給客戶端
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; //繼承HttpServlet類(lèi) public class HelloServletTest extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println(" <head><title>Servlet</title></head>"); out.println(" <body>"); out.println("你好,歡迎來(lái)到Servlet世界"); out.println(" </body>"); out.println("</html>"); out.close(); } }
-
步驟2:在web.xml文件中配置Servlet
<web-app> <servlet> <servlet-name> HelloServlet </servlet-name> <servlet-class> com.HelloServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> HelloServlet </servlet-name> <url-pattern> /HelloServlet </url-pattern> </servlet-mapping> </web-app>
注意:
- <servlet-name標(biāo)簽中的名稱(chēng)必須相同
- 第一個(gè)是設(shè)定當(dāng)前servlet的內(nèi)部名稱(chēng)(對(duì)象名)
- 第二個(gè) 通過(guò)servlet內(nèi)部名把訪問(wèn)路徑與Class綁定
- <servlet-class標(biāo)簽中是完整的包名+類(lèi)名,指定對(duì)應(yīng)servlet內(nèi)部相關(guān)類(lèi)
- <url-pattern標(biāo)簽中訪問(wèn)Servlet的URL,用戶訪問(wèn)servlet時(shí)的路徑名,一定要加上” / ”
- <servlet-name標(biāo)簽中的名稱(chēng)必須相同
servlet的生命周期
- 實(shí)例化:Servlet 容器創(chuàng)建 Servlet 的實(shí)例
- 初始化 :該容器調(diào)用 init() 方法
- 請(qǐng)求處理:如果請(qǐng)求 Servlet,則容器調(diào)用 service() 方法
- 服務(wù)終止:銷(xiāo)毀實(shí)例之前調(diào)用 destroy() 方法
servlet的相關(guān)類(lèi)
Servlet 、 ServletConfig ——接口
|
GenericServlet ——抽象類(lèi)
|
HttpServlet ——抽象類(lèi)
Servlet接口
- 定義了所有Servlet需要實(shí)現(xiàn)的方法
ServletConfig接口
- 在Servlet初始化過(guò)程中獲取配置信息
- 一個(gè)Servlet只有一個(gè)ServletConfig對(duì)象
GenericServlet抽象類(lèi)
- 提供了Servlet與ServletConfig接口的默認(rèn)實(shí)現(xiàn)方法
HttpServlet概述
- 繼承于GenericServlet
- 處理HTTP協(xié)議的請(qǐng)求和響應(yīng)
請(qǐng)求、響應(yīng)相關(guān)接口
請(qǐng)求:
ServletRequest
|
HttpServletRequest
響應(yīng):
ServletResponse
|
HttpServletResponse
說(shuō)明我們創(chuàng)建Servlet都是繼承自HttpServlet
ServletRequest概述
- 獲取客戶端的請(qǐng)求數(shù)據(jù)
- ServletRequest的常用方法
- public Object getAttribute(String name):獲取名稱(chēng)為name的屬性值
- public void setAttribute(String name, Object object):在請(qǐng)求中保存名稱(chēng)為name的屬性
- public void removeAttribute(String name):清除請(qǐng)求中名字為name的屬性
HttpServletRequest概述
- 除了繼承ServletRequest接口中的方法,還增加了一些用于讀取請(qǐng)求信息的方法
- HttpServletRequest的常用方法
- public String getContextPath():返回請(qǐng)求URI中表示請(qǐng)求上下文的路徑,上下文路徑是請(qǐng)求URI的開(kāi)始部分
- public Cookie[ ] getCookies():返回客戶端在此次請(qǐng)求中發(fā)送的所有cookie對(duì)象
- public HttpSession getSession():返回和此次請(qǐng)求相關(guān)聯(lián)的session,如果沒(méi)有給客戶端分配session,則創(chuàng)建一個(gè)新的session
- public String getMethod():返回此次請(qǐng)求所使用的HTTP方法的名字,如GET、POST
ServletResponse概述
- 向客戶端發(fā)送響應(yīng)數(shù)據(jù)
- ServletResponse接口的常用方法
- public PrintWriter getWriter():返回PrintWrite對(duì)象,用于向客戶端發(fā)送文本
- public String getCharacterEncoding():返回在響應(yīng)中發(fā)送的正文所使用的字符編碼
- public void setCharacterEncoding():設(shè)置發(fā)送到客戶端的響應(yīng)的字符編碼
- public void setContentType(String type):設(shè)置發(fā)送到客戶端的響應(yīng)的內(nèi)容類(lèi)型,此時(shí)響應(yīng)的狀態(tài)屬于尚未提交
HttpServletResponse概述
- 除了繼承ServletResponse接口中的方法,還增加了新的方法
- HttpServletResponse的常用方法
- public void addCookie(Cookie cookie):增加一個(gè)cookie到響應(yīng)中,這個(gè)方法可多次調(diào)用,設(shè)置多個(gè)cookie
- public void addHeader(String name,String value):將一個(gè)名稱(chēng)為name,值為value的響應(yīng)報(bào)頭添加到響應(yīng)中
- public void sendRedirect(String location):發(fā)送一個(gè)臨時(shí)的重定向響應(yīng)到客戶端,以便客戶端訪問(wèn)新的URL
- public void encodeURL(String url):使用session ID對(duì)用于重定向的URL進(jìn)行編碼