Java 如何在Spring controller中访问applicationContext.xml?

Java 如何在Spring controller中访问applicationContext.xml?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的控制器类位于com.tps.sphbIntegration.controllers包中 我的applicationContext.xml文件位于WEB-INF/spring/applicationContext.xml 在控制器类中: @Controller @RequestMapping("jsp") public class SpringController { @RequestMapping(value="register.html" , method = RequestMethod

我的控制器类位于
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

您必须告诉servlet上下文加载程序侦听器在web.xml中找到Spring应用程序上下文xml文件的位置。你的错误向我表明你没有那样做

如果web.xml中确实有,请检查路径是否正确

如果路径正确,请打开WAR文件,查看XML是否丢失。可能您有部署和打包问题

web应用不应调用此:

ApplicationContext factory = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
如果
WEB-INF/classes
目录中有
spring/applicationContext.xml
,这将起作用,但首选习惯用法是使用
ContextLoaderListener

您应该在启动时加载整个应用程序的应用程序上下文,而不是一个控制器,当然也不是每次客户端调用此URL时。启动时加载一次

  • 您的控制器可以实现
    BeanFactoryAware
    ,这是一个接口,它将通过该接口访问已经存在的应用程序上下文实例。您不能自己创建应用程序上下文

  • 从代码中不太清楚您是否真的需要访问上下文:看起来您需要通过Spring的标准依赖项注入机制将DAO注入控制器中


  • 不,不,你可以这样做! 正如我将看到的,在您的类中有一个注释(@Controller),这意味着您的类已经由spring管理,如果您在方法中创建另一个应用程序,则内存中有两个ApplicationContext实例。 让您的类实现ApplicationContextAware的接口并重写该方法
    设置application,并添加一个私有成员ApplicationContext,然后在该方法中赋值

    我认为这是获得对ApplicationContext的访问权限的推荐方法:

    @Autowired
    private ApplicationContext applicationContext;
    

    不需要这样使用“*Aware”类。

    谢谢您的回复。。。我是否正确访问了applicationContext.xml文件?但是我如何指示服务器获取applicationContext.xml呢?关于使用Spring构建Web应用程序的任何教程都将介绍这些内容。它涉及
    web.xml
    文件。这也不是首选的习惯用法。我认为您也不想这样做。应用程序上下文应该在整个应用程序启动时加载,而不仅仅是一个类。