盒子
盒子
文章目录
  1. 快速入门
  2. servlet的API和生命周期
  3. servlet的执行过程
  4. servlet的配置
  5. HttpServlet
  6. ServletContext对象

servlet基础

快速入门

  1. 类实现Servlet接口,实现重写service方法
  2. webContent下WEB-INF中的web.xml配置servlet和servlet-mapping

servlet的API和生命周期

  1. Servlet接口中的方法
    ①init(ServletConfig config)
    何时执行:servlet对象创建的时候执行(方法不是静态的所以必须要对象调用,所以tomcat帮我们创建该servlet对象时执行,且只执行一次)
    ServletConfig : 代表的是该servlet对象的配置信息
        1)获得servlet的name----------<servlet-name>abc</servlet-name>-------config.getServletName();
        2)获得该servlet的初始化的参数--------<initparameter>...</initparameter>-------config.getInitParameter("url")
        3)获得ServletContext对象---------------config.getServletContext();
    ②service(ServletRequest request,ServletResponse response)
    何时执行:每次请求都执行
    ServletRequest:代表请求 认为ServletRequest内部封装的是http请求的信息。
    ServletResponse:代表响应 认为要封装的是响应的信息
    ③destroy()
    何时执行:servlet销毁的时候执行
  2. Servlet的生命周期
    ①Servlet何时创建
    默认第一次访问servlet时创建该对象(可以通过配置指定他什么时候创建,所以默认)
    ②Servlet何时销毁
    服务器关闭servlet就销毁了
    ③每次访问必然执行的方法
    service(ServeletRequest req,ServletResponse res)方法

servlet的执行过程

servlet执行过程

servlet的配置

  1. servlet基本配置

其中url-pattern的配置方式:
1)完全匹配 访问的资源与配置的资源完全相同才能访问到
<url-pattern>/quickStratServlet</url-pattern>
2)目录匹配 格式:/虚拟的目录../* *代表任意
<url-pattern>/aaa/bbb/ccc/*</url-pattern>
3)扩展名匹配 格式:*.扩展名
<url-pattern>*.abcd</url-pattern>

注意:第二种与第三种不要混用/aaa/bbb/ccc/*.abcd (错误的)
  1. 服务器启动实例化Servlet配置
    Servlet的何时创建:默认第一次访问时创建
    为什么是默认?
    当在servlet的配置时,加上一个配置<load-on-startup>3</load-on-startup>servlet对象在服务器启动时就创建(数字代表优先级,越小优先级越高)

  2. 缺省Servlet
    可以将url-pattern配置成一个/,代表该servlet是缺省的servlet
    什么是缺省的servlet?

    当你访问的资源地址所有的servlet都不匹配时,缺省的servlet负责处理
    
    其实,web应用中所有的资源的响应都是servlet负责,包括静态资源。
    
        注意:当访问一个静态资源或者url,如果web应用自带的web.xml没有配置该url或者静态资源,则找缺省的那个配置,如果没有配置缺省的则找tomcat的全局配置文件web.xml中对应的url或缺省的。
  3. 欢迎页面
    输入http://localhost:8080/WEB12(后面不写任何东西默认访问欢迎页面)

    1
    2
    3
    4
    <welcome-file-list>
    <welcome-file>1.html</welcome-file>
    <welcome-file>1.jsp</welcome-file>
    </welcome-file-list>

    如果我们不配,tomcat会帮配。

HttpServlet

  • 不再实现Servlet,而是继承HttpServlet,重写doPost(HttpServletRequest req,HttpServletResponse res)和doGet(HttpServletRequest req,HttpServletResponse res)
  • tomcat进入该类找service方法,找不到去父类找到service(ServletRequest req,ServletResponse res),该方法中强转req和res为HttpServletRequest和HttpServletResponse类型,然后调用另一个service
    方法,传入这两个强转后的参数,通过req.getMethod()获得请求方式,比对调用doPost还是doGet。

ServletContext对象

  1. 什么是ServletContext对象
  • ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象内部封装是该web应用的信息,ServletContext对象一个web应用只有一个。
  • 问题:一个web应用有几个servlet对象?———–多个
  • ServletContext对象的生命周期?
    创建:该web应用被加载(服务器启动(前提是已经存在在服务器内部)或发布web应用(前提是服务器是启动状态))
    销毁:web应用被卸载(服务器关闭(前提是已经存在在服务器内部)或移除该应用(前提是服务器是启动状态))
  1. 怎样获得ServletContext对象
  • ServletContext servletContext = config.getServletContext();
  • ServletContext context = this.getServletContext();或者ServletContext context = getServletContext();
  1. ServletContext的作用
  • 获得web应用全局的初始化参数
    web.xml中配置初始化参数

    1
    2
    3
    4
    <servlet></servlet>外部配置全局的初始化参数
    <context-param><param-name>..<param-name></context-param>
    ServletContext context = getServletContext();
    String initParamter = context.getInitParameter("..");
  • 获得web应用中任何资源的绝对路径(重要!!!)

    1
    2
    3
    4
    5
    方法:String path = context.getRealPath(相对于该web应用的相对地址);

    在读取src(classes)下的资源时可以通过类加载器的-----专门加载classes下的文件的
    getResource()参数是一个相对地址,相对classes(根目录)
    String path = ContextServlet.class.getClassLoader().getResource("...").getPath();
  • ServletContext是一个域对象(重要!!!)
    什么是域对象?什么是域?

    存储数据的区域就是域对象
    
    ServletContext域对象的作用范围:整个web应用(所有的web资源都可以随意向servletcontext域中存取数据,数据可以共享)
    
    在ServletContext1类中存数据:context.setAttribute("name","zhangsan");
    在ServletContext2类中取数据:String attribute = (String)this.getServletContext().getAttribute("name");
  • 域对象的通用方法

    1
    2
    3
    setAttribute(String name,Object obj);
    getAttribute(String name);
    removeAttribute(String name);
  1. serlvet模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package ${enclosing_package};
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ${primary_type_name} extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("hello haohao...");
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
联系我
扫一扫,添加JzhBetter
  • 微信扫一扫
  • qq扫一扫