Servlet

 
JavaWeb核心之Servlet
  教學導航
教學目標    案例1、完成用戶登陸功能
案例2、記錄成功登陸系統的人次
教學方法    

1、Servlet簡介
1.什麼是Servlet
Servlet 運行在服務端的Java小程序,是sun公司提供一套規範(接口),用來處理客戶端請求、響應給瀏覽器的動態資源。但servlet的實質就是java代碼,經過java的API    動態的向客戶端輸出內容

servlet規範:包含三個技術點
1)servlet技術
2)filter技術---過濾器
3)listener技術---監聽器

2.Servlet快速入門
實現步驟:
1)建立類實現Servlet接口
2)覆蓋還沒有實現的方法---service方法
3)在web.xml進行servlet的配置

但在實際開發中,咱們不會直接去實現Servlet接口,由於那樣須要覆蓋的方法太多,    咱們通常建立類繼承HttpServlet
實現步驟:
1)建立類繼承HttpServlet類
2)覆蓋doGet和doPost
3)在web.xml中進行servlet的配置


畫圖描述整個訪問過程:












2、Servlet的API(生命週期)
(1)Servlet接口中的方法
1)init(ServletConfig config)
什麼時候執行:servlet對象建立的時候執行
ServletConfig : 表明的是該servlet對象的配置信息

2)service(ServletRequest request,ServletResponse response)
什麼時候執行:每次請求都會執行
ServletRequest :表明請求 認爲ServletRequest 內部封裝的是                                        http請求的信息
ServletResponse :表明響應 認爲要封裝的是響應的信息

3)destroy()
什麼時候執行:servlet銷燬的時候執行


(2)HttpServlet類的方法
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()

(3)Servlet的生命週期(面試題)
1)Servlet什麼時候建立
默認第一次訪問servlet時建立該對象

2)Servlet什麼時候銷燬
服務器關閉servlet就銷燬了

3)每次訪問必然執行的方法
service(ServletRequest req, ServletResponse res)方法


問題:對XXXServlet進行了10次訪問,init(),destory(),service(),doGet(),doPost()    一共執行力多少次?request對象建立幾個?response建立幾個?

3、Servlet的配置
1.基本配置

