Servlet

什么是Servlet

屏幕快照 2019-04-21 下午8.22.08.png

服务器会把接受的请求交给Servlet,每个Servlet必须实现javax.servlet.Servlet接口

  • 接受请求数据
  • 处理请求
  • 完成响应

实现Servlet的方式

  • 三种
    实现javax.servlet.Servlet接口
    继承javax.servlet.GennericServlet类
    继承javax.servlet.http.HttpServlet类
    Servlet中的方法不由我们来调用,是由tomcat来调用的,并且Servlet中的对象不由我们来创建,也是由tomcat来创建


    浏览器访问Servlet
package Servlet;

import javax.servlet.*;
import javax.servlet.Servlet;
import java.io.IOException;

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("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...");
    }
}
  • 生命周期方法:
    void init(ServletConfig):出生之后,(一次)
    void service(ServletRequest request,ServletResponse response):没你处理请求时都会调用
    void destroy():临死之前,(一次)//销毁
  • 特性:
    单例,一个类只有一个对象,可能存在多个Servlet类
    线程不安全的,所以效率很高

Servlet是自己写,但对象是服务器来创建,并且服务器来调用相应的方法

  • servletConfig是什么?
    一个ServletConfig对象,对应一段web.xml中的Servlet的配置信息,可以用来获得servlet的配置信息

String getServletName()获得的是<servlet-name>里面的内容
Servlet Context getServletContext():获取Servlet上下文对象
String getInitParameter(String name):通过名称获取指定初始化参数的值
Enumeration getInitParamenterNames():获取所有初始化参数的名称

<?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>Servlet</servlet-name>
        <servlet-class>Servlet.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>Servlet</servlet-name>
        <url-pattern>/A</url-pattern>
    </servlet-mapping>
</web-app>
package Servlet;

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


public class AServlet implements Servlet {
    //实现生命周期方法
    //他会在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 a = servletConfig.getInitParameterNames();
        while(a.hasMoreElements()){
            System.out.println(a.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...");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。