java.lang.Exception:ServletConfig尚未初始化

时间:2013-01-25 08:34:09

标签: java spring servlets

我有一个问题是:

  

java.lang.Exception:ServletConfig尚未初始化

我搜索了将近2天,但我没有解决方案。每个人都说过 必须使用 super.init(config)。我试过这个,但对我来说没什么变化。

我的初始化方法;

@Override
public void init(ServletConfig config) throws ServletException {

    super.init(config);

    AppServiceServlet service = new AppServiceServlet();
    try {
        service.getir();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    AutoCheckStatus.autoCheckStatus(600000);
}

和我的AppServiceServlet;

    public List<SswAppServiceDto> getir() throws Exception {
    try {
        final WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(this
                .getServletContext());
        setiAppServiceBusinessManager((IAppServiceBusinessManager) context.getBean(BEAN_ADI));

        List<SswAppService> result = getiAppServiceBusinessManager().getir();

        List<SswAppServiceDto> list = DtoConverter.convertSswAppServiceDto(result);

        for (int i = 0; i < result.size(); i++) {
            AppService appService = new AppService();
            appService.setServiceName(result.get(i).getName());
            appService.setUid(result.get(i).getServiceUid());
            appService.setHost(result.get(i).getHost());
            appService.setPort((int) result.get(i).getPort());
            SystemConfiguration.appServiceList.put(appService.getUid(), appService);
        }
        return list;

    } catch (RuntimeException e) {
        throw new Exception(e.getMessage(), e.getCause());
    }
}

此行中会抛出异常;

          final WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
在AppServiceServlet中

并说:

  

java.lang.Exception:ServletConfig尚未初始化。

请帮助。

1 个答案:

答案 0 :(得分:2)

这个电话:

AppServiceServlet service = new AppServiceServlet();

通过new实例化一个servlet实例,它绕过了servlet的正常容器管理创建。因此,关键类变量(例如,servlet配置)无法正确初始化。

稍后,您正在调用getServletContext,它只是重定向到getServletConfig().getServletContext(),但由于servlet配置从未完成,因此会出现异常。

事实上,在servlet上调用new的方式与规范不符 - servlet应该由Web应用程序容器维护。启动启动servlet的正确方法是通过web.xml文件中的配置或通过注释。