3

我有一个问题是:

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 尚未初始化。

请帮忙。

4

1 回答 1

2

这个电话:

AppServiceServlet service = new AppServiceServlet();

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

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

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

于 2013-01-25T09:03:03.530 回答