Servlet

作者: 丫甘九 | 来源:发表于2019-03-25 21:38 被阅读0次

1、什么是Servlet?

Servlet是javaweb的三大组件之一,它属于动态资源,servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
- 接收请求数据
- 处理请求
- 完成响应
例如客户端发出登陆请求,或者输出注册请求,这些请求都应该由Servlet来完成处理,Servlet需要我们自己来编写,每个Servlet必须实现java.servlet.Servlet接口

image.png

2、实现servlet的方式(由我们自己来编写)

实现servlet有三种方式

  • 实现javax.servlet.Servlet接口
  • 继承javax.servlet.GenericServlet类
  • 继承javax.servlet.HttpServlet类
    通常我们会去继承HttpServlet类来完成我们的servlet,但是学习还是从javax.servlet.Servlet接口开始学习
实现javax.servlet.Servlet接口
  • servlet接口的五个方法介绍
import javax.servlet.*;
import java.io.IOException;

public class AServlet implements Servlet{
    /*查看servlet接口中的方法*/
    /*什么叫生命周期方法?生命周期:(例如人)出生于哪年哪月那日,哪年哪月那日上小学,
    哪年哪月那日上初中,哪年哪月那日上大学,哪年哪月那日工作,哪年哪月那日死亡*/
    /*servlet的生命周期就为,第一次调用servlet方法起,到调用了多少次,直至最后一次调用*/

    /*它是生命周期方法(被Tomcat调用的方法)*/
    /*它会在servlet对象创建之后马上执行,并且只执行一次!(出生之后调用的第一个方法)*/
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()...");

    }
    /*可以用来获取servlet的配置信息*/

    @Override
    public ServletConfig getServletConfig() {
        System.out.println("getServletConfig()...");
        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类
  • 线程不安全的,所以他的效率是高的
    注:servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法

3、如何让浏览器访问Servlet

  • 给Servlet指定一个Servlet路径,(让Servlet与一个路径绑定在一起)
  • 浏览器访问Servlet路径
配置xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>

    <servlet-name>xxx</servlet-name>
    <servlet-class>cn.itcast.web.servlet.AServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>xxx</servlet-name>
        <url-pattern>/AServlet</url-pattern>

    </servlet-mapping>
</web-app>

ServletConifg介绍

image.png
package lxbaoming;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;

public class AServlet implements Servlet{
    /*查看servlet接口中的方法*/
    /*什么叫生命周期方法?生命周期:(例如人)出生于哪年哪月那日,哪年哪月那日上小学,
     哪年哪月那日上初中,哪年哪月那日上大学,哪年哪月那日工作,哪年哪月那日死亡*/
    /*servlet的生命周期就为,第一次调用servlet方法起,到调用了多少次,直至最后一次调用*/

    /*它是生命周期方法(被Tomcat调用的方法)*/
    /*它会在servlet对象创建之后马上执行,并且只执行一次!(出生之后调用的第一个方法)*/
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()...");
        /*获取初始化参数*/
        System.out.println(servletConfig.getInitParameter("p1"));
        System.out.println(servletConfig.getInitParameter("p2"));

        /*获取初始化参数的名称*/
        Enumeration e = servletConfig.getInitParameterNames();
        while (e.hasMoreElements()){
            System.out.println(e.nextElement());
        }

    }
    /*可以用来获取servlet的配置信息*/

    @Override
    public ServletConfig getServletConfig() {
        System.out.println("getServletConfig()...");
        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()...");

    }
}



xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
          http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <display-name>AServlet</display-name>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>xxx</servlet-name>
        <servlet-class>lxbaoming.AServlet</servlet-class>

        <init-param>
            <param-name>p1</param-name>
            <param-value>v1</param-value>

        </init-param>
        <init-param>
            <param-name>p2</param-name>
            <param-value>v2</param-value>

        </init-param>
    </servlet>


    <servlet-mapping>
        <servlet-name>xxx</servlet-name>
        <url-pattern>/AServlet</url-pattern>
    </servlet-mapping>
</web-app>
image.png

GenericServlet介绍

