/** Model1: jsp ---> 顯示頁面 業務邏輯 javaBean Model2 jsp-->頁面顯示 servlet -->業務邏輯 javaBean servlet: 01.實現類servlet接口的類 就是 servlet ! 咱們常認爲的! 02.就是一個servlet接口! 實現servlet的三種方式 01.實現Servlet接口 02.繼承GenericServlet 03.繼承 HttpServlet 經常使用的 HttpServlet--》繼承GenericServlet--》實現Servlet接口 servlet的生命週期: 1.客戶端發送請求---》servlet 2.根據用戶的請求 查詢對應的servlet 3.加載servlet到內存中 4.servlet實例化--》調用init()初始化servlet 5.根據用戶的請求方式,service()來派發到不一樣的方法處理(doGet(),doPost()) 6.服務器關閉,執行destroy()銷燬servlet */
sevlet的功能:css
01.接收用戶的請求 post get 文件上傳 下載html
02.處理請求 取得前臺的值 調用後臺service層的代碼java
03.返回響應 重定向 轉發 錯誤界面web
/* * 實現servlet的三種方式 * 01.實現Servlet接口 * 02.繼承GenericServlet抽象類 * 03.繼承HttpServlet抽象類 經常使用的方式 * * HttpServlet 繼承 GenericServlet * GenericServlet 實現 Servlet 接口 * * * HttpServletRequest 繼承了 ServletRequest * HttpServletResponse 繼承了 ServletResponse */ public class MyServlet extends HttpServlet { //經常使用的方式 @Override public void init(ServletConfig config) throws ServletException { System.out.println("初始化信息 Init 項目啓動的時候不會初始化 " + "用戶訪問servlet的時候實例化 只被 執行一次"); } @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("派發器 用戶每請求一次,就會執行一次,接收用戶的請求時get仍是post"); super.service(request, response); //必須是 調用 父類的service方法 不然 死循環! } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("這是一個DoGet請求 只要是get請求 每次都執行"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("這是一個DoPost請求 "); } @Override public void destroy() { System.out.println("關閉服務器的時候 銷燬 destroy 只被 執行一次"); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!--配置servlet --> <servlet> <!-- 定義servlet --> <servlet-name>myServlet</servlet-name> <servlet-class>cn.bdqn.servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/myServlet</url-pattern> <!-- 控制用戶的請求路徑 --> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="myServlet" method="post"> <button type="submit">提交</button> </form> </body> </html>
運行以後後臺的輸出結果瀏覽器
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!--配置servlet --> <servlet> <!-- 定義servlet --> <servlet-name>myServlet</servlet-name> <servlet-class>cn.bdqn.servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/jsp/</url-pattern> <!-- 控制用戶的請求路徑 --> </servlet-mapping> <!-- url-pattern的四種匹配模式 / 表明項目的根目錄 01.精確匹配 /myServlet ==> localhost:8080/項目名/myServlet 02.全局匹配 /* 匹配到項目下的 全部請求 localhost:8080/項目名/sasasa 能匹配 localhost:8080/項目名/1234 能匹配 03.後綴匹配 *.do 前面無論輸入的是什麼,可是必須有.do 04.目錄匹配 /jsp/* ===》localhost:8080/項目名/jsp/隨便輸入 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
<!--配置servlet --> <servlet> <!-- 定義servlet --> <servlet-name>myServlet</servlet-name> <servlet-class>cn.bdqn.servlet.MyServlet</servlet-class> <!--初始化須要的參數信息 --> <init-param> <param-name>name</param-name> <param-value>小黑</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> <!-- 控制用戶的請求路徑 --> </servlet-mapping>
@Override public void init(ServletConfig config) throws ServletException { String initParameter = config.getInitParameter("name"); System.out.println("初始化的參數是:"+initParameter); System.out.println("初始化信息 Init 項目啓動的時候不會初始化 " + "用戶訪問servlet的時候實例化 只被 執行一次"); }
如今咱們在MyServlet中能夠訪問初始化的參數了!服務器
可是若是後續我又建立了其餘的Servlet,我還想用到初始化參數,並且初始化參數都是一致的! 怎麼辦?難道在每一個servlet節點下面都建立init-param嗎?app
不須要 咱們只須要 配置 context-param節點jsp
<!--初始化ServletContex的參數信息 全部的servlet共享的參數 --> <context-param> <param-name>name</param-name> <param-value>小黑</param-value> </context-param>
public class MyServlet2 extends HttpServlet { /* * ServletContext:多個servlet共享的資源! * 若是咱們把每個Servlet當成一個局部變量, * 那麼ServletContext就是一個全局的! */ @Override public void init(ServletConfig config) throws ServletException { String initParameter = config.getServletContext().getInitParameter("name"); System.out.println("MyServlet2初始化的參數是:"+initParameter); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String initParameter =request.getServletContext().getInitParameter("name"); System.out.println("MyServlet2初始化的參數是:"+initParameter); System.out.println("這是一個DoGet請求 只要是get請求 每次都執行"); } }
@Override public void init(ServletConfig config) throws ServletException { String initParameter =config.getServletContext().getInitParameter("name"); System.out.println("MyServlet初始化的參數是:" + initParameter); System.out.println("MyServlet初始化信息 Init 項目啓動的時候不會初始化 " + "用戶訪問servlet的時候實例化 只被 執行一次"); }
在瀏覽器中 分別輸入兩個servlet的地址,查看效果 都會得到初始化的參數ide