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();

を介してサーブレット インスタンスをインスタンス化しますnew。これにより、通常のコンテナ管理によるサーブレットの作成が回避されます。そのため、重要なクラス変数 (サーブレット構成など) が適切に初期化されません。

getServletContextその後、単に にリダイレクトする への呼び出しを行っていますgetServletConfig().getServletContext()が、サーブレットの構成が完了していないため、例外が発生します。

実際、サーブレットをそのまま呼び出すnewことは、仕様に準拠していません。サーブレットは、Web アプリ コンテナーによって維持されることになっています。起動サーブレットを起動する適切な方法は、web.xml ファイル内の構成または注釈を使用することです。

于 2013-01-25T09:03:03.530 に答える