ServletConfig物件
ServletContext物件
request物件
response物件
3.1 ServletConfig物件
常用方法:getServletConfig();
功能:getServletName(); //獲取servlet的名稱,也就是我們在web.xml中配置的servlet-name
getServletContext(); //獲取ServletContext物件,該物件的作用看下面講解
getInitParameter(String); //獲取在servlet中初始化引數的值。這裡注意與全域性初始化引數的區分。這個獲取的只是在該servlet下的初始化引數
getInitParameterNames(); //獲取在Servlet中所有初始化引數的名字,也就是key值,可以透過key值,來找到各個初始化引數的value值。注意返回的是列舉型別
3.2. ServletContext物件
常用方法:getServletContext(); 、getServletConfig().getServletContext();
//這兩種獲取方式的區別就跟上面的解釋一樣,第一種是直接拿,在GenericServlet中已經幫我們用getServletConfig().getServletContext();拿到了ServletContext。我們只需要直接獲取就行了,第二種就相當於我們自己在獲取一遍,兩種讀是一樣的。
功能:tomcat為每個web專案都建立一個ServletContext例項,tomcat在啟動時建立,伺服器關閉時銷燬,在一個web專案中共享資料,管理web專案資源,為整個web配置公共資訊等,通俗點講,就是一個web專案,就存在一個ServletContext例項,每個Servlet讀可以訪問到它。
常用函式:
1. web專案中共享資料,getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)
* setAttribute(String name, Object obj) 在web專案範圍記憶體放內容,以便讓在web專案中所有的servlet讀能訪問到
* getAttribute(String name) 透過指定名稱獲得內容
* removeAttribute(String name) 透過指定名稱移除內容
2.整個web專案初始化引數 //這個就是全域性初始化引數,每個Servlet中都能獲取到該初始化值
* getInitPatameter(String name) //透過指定名稱獲取初始化值
* getInitParameterNames() //獲得列舉型別
3. getResourcePaths(java.lang.String path) 指定路徑下的所有內容。
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String username = "fei"; // 資料
servletContext.setAttribute("username",username);
}
}
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username = (String) context.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字"+username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
3.3 request物件
在Java Servlet API中,HttpServletRequest 物件代表客戶端傳送到伺服器的請求。這個物件包含了所有與HTTP請求相關的資訊,如請求引數、頭資訊、URL、HTTP方法等。 HttpServletRequest 物件由Servlet容器建立,並作為引數傳遞給Servlet的服務方法(如doGet, doPost等)。
- 請求行內容
- 請求頭
String contentType = request.getHeader("Content-Type");
- 路徑資訊
上下文路徑:getContextPath 返回Web應用的上下文路徑。
String contextPath = request.getContextPath();
路徑資訊:getPathInfo 提供額外的路徑資訊(URL中,Servlet路徑之後的部分)。
String pathInfo = request.getPathInfo();
- HTTP方法
可以透過 getMethod 方法獲取客戶端請求使用的HTTP方法,如GET、POST等。
String method = request.getMethod();
- 會話管理
HttpServletRequest 提供 getSession 方法來獲取當前的 HttpSession 物件。如果當前請求沒有會話,則可以建立一個新的會話。
HttpSession session = request.getSession();
HttpSession sessionWithNoNew = request.getSession(false); // 不建立新會話
3.4 response物件
在Java Servlet API中,HttpServletResponse物件是一個非常重要的元件,用於構建和傳送Web伺服器的響應給客戶端(通常是Web瀏覽器)。這個物件提供了一系列方法,可以用來設定響應的內容型別、狀態碼、管理cookie、重定向和輸出響應內容等。
- 設定響應狀態
HttpServletResponse 提供了方法來設定HTTP響應的狀態碼。例如:
response.setStatus(HttpServletResponse.SC_OK); // 設定狀態為200
- 寫入響應體
要傳送響應體,你可以使用 getWriter() 或 getOutputStream() 方法。這取決於你要傳送的資料型別(文字或二進位制):
PrintWriter out = response.getWriter();
out.println("<html><body><h1>Hello, World!</h1></body></html>");
或者,傳送二進位制資料(如影像檔案):
ServletOutputStream out = response.getOutputStream();
out.write(myByteArray);
- 設定響應頭
可以使用 setHeader 方法來設定HTTP頭資訊。
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"filename.txt\"");
- 重定向
response.sendRedirect("http://www.example.com");