【问题标题】:Spring MVC, forwardSpring MVC,转发
【发布时间】:2011-03-01 04:25:24
【问题描述】:

有什么区别

public class Controller1 extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        return new AnotherController().handleRequest(request, response);
    }
}

@Controller
public class Controller1 {

    @RequestMapping ...
    public String handleRequest() {
        return "forward:/path_to_my_another_controller";
    }
}

【问题讨论】:

    标签: java spring servlets spring-mvc


    【解决方案1】:

    它们很相似,但并不完全相同。

    第二种方法将创建一个新的内部请求以转发到第二个控制器,而第一种方法将重用相同的请求对象。

    这是否重要取决于每个控制器对请求所做的操作。

    我发现使用直接方法调用将控制器链接在一起是 Spring 注释控制器更吸引人的方面之一,它可以比丢弃转发的请求更自然的流程。

    与往常一样,您的里程可能会有所不同。

    【讨论】:

      【解决方案2】:

      通过自己创建控制器,您将阻止 Spring 向其中注入任何依赖项。这可能会导致您自己创建的控制器无法正常工作。

      如果您真的需要像这样链接控制器,我会向 Spring 应用程序上下文询问您想要的控制器实例,而不是使用 new 运算符创建一个实例。

      【讨论】:

      • 更好的是,您可以@Autowired 另一个控制器。
      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 2011-07-15
      • 2019-11-14
      • 2017-06-09
      • 2013-01-21
      • 2014-04-05
      • 2013-05-24
      相关资源
      最近更新 更多