我使用Spring MVC开发Java webapp。我有如下设置:网站的2个页面负责呈现类似的内容。其中一个页面只是略微不同地呈现项目(因此需要不同的视图),并且数据略有不同(限制查询而不是拉动所有项目)。
我的问题是:最好的方法是实现2个独立的控制器来处理这些页面,还是使用单个控制器会更好?如果答案是使用单个控制器,我如何从控制器内部找出请求来自哪个页面(以便我可以调用相应的服务和视图)?感谢
答案 0 :(得分:3)
使用Spring 2.5+ annotated controllers,拥有一个控制器或两个控制器之间的区别并不是特别相关。
例如,假设你有一个这样的控制器类:
@Controller
public class MyController {
@RequestMapping ("/pageA");
public String handlePageA() {
.. do stuff
}
@RequestMapping ("/pageB");
public String handlePageB() {
.. do stuff
}
}
这应该是显而易见的。您可以获得一个控制器的好处,使用两个处理程序方法,每个“页面”一个。
确实没有理由再使用2.5之前的控制器了。您可以将新样式与旧样式一起使用,因此即使是旧版2.5之前的应用程序也可以在升级后使用新样式。
答案 1 :(得分:0)
您可以通过不同方式解决问题。
1.您可以传递一个特殊的参数来帮助您决定要渲染的视图。按照这种方式,您需要使用一个额外的参数编写单个控制器方法。
2.您可以将像db查询这样的通用逻辑提取到一个单独的方法中,然后在两个控制器方法中使用它,从而消除了大部分代码重复。
3.这可能不适用于您,因为您使用的两个视图都是HTML,但仅为了提供信息,您可以使用内容协商解析器,可以使用内容协商来编写一个控制器根据内容类型执行不同的视图/呈现。