一、Servlet生命週期
1.1Servlet的生命週期
Servlet運行依靠servlet容器(tomcat)
Tomcat作用:
1.鏈接
2.容器(存放文件-web項目)
生命週期分爲:init:初始化;service:處理請求和響應;destroy:銷燬。
Init初始化類似於單例模式,僅初始化一次;
1.2配置Web.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>servlet-01-lifecycle</display-name>
<servlet> <servlet-name>TestCycleServlet</servlet-name> <servlet-class>cn.gzsxt.servlet.TestCycleServlet</servlet-class> <!-- 如果是負數或0 ,由tomcat 自動分配順序; 正整數 從小到大初始化 --> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>TestServlet02</servlet-name> <display-name>This is the display name of my J2EE component</display-name> <description>This is the description of my J2EE component</description> <servlet-class>cn.gzsxt.servlet.TestServlet02</servlet-class> <load-on-startup>2</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>TestCycleServlet</servlet-name> <url-pattern>/testCycleServlet.gzsxt</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TestServlet02</servlet-name> <url-pattern>/testServlet02.gzsxt</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> |
二、ServletRequest與ServletResponse
2.1ServletRequest
package cn.sxt.serRequest;
import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;
public class TestServletRequest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 請求行信息 getResponseLineMgs(request, response);
}
private void getResponseLineMgs(HttpServletRequest request, HttpServletResponse response) throws IOException { // 獲取項目名稱 String requestURI = request.getRequestURI(); System.out.println("requestURI:\t" + requestURI); // 獲取不含參數的全路徑 StringBuffer requestURL = request.getRequestURL(); System.out.println("requestURL:\t" + requestURL); // 獲取協議名稱 String scheme = request.getScheme(); System.out.println("scheme:\t" + scheme); // 獲取web應用名稱 String contextPath = request.getContextPath(); System.out.println("contextPath:\t" + contextPath); // 設置編碼集 不設置會造成瀏覽器亂碼 response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(this.getClass());
out.println("request測試,請求行信息。"); out.flush(); out.close(); }
} |
編碼集不設置爲造成瀏覽器端產生亂碼 |
package cn.sxt.serRequest;
import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;
public class TestServletRequest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 請求鏈接信息 getLinkedInfo(request, response);
}
private void getLinkedInfo(HttpServletRequest request, HttpServletResponse response) throws IOException { // 獲取客戶端的地址 String remoteAddr = request.getRemoteAddr(); System.out.println("remoteAddr: " + remoteAddr); // 獲取客戶端的端口號 int remotePort = request.getRemotePort(); System.out.println("remotePort: " + remotePort); // 獲取服務器的地址 String localAddr = request.getLocalAddr(); System.out.println("localAddr: " + localAddr);
// 獲取服務器的端口號 int localPort = request.getLocalPort(); System.out.println("localPort: " + localPort);
// 設置編碼集 response.setContentType("text/html;charset=utf-8"); // 設置流 PrintWriter writer = response.getWriter(); writer.println("request測試,鏈接信息。"); writer.flush(); writer.close(); } |
package cn.sxt.serRequest;
import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;
public class TestServletRequest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 請求行信息 // getResponseLineMgs(request, response); // 請求鏈接信息 //getLinkedInfo(request, response); // 獲取前端提交的數據 String parameter = request.getParameter("username"); System.out.println("parameter: "+parameter); String parameter1 = request.getParameter("pwd"); System.out.println("pwd: "+parameter1); response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.println("parameter測試。。。"); writer.flush(); writer.close();
} |
2.2 ServletResponse
使用Response設置head
package cn.sxt.servlet;
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;
public class TestResponse extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8"); // 設置3s後跳轉至指定頁面 response.addHeader("refresh", "3;url=ok.html"); PrintWriter out = response.getWriter(); out.println("測試 response"); out.flush(); out.close(); } } |
2.3 response對象作用域對象存儲數據
package cn.sxt.servlet;
import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class TestDownload extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 讀取文件 輸入流 InputStream is = this.getServletContext().getResourceAsStream( "/img/12.jpg"); // 輸出流將圖片下載到客戶端 ServletOutputStream os = response.getOutputStream();
// 設置瀏覽器打開文件的方式,打開一個窗口;設置mime類型的一種默認online response.addHeader("content-disposition", "attachment;filename=" + "12.jpg");
// int temp = 0; byte[] b = new byte[1024]; while ((temp = is.read(b)) != -1) { os.write(b, 0, temp); }
// 關流 os.flush(); os.close(); is.close(); }
} |
2.4請求轉發
package cn.sxt.servlet;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class TestDispatcher extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 轉發服務即減少了用字符串拼接html頁面的瑪法 // 轉發是服務器的行爲 一次請求和相應 RequestDispatcher requestDispatcher = request .getRequestDispatcher("/main.html"); // 加/ requestDispatcher.forward(request, response);
}
} |