1、GenericServlet概述

  • GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的servlet(是一个写好的抽象类)
  • 简化我们的操作,让我们实现servlet接口更方便

模拟 GenericServlet类

package baoming;

import javax.servlet.*;
import java.io.IOException;
/*模拟GenericServlet*/

public class AServlet implements Servlet {
    private ServletConfig config;
    /*生命周期方法,由Tomcat来调用,并且只调用一次*/
    /*它是这些方法中第一个被调用的,它会在构造器之后马上被调用*/
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        //把tomcat传递的ServletConfig赋值给本类的一个成员,其实就是把它保存起来,
        // 方便在其他方法中使用!
        this.config = config;
        init();

    }
    /*这个方法是本类自己定义的! 不是servlet接口中的方法*/
    public void init(){

    }

    @Override
    public ServletConfig getServletConfig() {
     /*请放心,这个方法一定会在init()方法之后被调用
     * init()被调用后,本类的成员this.config已经有值了*/
        return this.config;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse 
servletResponse) throws ServletException, IOException {
        /*这里是否可以使用ServletConfig的成员(config)呢?
        * 因为这是在init()后面被调用,当然可以使用了*/
        System.out.println("每次处理请求都会被调用");
    }
    public ServletContext getServletContext(){
         return config.getServletContext();
    }
    public String getServletName(){
        return config.getServletName();
    }
    public String getInitParameter(String name){
        return config.getInitParameter(name);
    }
    /*没有用的东西,爱实现不实现,用字符串来对servlet做一个简单的描述*/
    @Override
    public String getServletInfo() {
        return "我是一个快乐的servlet";
    }

    /*需要就写,不需要就不写,临死之前的方法*/
    @Override
    public void destroy() {
        System.out.println("啊!我就要死了");
    }
}

封装后我们子类继承它

package baoming;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

public class BServlet extends AServlet {
   /* public void init(ServletConfig servletConfig) throws ServletException {
        //把tomcat传递的ServletConfig赋值给本类的一个成员,其实就是把它保存起来,
        // 方便在其他方法中使用!
        this.config = config;
        init();

    }
    在父类中的东西相当于在子类中,例如init()方法,tomcat调用init()方法,
    给config赋值,然后调用构造init()方法,然后子类重写构造init方法,既没有覆盖父类
    中的this.config = config;还能输出我们要在子类中输出的内容
    */
    public void init(){
        System.out.println("哈哈哈哈哈哈哈哈哈哈哈");
    }
    public void service(ServletRequest servletRequest, ServletResponse 
servletResponse) throws ServletException, IOException {
       String value = getInitParameter("p1");
    }
}

可以很明显的看出来代码量大大减少

相关文章

  • servlet 笔记

    servlet servlet 声明周期 Servlet 的线程安全 Servlet 获取配置信息 Servlet...

  • Servlet

    Servlet介绍 Servlet开发步骤 创建Servlet 配置Servlet 配置Servlet中设置初始化...

  • 深入理解Servlet技术

    1. 什么是servlet servlet Servlet是javax.servlet.Servlet包中定义的一...

  • Servlet与Jsp(1)

    Servlet 实现原理Servlet接口使Servlet容器能将Servlet类载入内存,并在Servlet实例...

  • web.xml不同版本之间头信息的区别

    一、Servlet 2.3 二、Servlet 2.4 三、Servlet 2.5 四、Servlet 3.0 五...

  • Servlet入门

    Servlet简介 Servlet(Servlet Applet)是Java Servlet的简称,称为小服务程序...

  • Servlet 实例

    Servlet 实例 Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接...

  • Java Servlet API

    Servlet 支持的版本 Servlet 3.0 新特性详解 Servlet 3.0 新特性概述Servlet ...

  • 简单认识Servlet

    Servlet与JSP的关系 初识Servlet Servlet层级关系 顶层Servlet接口 GenericS...

  • 2019-10-14 SpringMVC与Servlet接口 S

    SpringMVC与Servlet接口 Servlet接口规范 Servlet 接口 定义servlet接口规范i...

网友评论

      本文标题:Servlet

      本文链接:https://www.haomeiwen.com/subject/ltobvqtx.html