程序员社区

【Servlet-2】Servlet,ServletConfig,ServletContext三大接口

在这里插入图片描述

文章目录

      • 1.Servlet接口
      • 2.ServletConfig接口
      • 3.ServletContext接口

1.Servlet接口

Servlet接口中的5个方法:
在这里插入图片描述
现在是面向接口编程,写一个具体的类实现这个接口中的5个抽象方法:

package Servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/SomeServlet")
public class SomeServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("初始化SomeServlet实例");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("执行SomeServlet的service()方法");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("初始化SomeServlet实例");
    }
}

在这里插入图片描述

2.ServletConfig接口

servletConfig对象是servlet对象的配置信息对象,即里面封装的是web.xml里的内容。
主要提供以下几个方法:
在这里插入图片描述
ServletConfig中封装的就是web.xml中的配置信息,里面提供了几个方法都是针对配置信息操作的。注意ServletConfig只能操作Servlet标签里面的配置信息,而对于Servlet标签外面的无法操作,一个Servlet对象仅对应一个ServletConfig对象。
在这里插入图片描述

package ServletConfig;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/ServletConfigDemo")
public class ServletConfigDemo implements Servlet {
    //注意,现在这儿是一个类,类里面定义变量,并提供set方法和get方法
    //可将init方法当做一个set方法来看
    private ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        //相当于set方法中的赋值
        this.servletConfig=servletConfig;
        System.out.println("config="+servletConfig);
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //获取Servlet名称
        String servletName = servletConfig.getServletName();
        System.out.println("ServletName="+servletName);
        //获取ServletContext对象
        ServletContext servletContext = servletConfig.getServletContext();
        System.out.println("servletContext="+servletContext);
    }

    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
    }
}

在这里插入图片描述

3.ServletContext接口

ServletContext代表的是上下文信息,一个Servlet对象对应一个ServletConfig对象,所有的Servlet对象共享一个ServletContext对象。
在这里插入图片描述
servletContext.setAttribute(“username”,“zhangsan”);
servletContext.setAttribute(“password”,“123”);
servletContext.getAttribute(“username”);
servletContext.removeAttribute(“password”);

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/34/ServletContextDemo">设置域属性</a>
<a href="/34/ServletContextDemo1">获取域属性的值</a>
<a href="/34/ServletContextDemo2">重置域属性的值</a>
</body>
</html>

在这里插入图片描述
ServletContextDemo文件:

package ServletContext;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/ServletContextDemo")
public class ServletContextDemo implements Servlet {
    private ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig=servletConfig;
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        servletConfig=getServletConfig();
        //获取ServletContext对象
        ServletContext servletContext =  servletConfig.getServletContext();

        //设置域属性
        //这个域属性是全局性的,一旦设置了域属性,所有的servlet都能访问
        servletContext.setAttribute("username","zhangsan");
        servletContext.setAttribute("password","123");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

ServletContextDemo1文件:

package ServletContext;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/ServletContextDemo1")
public class ServletContextDemo1 implements Servlet {
    private ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig=servletConfig;
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        servletConfig=getServletConfig();
        //获取ServletContext对象
        ServletContext servletContext =  servletConfig.getServletContext();

        //获取域属性的值
        Object username = servletContext.getAttribute("username");
        System.out.println(username);
        Object password = servletContext.getAttribute("password");
        System.out.println(password);

        //重置域属性的值
        servletContext.setAttribute("username","ghh");

        //删除域属性
        servletContext.removeAttribute("password");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

ServletContextDemo2文件:

package ServletContext;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/ServletContextDemo2")
public class ServletContextDemo2 implements Servlet {
    private ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig=servletConfig;
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //获取ServletContext 对象
        ServletContext servletContext = servletConfig.getServletContext();
        //获取域属性的值
        Object username = servletContext.getAttribute("username");
        System.out.println(username);
        Object password = servletContext.getAttribute("password");
        System.out.println(password);

        String contextPath = servletContext.getContextPath();
        System.out.println(contextPath);
        String realPath = servletContext.getRealPath("/index.html");
        System.out.println(realPath);

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

在这里插入图片描述
servletContext.getContextPath();
servletContext.getRealPath("/index.html");

package ServletContext;

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

public class ServletContextDemo3 implements Servlet {
    private ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig=servletConfig;
    }
    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        ServletContext servletContext = servletConfig.getServletContext();
        //获取虚拟路径
        String contextPath = servletContext.getContextPath();
        System.out.println(contextPath);
        //获取真实路径
        String realPath = servletContext.getRealPath("/index.html");
        System.out.println(realPath);
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
    }
}

在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【Servlet-2】Servlet,ServletConfig,ServletContext三大接口

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区