一、Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术。 二、ServletAPI三、Servlet的方法四、Servlet的运行Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: 五、Servlet生命周期其中,加载和实例化,初始化,销毁都只进行一行 五、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方法被调用"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost方法被调用"); } /*@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方法被调用"); } @Override public void init(ServletConfig config) throws ServletException { System.out.println("Servlet初始化,init方法被调用"); 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标签 --> <servlet> <!-- 指定servlet的名字 可以与建立的servlet名字不一样,别名--> <servlet-name>myserlvet</servlet-name> <!-- servlet的类名 包名.类名的完整路径--> <servlet-class>com.pb.servletdemo.Myservlet3</servlet-class> <!-- 初始参数 --> <init-param> <!-- 设置字符集 --> <param-name>charSetContent</param-name> <!--值 --> <param-value>utf-8</param-value> </init-param> </servlet> <!-- 截获请求 servlet映射--> <servlet-mapping> <!-- 些servlet-name要与上方的servlet-name名字一样不然会报错 --> <servlet-name>myserlvet</servlet-name> <!-- 一个servlet可以 有多个url-pattern--> <!-- 精确匹配 --> <url-pattern>/myservlet3</url-pattern> <!-- 加上虚拟目录 --> <url-pattern>/demo/myservlet3</url-pattern> <!-- 通配符来配置* --> <url-pattern>/*</url-pattern> <!-- 后缀名来配置 --> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> 5.3、精确匹配5.4、虚拟目录匹配--可以有多个虚拟目录5.5、*通配符5.6、后缀名来访问六、url-pattern6.1、url-pattern 概述<url-pattern>元素,用于把一个Servlet 别名映射为一个URL 访问规则。在Servlet 的配置过程中,我们首先使用servlet 元素中的servlet-name、servlet-class 等子元素把一个Servlet 实现类映射为一个别名,然后再使用servlet-mapping 元素把这个别名映射为一个可以在浏览器中访问的url,我们对Servlet 的访问正是通过这个URL 进行的。而不是通过别名。因此,配置这个URL 是Servlet 配置过程中非常重要的一个环节。那么我们应该如何对这个URL进行配置呢?也就是说url-pattern 有几种配置规则呢?在配置url-pattern 元素的时候,有这样三种规则,分别是精确匹配、目录匹配和后缀匹配。 6.2、精确匹配所谓的精确匹配,就是我们在使用浏览器访问一个 Servlet 的时候,输入的URL 中除了工程名之前的部分之外要和我们在配置Servlet 时,配置的url-pattern 元素要完全一致。比如说,在下面实例中,配置了一个名称为 HelloServlet 的Servlet,它的url-pattern 我们配置为/helloServ , 那么这个配置就是完全匹配的方式。假如说我们这个工程的名字是 <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、目录匹配相对于精确匹配,目录匹配是一种相对灵活的配置方式,它以斜杠开始,以星号结尾,并且规定了一个虚拟的目录。为了更加形象的说明这种配置方式,我们仍然以刚才的例子进行说明,比如说刚才的那个Servlet,它的url-pattern 我们就可以使用这种形式进行配置: <servlet-name>HelloServlet</servlet-name> <url-pattern>/helloServ/*</url-pattern> 在这个url-pattern 中,我们使用了一个虚拟的目录, helloServ,那么我们在访问这个Servlet 的时候输入的URL 就会有多种选择,我们只要保证这个URL 中,除了工程 6.4、后缀匹配用后缀进行匹配的方 <servlet-name>HelloServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 在这个配置当中,我们限定了访问这个Servlet 的后缀名是”.do”。也就是说,当我们的URL 中的服务器地址,端口号,工程名这些项没有错误的情况下,只要url 以”.do”结尾,就 6.5、注意事项在配置 Servlet 的过程中,大家需要注意的另外一点就是一个Servlet 配置元素可以同时对应多个Servlet-mapping 元素, 比方说,我们仍然以刚才所介绍的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> 在这段代码中,我们为别名为HelloServlet 的Servlet 配置了3 个servlet-mapping 元素。既然我们可以为同一个Servlet 同时配置多个servlet-mapping,那么当客户端在访问这个servlet 的时候,servlet 容器是按照一个什么样的顺序来查找servlet 的呢?当为同一个Servlet 配置了多个servlet-mapping 的时候,servlet 容器首先将按照精确 七、在eclipse中创建Servlet选择需要的方法 |
|