0

私のコントローラークラスは com.tps.sphbIntegration.controllersパッケージに含まれています

私のapplicationContext.xmlファイルはWEB-INF/spring/applicationContext.xml

コントローラ クラス:

@Controller
@RequestMapping("jsp")
public class SpringController {

@RequestMapping(value="register.html" , method = RequestMethod.POST)
public String enterSucess(@Valid Login login , BindingResult result , Map model,HttpSession session){

    if(result.hasErrors()){
        System.out.println("Error happened...");
        return "register";
    }else{

    System.out.println("I am an controller for get method of jsp/success.html ");
    login = (Login) model.get("login");
    session.setAttribute("empId", login.getEmpId()) ;
    session.setAttribute("empName", login.getEmpName()) ;
    session.setAttribute("empPassword", login.getEmpPassword()) ;
    //session.setAttribute("empGender", login.getGender()) ;
    //session.setAttribute("empType", login.getEmpType()) ;

    ApplicationContext factory = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
    EmployeeDao dao=(EmployeeDao)factory.getBean("d");
    dao.saveEmployee(login);

    return "registerCheck";
    }

  }
}

実行時に例外が発生しました

java.io.FileNotFoundException: class path resource [spring/applicationContext.xml] cannot be opened because it does not exist

コントローラー内のパスを設定するのを手伝ってください。applicationContext.xmlまたは、コントローラー内にアクセスする方法の例を挙げてくださいapplicationContext.xml

4

4 に答える 4

3
  1. コントローラーはBeanFactoryAware、アプリケーション コンテキストの既存のインスタンスにアクセスするためのインターフェイスである を実装できます。アプリケーション コンテキストを自分で作成しないでください。

  2. 本当にコンテキストにアクセスする必要があるかどうかは、コードからは明確ではありません。Springの標準的な依存性注入メカニズムを介して、コントローラーにDAO を注入する必要があるようです。

于 2013-01-18T11:05:17.493 に答える
3

サーブレット コンテキスト ローダー リスナーに、web.xml 内の Spring アプリケーション コンテキスト XML ファイルの場所を伝える必要があります。あなたのエラーは、あなたがそれをしなかったことを私に示唆しています。

パスが web.xml にある場合は、パスが正しいかどうかを確認してください。

パスが正しい場合は、WAR ファイルを開き、XML が欠落していないかどうかを確認します。おそらく、展開とパッケージ化の問題があります。

Web アプリはこれを呼び出してはなりません:

ApplicationContext factory = new ClassPathXmlApplicationContext("spring/applicationContext.xml");

これは、ディレクトリにa がある場合に機能spring/applicationContext.xmlしますWEB-INF/classesが、推奨されるイディオムは、次を使用することContextLoaderListenerです。

DispatchServlet に従って ContextLoaderListener を使用する

起動時にアプリ全体のアプリケーション コンテキストをロードする必要があります。1 つのコントローラーではなく、この URL がクライアントによって呼び出されるたびにロードする必要はありません。起動時に一度ロードします。

于 2013-01-18T11:03:39.713 に答える
2

これは、applicationContext にアクセスするための推奨される方法だと思います。

@Autowired
private ApplicationContext applicationContext;

このように「*Aware」クラスを使用する必要はありません。

于 2013-01-18T18:32:08.143 に答える
-1

いやいやいや、こんな風にできるよ!クラスに ANNOTATION(@Controller) があることがわかります。つまり、メソッドで別のアプリケーションを作成すると、メモリ内に ApplicationContext のインスタンスが 2 つ存在します。クラスに ApplicationContextAware のインターフェースを実装させ、メソッド setApplication をオーバーライドし、プライベート メンバー ApplicationContext を追加し、そのメソッドに値を割り当てます。

于 2013-01-18T12:21:29.690 に答える