這學期學Java Web,把相關知識點理了一下
Servlet介面
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
- void init(ServletConfig var1):該方法接收一個ServletConfig型別的引數,Servlet容器通過這個引數向Servlet傳遞初始化配置資訊
- ServletConfig getServletConfig():返回Servlet的ServletConfig物件,ServletConfig物件中包含Servlet的配置資訊
- void service():生成HTTP響應
- String getServletInfo():返回一個包含該Servlet資訊的字串
- void destroy():當伺服器關閉或者Servlet物件被移除時,Servlet容器便會呼叫這個方法銷燬Servlet物件
一般自己實現的Servlet類都繼承自HttpServlet,而響應HTTP請求也不是直接重寫service()方法而是重寫HttpServlet的doGet()和doPost()方法,並且使用HttpServletRequset和HttpServletResponse而不是ServletRequest和ServletResponse
Servlet的實現,ServletConfig與ServletContext
@WebServlet(name = "MyServlet",urlPatterns = {"/myservlet"},
initParams = {@WebInitParam(name = "age",value = "20"),
@WebInitParam(name = "name",value = "MerryiTuXz")})
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig();
String name = servletConfig.getInitParameter("name"); //獲取初始化引數
System.out.println(name); // `MerryiTuXz`
ServletContext servletContext = getServletContext();
servletContext.setAttribute("date",new Date());
Date date = (Date) servletContext.getAttribute("date");
System.out.println(date); // 列印訪問頁面的時間
Enumeration<String> attributeNames = servletContext.getAttributeNames();
while (attributeNames.hasMoreElements())
System.out.println(attributeNames.nextElement());
/*javax.servlet.context.tempdir
date
org.apache.catalina.resources
org.apache.tomcat.InstanceManager
org.apache.catalina.jsp_classpath
javax.websocket.server.ServerContainer
org.apache.jasper.compiler.ELInterpreter
org.apache.jasper.compiler.TldCache
org.apache.tomcat.JarScanner
org.apache.jasper.runtime.JspApplicationContextImpl*/
servletContext.removeAttribute("date");
System.out.println(servletContext.getAttribute("date")); // `null`
}
}
-
@WebServlet註解配置Servlet
name:Servlet的名字
urlPatterns:對映路徑
initParams(可選):通過initParams和@WebInitParam註解傳入初始化引數,一個初始引數中有name和value兩部分。初始化引數可以通過ServletConfig的getInitParameter(String s)方法獲取
-
ServletConfig
當Servlet容器初始化一個Servlet時,會將該Servlet的配置資訊封裝到一個ServletConfig物件中,並通過呼叫init(ServletConfig config)方法將ServletConfig物件傳遞給Servlet
-
ServletContext
ServletContext代表當前的Servlet應用程式,每個Web應用程式只有唯一一個ServletContext物件
可以通過呼叫getServletContext()方法獲得ServletContext物件
ServletContext常用方法:
方法 功能 void setAttribute(String name, Object obj) 設定ServletContext的屬性,其中name是屬性名,obj是屬性值 Object getAttribute(String name) 獲取ServletContext中名為name的屬性的值(沒有則返回null) void removeAttribute(String name) 從ServletContext中刪除名為name的屬性的值 Enumeration getAttributeNames() 返回一個包含了存放在ServletContext中的所有的屬性的Enumeration物件
HttpServletRequest與HttpServletResponse
HttpServletResponse
HttpServletResponse被用來封裝HTTP響應訊息
常用方法如下:
方法 | 功能 |
---|---|
PrintWriter getWriter() | 返回一個可以向客戶端傳送訊息的PrintWriter |
void setContentType(String var1) | 設定Servlet輸出內容的MIME型別,對於HTTP協議來說就是設定Content-Type響應頭欄位的值 【解決中文亂碼:response.setContentType(“text/html;charset=utf-8”);】 |
void addHeader(String name, String value) | 設定HTTP協議的響應頭欄位 |
void addCookie(Cookie cookie) | 給響應物件新增一個Cookie |
HttpServletRequest
HttpServletRequest被用來封裝HTTP請求訊息
常用方法如下:
方法 | 功能 |
---|---|
String getContentType() | 返回MIME型別,對HTTP協議來說就是返回Content-Type頭欄位的值 |
int getContentLength() | 返回響應資料的大小(Content-Length頭欄位的值) |
String getMethod() | 返回HTTP請求的方法的名稱(GET,PUT,POST……) |
String getHeader(String name) | 返回指定HTTP首部的值 |
String getContextPath() | 獲取URL中Web應用程式的路徑 |
String getQueryString() | 獲取請求行中的引數部分,也就是資源路徑後面問號(?)以後的所有內容 |
Cookie[] getCookies() | 返回一個Cookie陣列 |
HttpSession getSession() | 返回與這個請求相關的Session物件,如果沒有則建立一個新的會話物件 |
String getParameter(String var1) | 獲取表單(或查詢字串)請求中指定名稱的引數的值 |
String[] getParameterValues(String var1) | 獲取表單(或查詢字串)請求中指定名稱的引數對應的所有的值 |
Enumeration | 返回一個包含請求訊息中所有引數名字的Enumeration物件 |