servlet

 

/**
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  只被 執行一次");
    }
}
建立一個MyServlet
<?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>
web.xml文件的配置

 

 

<%@ 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>
建立一個jsp頁面

 

運行以後後臺的輸出結果瀏覽器

 

<?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>
web.xml文件中設置url-pattern的匹配模式

 

    <!--配置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>
初始化參數的配置web.xml文件

 

    @Override
    public void init(ServletConfig config) throws ServletException {
        String initParameter = config.getInitParameter("name");
        System.out.println("初始化的參數是:"+initParameter);
        System.out.println("初始化信息  Init   項目啓動的時候不會初始化  " +
                "用戶訪問servlet的時候實例化 只被 執行一次");
    }
修改對應的MyServlet文件中的init方法

 

如今咱們在MyServlet中能夠訪問初始化的參數了!服務器

可是若是後續我又建立了其餘的Servlet,我還想用到初始化參數,並且初始化參數都是一致的! 怎麼辦?難道在每一個servlet節點下面都建立init-param嗎?app

不須要  咱們只須要 配置 context-param節點jsp

    <!--初始化ServletContex的參數信息   全部的servlet共享的參數 -->
    <context-param>
    <param-name>name</param-name>
    <param-value>小黑</param-value>
    </context-param>
web.xml文件中新增
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請求 每次都執行");
    }
}
建立一個新的Servlet獲取公共的初始化參數,必需要在web.xml文件中配置新建立的servlet節點
@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中的init方法

在瀏覽器中 分別輸入兩個servlet的地址,查看效果 都會得到初始化的參數ide

 

 

相關文章
相關標籤/搜索