欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于Servlet接口的一些坑

程序员文章站 2022-06-28 16:29:22
项目场景:还有半年就要实现了,大一一路混过来到现在啥都不会,现在醒悟了,决定开始认真学代码了,最近开始学习Javaweb,今天在学习的过程中碰到了一个小问题问题描述:我声明了一个类去实现Servlet接口,想要测试Context对象的存值取值的方法,于是我在service里通过获取ServletConfig对象再去获取ServletContext对象,然后调用context对象的setAttbute方法进行存值,代码如下:package com.hsf.servlet;import javax....

项目场景:

还有半年就要实现了,大一一路混过来到现在啥都不会,现在醒悟了,决定开始认真学代码了,最近开始学习Javaweb,今天在学习的过程中碰到了一个小问题

问题描述:

我声明了一个类去实现Servlet接口,想要测试Context对象的存值取值的方法,于是我在service里通过获取ServletConfig对象再去获取ServletContext对象,然后调用context对象的setAttbute方法进行存值,代码如下:

package com.hsf.servlet;

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


public class ServletDemo4 implements Servlet {

    public void init(ServletConfig servletConfig) throws ServletException {

    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        ServletContext servletContext = getServletConfig().getServletContext();
        System.out.println(servletContext);
        servletContext.setAttribute("name","金木研");
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {

    }
}

当我启动项目进行访问的时候发生了如下异常:
关于Servlet接口的一些坑

原因分析:

根据异常提示,我锁定了获取ServletContext对象的那一行代码:
** ServletContext servletContext = getServletConfig().getServletContext();**根据提示,这里的值为空,很明显,我们并没有获取到ServletConfig对象,这是为什么呢,于是带着这个疑问我进行了源码查看,然后发现getServletConfig()方法是Servlet接口里的方法,我当前的类实现了Servlet接口,所以重写了getServletConfig()方法,(完整的代码在上面),代码附上,这里可以看到,该方法的返回值为null,所已,我们获取不到Config对象,导致出现了空指针(NullPoint)的异常,知道了问题,就好解决了!()

    public ServletConfig getServletConfig() {
        return null;
    }

解决方案:

如果我们需要获取上下文对象,需要对getServletConfig()方法做一点修改,在Servlet接口的init方法里,会传入一个ServletConfig对象,我们只需要设置一个ServletConfig类型的全局变量,在init进行初始化即可

package com.hsf.servlet;

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


public class ServletDemo4 implements Servlet {
	//创建一个ServletConfig对象
    ServletConfig servletConfig;

    public void init(ServletConfig servletConfig) throws ServletException {
    	//初始化
        this.servletConfig = servletConfig;
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        ServletContext servletContext = servletConfig.getServletContext();
    servletContext.setAttribute("name","金木研");
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {

    }
}

这样,问题就解决了!!!啊,舒服了!!!

关于Servlet接口的一些坑

本文地址:https://blog.csdn.net/qq_47953855/article/details/110289517