8

アノテーション付きのSpringMVCでは、POJOに@Controllerのマークを付けます。このコントローラーでは、autowiredプロパティを使用してWebApplicationContextを取得できます。

@Controller
public class HomePageController {

@Autowired
ApplicationContext act;

    @RequestMapping("/*.html")
    public String handleBasic(){
        SimpleDomain sd = (SimpleDomain)act.getBean("sd1");
        System.out.println(sd.getFirstProp());
        return "hello";
}

しかし、このアプローチでは、servletContextは便利ではありません。では、WebApplicationContextを取得する古い方法をまだ使用できる方法はありますか?すなわち

WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)

ここでservletContextを取得するにはどうすればよいですか?

私は古い方法を使用するという強制に直面していません。したがって、この質問は、春の柔軟性を確認するための好奇心から外れています。また、面接の質問になることもあります。

4

5 に答える 5

16

コントローラに注入するだけです。

@Autowired private ServletContext servletContext;

または、HttpServletRequestをパラメーターとして受け取り、そこから取得します。

@RequestMapping(...)
public ModelAndView myMethod(HttpServletRequest request ...){
    ServletContext servletContext = request.getServletContext()
}
于 2012-11-03T16:11:36.553 に答える
2

以下は正しいアプローチです:

@Autowired
ServletContext context;

それ以外の場合は、ServletContextを自動配線する代わりに、ServletContextAwareを実装できます。Springは、Webアプリケーションコンテキストで実行しているときにこれに気づき、ServletContextを挿入します。これを読んでください。

于 2012-11-04T06:03:31.603 に答える
2

インラインで行うこともできます。

@RequestMapping(value = "/demp", method = RequestMethod.PUT)
public String demo(@RequestBody String request) {
    HttpServletRequest re3 = ((ServletRequestAttributes) RequestContextHolder

            .getRequestAttributes()).getRequest();
    return "sfsdf";
 }
于 2015-07-20T12:01:26.507 に答える
2

Springからと呼ばれるインターフェースを実装できますorg.springframework.web.context.ServletContextAware

public class MyController implements ServletContextAware {
    private ServletContext servletContext; 

    @Override
    public void setServletContext(ServletContext servletContext) {
       this.servletContext=servletContext;
    }
}

その後servletContext、クラスの任意の場所を使用できます。

于 2015-09-02T00:25:06.233 に答える
1

セッションにアクセスすることで、サーブレットコンテキスト、サンプルコードを取得できます。

@Controller
public class MyController{

....
@RequestMapping(...)
public ModelAndView myMethod(HttpSession session ...){

WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext())

}

}

HttpServletRequestからもHttpSessionを取得できます。

于 2012-11-03T13:56:43.873 に答える