一、Servlet簡(jiǎn)介 Servlet是sun公司提供的一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。 二、ServletAPI三、Servlet的方法四、Servlet的運(yùn)行Servlet程序是由WEB服務(wù)器調(diào)用,web服務(wù)器收到客戶端的Servlet訪問請(qǐng)求后: 五、Servlet生命周期其中,加載和實(shí)例化,初始化,銷毀都只進(jìn)行一行 五、Serlvet部署5.1、新建類Myservlet3繼承HttpServlet重寫doGet,doPost,destroy(),init方法 package com.pb.servletdemo; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Myservlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet方法被調(diào)用"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost方法被調(diào)用"); } /*@Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub super.service(arg0, arg1); }*/ @Override public void destroy() { System.out.println("Servlet銷毀,destroy方法被調(diào)用"); } @Override public void init(ServletConfig config) throws ServletException { System.out.println("Servlet初始化,init方法被調(diào)用"); String initParam=config.getInitParameter("charSetContent"); System.out.println(initParam); } } 5.2、在web.xml中配置<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns="http://java./xml/ns/javaee" xsi:schemaLocation="http://java./xml/ns/javaee http://java./xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>servletdemo</display-name> <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> <!-- 首先是servlet標(biāo)簽 --> <servlet> <!-- 指定servlet的名字 可以與建立的servlet名字不一樣,別名--> <servlet-name>myserlvet</servlet-name> <!-- servlet的類名 包名.類名的完整路徑--> <servlet-class>com.pb.servletdemo.Myservlet3</servlet-class> <!-- 初始參數(shù) --> <init-param> <!-- 設(shè)置字符集 --> <param-name>charSetContent</param-name> <!--值 --> <param-value>utf-8</param-value> </init-param> </servlet> <!-- 截獲請(qǐng)求 servlet映射--> <servlet-mapping> <!-- 些servlet-name要與上方的servlet-name名字一樣不然會(huì)報(bào)錯(cuò) --> <servlet-name>myserlvet</servlet-name> <!-- 一個(gè)servlet可以 有多個(gè)url-pattern--> <!-- 精確匹配 --> <url-pattern>/myservlet3</url-pattern> <!-- 加上虛擬目錄 --> <url-pattern>/demo/myservlet3</url-pattern> <!-- 通配符來(lái)配置* --> <url-pattern>/*</url-pattern> <!-- 后綴名來(lái)配置 --> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> 5.3、精確匹配5.4、虛擬目錄匹配--可以有多個(gè)虛擬目錄5.5、*通配符5.6、后綴名來(lái)訪問六、url-pattern6.1、url-pattern 概述<url-pattern>元素,用于把一個(gè)Servlet 別名映射為一個(gè)URL 訪問規(guī)則。在Servlet 的配置過(guò)程中,我們首先使用servlet 元素中的servlet-name、servlet-class 等子元素把一個(gè)Servlet 實(shí)現(xiàn)類映射為一個(gè)別名,然后再使用servlet-mapping 元素把這個(gè)別名映射為一個(gè)可以在瀏覽器中訪問的url,我們對(duì)Servlet 的訪問正是通過(guò)這個(gè)URL 進(jìn)行的。而不是通過(guò)別名。因此,配置這個(gè)URL 是Servlet 配置過(guò)程中非常重要的一個(gè)環(huán)節(jié)。那么我們應(yīng)該如何對(duì)這個(gè)URL進(jìn)行配置呢?也就是說(shuō)url-pattern 有幾種配置規(guī)則呢?在配置url-pattern 元素的時(shí)候,有這樣三種規(guī)則,分別是精確匹配、目錄匹配和后綴匹配。 6.2、精確匹配所謂的精確匹配,就是我們?cè)谑褂脼g覽器訪問一個(gè) Servlet 的時(shí)候,輸入的URL 中除了工程名之前的部分之外要和我們?cè)谂渲肧ervlet 時(shí),配置的url-pattern 元素要完全一致。比如說(shuō),在下面實(shí)例中,配置了一個(gè)名稱為 HelloServlet 的Servlet,它的url-pattern 我們配置為/helloServ , 那么這個(gè)配置就是完全匹配的方式。假如說(shuō)我們這個(gè)工程的名字是 <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>javaee.sg.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/helloServ</url-pattern> </servlet-mapping> 6.3、目錄匹配相對(duì)于精確匹配,目錄匹配是一種相對(duì)靈活的配置方式,它以斜杠開始,以星號(hào)結(jié)尾,并且規(guī)定了一個(gè)虛擬的目錄。為了更加形象的說(shuō)明這種配置方式,我們?nèi)匀灰詣偛诺睦舆M(jìn)行說(shuō)明,比如說(shuō)剛才的那個(gè)Servlet,它的url-pattern 我們就可以使用這種形式進(jìn)行配置: <servlet-name>HelloServlet</servlet-name> <url-pattern>/helloServ/*</url-pattern> 在這個(gè)url-pattern 中,我們使用了一個(gè)虛擬的目錄, helloServ,那么我們?cè)谠L問這個(gè)Servlet 的時(shí)候輸入的URL 就會(huì)有多種選擇,我們只要保證這個(gè)URL 中,除了工程 6.4、后綴匹配用后綴進(jìn)行匹配的方 <servlet-name>HelloServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 在這個(gè)配置當(dāng)中,我們限定了訪問這個(gè)Servlet 的后綴名是”.do”。也就是說(shuō),當(dāng)我們的URL 中的服務(wù)器地址,端口號(hào),工程名這些項(xiàng)沒有錯(cuò)誤的情況下,只要url 以”.do”結(jié)尾,就 6.5、注意事項(xiàng)在配置 Servlet 的過(guò)程中,大家需要注意的另外一點(diǎn)就是一個(gè)Servlet 配置元素可以同時(shí)對(duì)應(yīng)多個(gè)Servlet-mapping 元素, 比方說(shuō),我們?nèi)匀灰詣偛潘榻B的HelloServlet 為例,大家看這段代碼: <servlet-mapping> <servlet-name> HelloServlet </servlet-name> <url-pattern>/helloServ</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> HelloServlet </servlet-name> <url-pattern>/helloServ/* </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> HelloServlet </servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 在這段代碼中,我們?yōu)閯e名為HelloServlet 的Servlet 配置了3 個(gè)servlet-mapping 元素。既然我們可以為同一個(gè)Servlet 同時(shí)配置多個(gè)servlet-mapping,那么當(dāng)客戶端在訪問這個(gè)servlet 的時(shí)候,servlet 容器是按照一個(gè)什么樣的順序來(lái)查找servlet 的呢?當(dāng)為同一個(gè)Servlet 配置了多個(gè)servlet-mapping 的時(shí)候,servlet 容器首先將按照精確 七、在eclipse中創(chuàng)建Servlet選擇需要的方法 |
|