1.Servlet(传智播客)

1.简介
servlet是JavaWeb三大组件之一(servlet、filter、listener),也是最重要的组件。
servlet是运行在web服务器上的java程序(是什么),可以对来自浏览器或者其他http客户端的请求进行处理。

2.实现
实现servlet有三种方式

  • 实现javax.servlet.Servlet接口
  • 继承javax.servlet.GenericServlet类
  • 继承javax.servlet.http.HttpServlet类
    在这里插入图片描述

3.生命周期
//实现servlet接口

public class AServlet implements Servlet {

    /*
     * 生命周期方法
     * 在servlet对象被创建的之后立即执行,只执行一次。
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init......");
    }

    /*
     * 获取servlet的配置信息。
     */
    @Override
    public ServletConfig getServletConfig() {
        System.out.println("ServletConfig......");
        return null;
    }

    /*
     * 生命周期方法
     * 每一次请求都会调用这个方法,可执行多次。
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service......");
    }

    /*
     * 获取servlet的信息。
     */
    @Override
    public String getServletInfo() {
        System.out.println("getServletInfo......");
        return null;
    }

    /*
     * 生命周期方法
     * 在servlet对象销毁之前执行,只执行一次。
     */
    @Override
    public void destroy() {
        System.out.println("destroy......");
    }
}

//配置servlet,由浏览器访问

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>AServlet</servlet-name>
    <servlet-class>AServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AServlet</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>
</web-app>

在这里插入图片描述
在这里插入图片描述

4.ServletConfig对象

  • getServletName:获取Servlet的名称
  • getServletContext:获取Servlet的上下文
  • getInitParameter:获取初始化参数
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>AServlet</servlet-class>
        <init-param>
          <param-name>aa</param-name>
          <param-value>11</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <url-pattern>/test</url-pattern>
      </servlet-mapping>
    </web-app>
    
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init......");
        System.out.println(servletConfig.getInitParameter("aa"));
    }
    
    在这里插入图片描述
  • getInitParameterNames:获取所有初始化参数的名称

5.GenericServlet

  • 在类当中用成员来保存内容。
  • 一个方法不能被覆盖但又需要重写的时候该怎么处理。
public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable {
    private static final String LSTRING_FILE = "javax.servlet.LocalStrings";
    private static ResourceBundle lStrings = ResourceBundle.getBundle(LSTRING_FILE);
    private transient ServletConfig config;
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

    public void init() throws ServletException {

    }

    public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

    public ServletConfig getServletConfig() {
        return config;
    }

    public ServletContext getServletContext() {
        ServletConfig sc = getServletConfig();
        if (sc == null) {
            throw new IllegalStateException(
                    lStrings.getString("err.servlet_config_not_initialized"));
        }
        return sc.getServletContext();
    }
    
    public void destroy() {
        
    }
}

6.HttpServlet
tomcat调用生命周期方法service,在方法内完成ServletRequest和ServletResponse的强转。然后调用非生命周期方法service,在方法内获取请求方法,根据请求方法调用doGet或者doPost。因此,我们通常在实现Servlet时,只需要继承HttpServlet然后覆盖doGet或者doPost方法即可,如果没有覆盖doGet或者doPost则会报405的错误。

7.Servlet细节

  1. 单例且线程不安全,可以创建只读的成员
  2. Servlet在第一次被请求时被创建,但也可以在web.xml的servlet中配置load-on-startup使得其在web服务器启动时创建

8.web.xml

  • DefaultServlet
  • JspServlet
  • session-timeout 默认为30分钟
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值