其中url-pattern的配置方式:
1)徹底匹配 訪問的資源與配置的資源徹底相同才能訪問到
2)目錄匹配 格式:/虛擬的目錄../*   *表明任意
3)擴展名匹配 格式:*.擴展名

注意:第二種與第三種不要混用 /aaa/bbb/*.abcd(錯誤的)




2.服務器啓動實例化Servlet配置
Servlet的什麼時候建立:默認第一次訪問時建立
爲何是默認?
當在servlet的配置時 加上一個配置 <load-on-startup> servlet對象在服務器啓動    時就建立
3.缺省Servlet
能夠將url-pattern配置一個/,表明該servlet是缺省的servlet
什麼是缺省的servlet?
當你訪問資源地址全部的servlet都不匹配時 , 缺省的servlet負責處理

其實,web應用中全部的資源的響應都是servlet負責,包括靜態資源

4.歡迎頁面



4、ServletContext對象
1.什麼是ServletContext對象
ServletContext表明是一個web應用的環境(上下文)對象,ServletContext對象    內部封裝是該web應用的信息,ServletContext對象一個web應用只有一個

問題:一個web應用有幾個servlet對象?----多個


ServletContext對象的生命週期?
建立:該web應用被加載(服務器啓動或發佈web應用(前提,服務器啓動狀        態))
銷燬:web應用被卸載(服務器關閉,移除該web應用)

2.怎樣得到ServletContext對象
1)ServletContext servletContext = config.getServletContext();
2)ServletContext servletContext = this.getServletContext();


3.ServletContext的做用
(1)得到web應用全局的初始化參數
web.xml中配置初始化參數

經過context對象得到參數






(2)得到web應用中任何資源的絕對路徑(重要 重要 重要)
方法:String path = context.getRealPath(相對於該web應用的相對地址);

(3)ServletContext是一個域對象(重要 重要 重要)
什麼是域對象?什麼是域?
存儲數據的區域就是域對象

ServletContext域對象的做用範圍:整個web應(全部的web資源均可以隨意向    servletcontext域中存取數據,數據能夠共享)


域對象的通用的方法:
setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);
JavaWeb核心之Servlet

我的總結:new--servlet---設置urlpattern(web.xml不用操做),servletcontext 3個功能 html

 

servlet簡介java

Servlet 運行在服務端(tomcat)的Java小程序,是sun公司提供一套規範(接口),用來處理客戶端請求、響應給瀏覽器的動態資源。但servlet的實質就是java代碼,經過java的API  動態的向客戶端輸出內容mysql

包含三個技術點:1.servlet   2filter技術--過濾器 3listener技術--監聽器web

快速入門:面試

1)建立類實現Servlet接口sql

2)覆蓋還沒有實現的方法---service方法數據庫

3)在web.xml進行servlet的配置apache

package com.heima.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class QuickStartServlet implements Servlet {

    @Override
    public void destroy() {
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        System.out.println("qucikstartservlet running..");
        HttpServletResponse response=(HttpServletResponse) arg1;
        response.getWriter().write("heihei");
    }

}
/web13/src/com/heima/servlet/QuickStartServlet.java
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>web13</display-name>
  <servlet>
  <servlet-name>abc</servlet-name>
  <servlet-class>com.heima.servlet.QuickStartServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>abc</servlet-name>
  <url-pattern>/qqqq</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>
/web13/WebContent/WEB-INF/web.xml

servlet的api小程序

(1)Servlet接口中的方法

1)init(ServletConfig config)api

什麼時候執行:servlet對象建立的時候執行(tomcat建立該對象)

ServletConfig : 表明的是該servlet對象的配置信息

<servlet>
      <servlet-name>abc</servlet-name>
      <servlet-class>com.heima.servlet.QuickStartServlet</servlet-class>
      <init-param>
          <param-name>url</param-name>
          <param-value>jdbc:mysql///abc</param-value>
      </init-param>
  </servlet>
web.xml
@Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("initing...");
        //1.獲得servlet的name
        String servletName=config.getServletName();
        System.out.println(servletName);//abc
        //2.得到該servlet的初始化參數
        String initParameter=config.getInitParameter("url");
        System.out.println(initParameter);
        //3.得到ServletContext對象
        ServletContext servletContext=config.getServletContext();    
    }
init

 

2)service(ServletRequest request,ServletResponse response)

什麼時候執行:每次請求都會執行

ServletRequest :表明請求 認爲ServletRequest 內部封裝的是                                                     http請求的信息

ServletResponse :表明響應 認爲要封裝的是響應的信息

3)destroy()

什麼時候執行:servlet銷燬的時候執行

(1)Servlet的生命週期(面試題)

1)Servlet什麼時候建立

默認第一次訪問servlet時建立該對象

2)Servlet什麼時候銷燬

服務器關閉servlet就銷燬了

 3)每次訪問必然執行的方法

service(ServletRequest req, ServletResponse res)方法

servletrequest內部封裝的是http請求的信息

servletresponse表明響應認爲要封裝的是響應的信息

servlet的執行過程

servlet配置

1.基本配置

2.服務器啓動實例化Servlet配置

Servlet的什麼時候建立:默認第一次訪問時建立

爲何是默認?

當在servlet的配置時 加上一個配置 <load-on-startup> servlet對象在服務器啓動   時就建立

<servlet>
      <servlet-name>abc</servlet-name>
      <servlet-class>com.heima.servlet.QuickStartServlet</servlet-class>
      <init-param>
          <param-name>url</param-name>
          <param-value>jdbc:mysql:///abc1</param-value>
      </init-param>
      <load-on-startup>3</load-on-startup>
  </servlet>
View Code

數字表明優先級,越小優先級越高

3.缺省servlet

能夠將url-pattern配置一個/,表明該servlet是缺省的servlet

什麼是缺省的servlet?

當你訪問資源地址全部的servlet都不匹配時 , 缺省的servlet負責處理。 其實,web應用中全部的資源的響應都是servlet負責,包括靜態資源

自定義web.xml查找動態的url,動態查找不到, tomcat conf下的apache-tomcat-7.0.52\conf下的web.xml全局配置,查找靜態webapp下的靜態資源

<servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
DefaultServlet查找靜態資源,找出到輸出404

4.歡迎頁面 

  <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>
View Code

輸入http://localhost:8080/web13/,我的配置裏沒有動態默認配置,查找webap下的 index.html等文件。我的配置裏沒有歡迎頁面配置,則查找全局配置下的web。xml配置

 

HttpServlet

eclipse新建servlet對象,繼承HttpServlet,沒有service方法,查看源碼,查看繼承對象。doGet裏會調用service方法

 用戶登陸功能實現

1.數據庫操做支持: mysql驅動,DBUtils,鏈接池(lib和xml)2 web.xml(url對應servlet對象)  3.servlet對象

package com.heima.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.heima.domain.User;
import com.heima.utils.DataSourceUtils;

public class loginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //1.得到用戶名和密碼
            String username =request.getParameter("username");
            String password=request.getParameter("password");
        //2.驗證
        QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
        String sql="select * from user where username=? and password=?";
        User user=null;
        try {
            user=runner.query(sql, new BeanHandler<User>(User.class),username,password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //3.根據返回結果
        if(user!=null){
            //成功
            response.getWriter().write(user.toString());
        }else{
            //失敗
            response.getWriter().write("wrong username or password");
            
        }
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
/web13/src/com/heima/servlet/loginServlet.java

servletContex對象

什麼是servletContext:ServletContext表明是一個web應用的環境(上下文)對象,ServletContext對象     內部封裝是該web應用的信息,ServletContext對象一個web應用只有一個

問題:一個web應用有幾個servlet對象?----多個

 ServletContext對象的生命週期?

建立:該web應用被加載(服務器啓動或發佈web應用(前提,服務器啓動狀 態))

銷燬:web應用被卸載(服務器關閉,移除該web應用)

如何得到servletContext

1)ServletContext servletContext = config.getServletContext();(通常不用)

2)ServletContext servletContext = this.getServletContext(); 

ServletContext的做用

1.得到web應用全局的初始化參數

web.xml中配置初始化參數

經過context對象得到參數值

 

2得到web應用中任何資源的絕對路徑(重要 重要 重要)

方法:String path = context.getRealPath(相對於該web應用的相對地址);

 

3ServletContext是一個域對象(重要 重要 重要)

什麼是域對象?什麼是域?

存儲數據的區域就是域對象

ServletContext域對象的做用範圍:整個web應(全部的web資源均可以隨意向      servletcontext域中存取數據,數據能夠共享)

 域對象的通用的方法:

setAtrribute(String name,Object obj);

getAttribute(String name);

removeAttribute(String name)

package com.heima.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ContextServert extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().write("doGet runing...");
        //1.得到context對象
        ServletContext context=this.getServletContext();
        //1。初始化參數
        String initParameter = context.getInitParameter("name");
        System.out.println(initParameter);
        //2.得到  絕對路徑 
        String realPath_A = context.getRealPath("/a.txt"); //   /目錄爲WebContent
        System.out.println(realPath_A);
        //3.域對象 存數據
        context.setAttribute("name", "heiheihei");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
View Code

實現記錄用戶登陸次數功能

package com.heima.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.heima.domain.User;
import com.heima.utils.DataSourceUtils;

public class loginServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        //zai context中存數據
        int count=0;
        this.getServletContext().setAttribute("count", count);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //1.得到用戶名和密碼
            String username =request.getParameter("username");
            String password=request.getParameter("password");
        //2.驗證
        QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
        String sql="select * from user where username=? and password=?";
        User user=null;
        try {
            user=runner.query(sql, new BeanHandler<User>(User.class),username,password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //3.根據返回結果
        if(user!=null){
            //從context中取出count進行加運算
            Integer count = (Integer)this.getServletContext().getAttribute("count");
            count++;
            this.getServletContext().setAttribute("count", count);
            //用戶登陸成功
            response.getWriter().write(user.toString()+"you are success login "+count);
        }else{
            //失敗
            response.getWriter().write("wrong username or password");
            
        }
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
/web13/src/com/heima/servlet/loginServlet.java
相關文章
相關標籤/搜索