spring ServletConfig() 或者ServletContext 不存在解决方案

25 篇文章 0 订阅

抛出的异常可能是:

ServletConfig has not been initialized

进入debug模式,可能会发现servletConfig这个变量为null

解决方案如下:

首先看看你的那个类是什么?是controller还是HttpServlet.如果继承HttpServlet并且还有@Controller,那干脆不要使用HttpServlet这个东西。因为想得到ServletConfig可以通过其他的方法。例如下面:

@Controller
@RequestMapping("/index")
public class HomeIndexHandler implements ServletContextAware {
    private static final Log LOG = LogFactory.getLog(HomeIndexHandler.class);
    
    private ServletContext servletContext;

    public void setServletContext(ServletContext sc) {
        this.servletContext=sc;
        
    }

        @RequestMapping("/index")
    public ModelAndView process(HttpServletRequest req, HttpServletRequest resp) {

        ServletContext context = servletContext;
        return null; //将断点设在这里
    }

运行上面的例子发现context不为空..那么问题就解决了。还是null就继续找错误。

如果是单纯的HttpServlet, 那么看看是否重载了init(ServletConfig config)方法。重载这个方法时要调用父类的init才行。类似于:

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    // your code here
 }
如果在super.init(config)处设置断点,在初始化Servlet时,Servlet容器会将这个config传入。如果没有调用这个函数,需要再看看web.xml这个文件有没有写正确。

当然你也可以像我一样慢慢的查找:

首先是ContextListener这个最初的初始化类,然后是dispatch类, 然后是intecepter类的初始化,然后各个bean初始化,在这些类的非初始方法中,调用getServletConfig()看看是否非null.我的错误发生在intercepter类中的preHandler()方法中的Object handler, handler中的config为NULL. 所有我跟踪断点到HomeIndexHandler 初始化过程,发现没有调用init(ServletConfig config)但是调用了init()方法,这说明服务器完全没有把HomeIndexHandler 当作HttpServlet。而是认为是一个Bean.那么就不会设置ServletConfig。

不能用servlet单纯的设置一下@Controller就变为spring mvc了...还要许多地方需要变动。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值