Servlet

1.Servlet的基本架构

虚线是实现,实线是继承。

1.1servlet接口

 servlet本身就是一个接口。

1.1.1方法:

void init();   //初始化

void service();          //处理客户端请求

void destory();         //摧毁资源

 1.2 servletconfig接口:

实现配置加载。

1.2.1方法

String getServletName();               //获取到servlet的名字

Enumeration<String> getInitparameterNames();        //获取到所有的初始化参数,用枚举接收

 1.3 GenericService抽象类

该类虽然实现了Servlet接口,但是更多的是对ServletConfig接口进行了实行,而把对应的Http请求方法Service,扔给了其子类HttpSevlet。

 1.4HTTPServlet抽象类

该类主要完成用户的请求和响应,自定义的servlet必须继承该类。

 1.4.1 servlet中的request和response

ServletRequest: 

HTTPServletRequest:

除了继承ServletRequest的接口中的方法,还增加了适应于http相应的新方法。

ServletResponse:

HTTPServletResponse:

除了继承ServletResponse的接口中的方法,还增加了适应于http相应的新方法。

2.自定义servlet类

2.1先声明一个类,继承HTTPServlet

实例:

package controller;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import java.io.IOException;

public class TestServlet extends HttpServlet {
    public TestServlet() {
        System.out.println("我被创建了。。。");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("我被初始化了。。。");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("我接受了请求");
        System.out.println(this);
    }

    @Override
    public ServletContext getServletContext() {
        System.out.println("上下文");
        return super.getServletContext();
    }

    @Override
    public void destroy() {
        System.out.println("我被销毁了。。。");
        System.out.println("我被销毁了。。。");
        System.out.println("我被销毁了。。。");
       // super.destroy();
    }

}

2.2 配置servlet

在WEB-INFO中的web.xml配置


    <servlet>
        <!--name可以自定义-->
        <servlet-name>TestServlet</servlet-name>
        <!--路径不可以自定义-->
        <servlet-class>controller.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--name可以自定义-->
        <servlet-name>TestServlet</servlet-name>
        <!--pattern可以自定义-->
        <url-pattern>/aaa</url-pattern>
    </servlet-mapping>

Servlet运行步骤:

  1.  先去URL中找到对应的请求(urlpartten)
  2.  找到请求所对应的Servlet的名字 (servlet-name) 以上两个部分都是在servletmapping中.
  3.  根据名字找到Servlet配置节点中 的Servlet的名字(servlet-name)
  4.  再确定Servlet的class所在位置 (servlet-class)

3.servlet的生命周期

可简化为四个步骤:

实例化Servlet :

首先由客户端发起请求,容器会解析请求的 URL,找到对应Servlet配置中的"url-partten", 紧跟着继续查找对应“servlet-name”,找到了 “servlet-name”就会使用"servlet-class"实现类实 例化。

调用init方法实现Servlet初始化:

当容器执行自定义Servlet时,会自动调用init方 法,实现Servlet的初始化。 Servlet是一个单例设计的类,能够提高多线 程的访问能力。因此可能会存在线程安全性问 题。

调用Service方法提供服务:

在HttpServlet中的Service方法,会根据用户提 交的方式,选择调用doXXX方法,如果我们自己 重写了Service方法,而没有调用doXXX具体的方 法,可能在请求后,如果同时存在service以及对 应doXXX方法时,只会调用service这一个方法。

调用destory方法实现销毁:

当web容器销毁时,会调用每一个自定义Servlet 中的destory实现对Servlet的销毁功能。

4.在Servlet中获取request、session、 application内置对象的方式

  • 获取request
doXXX(HttpServletRequest request, HttpServletResponse response);
service(HttpServletRequest request, HttpServletResponse response)
  • 获取session
HttpSession session = request.getSession();
  • 获取application
 ServletContext application = request.getServletContext();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值