Jakarta ee SpringMVC,设计问题
我从Java EE和spring下的web开发开始,有一个高级设计问题: 我有一个基本的shell设置:我编写了一些域对象(主要是各种对象属性的getter和setter,我最终希望它们显示在页面上)。我想知道,一旦我有了一些DAO编码,什么才是将所有东西连接在一起的正确方法 假设一个简单的博客包含各种博客条目。我为博客条目编写了一个类,其中包含与条目对应的适当属性。控制器访问这些域对象、调用适当的DAO、将数据打包到模型和调用视图的适当流程是什么 正如您所看到的,对于这一切是如何结合在一起的,以及分层体系结构应该如何工作,我感到非常困惑。如果需要任何澄清,请告诉我。谢谢Jakarta ee SpringMVC,设计问题,jakarta-ee,spring-mvc,n-tier-architecture,Jakarta Ee,Spring Mvc,N Tier Architecture,我从Java EE和spring下的web开发开始,有一个高级设计问题: 我有一个基本的shell设置:我编写了一些域对象(主要是各种对象属性的getter和setter,我最终希望它们显示在页面上)。我想知道,一旦我有了一些DAO编码,什么才是将所有东西连接在一起的正确方法 假设一个简单的博客包含各种博客条目。我为博客条目编写了一个类,其中包含与条目对应的适当属性。控制器访问这些域对象、调用适当的DAO、将数据打包到模型和调用视图的适当流程是什么 正如您所看到的,对于这一切是如何结合在一起的,
更新:感谢您提供以下答案!我还有一个问题:我的服务层类应该是单例的吗?有人能解释一下为什么他们应该/不应该是单身吗?谢谢 控制器(使用2.5+中的注释,使其成为POJO)在注入的服务层类上执行方法。服务层被注入DAO以从持久性中获取对象。业务逻辑位于域对象内部 如果您还没有这样做,请查看Spring MVC分步教程 这将为您提供一个关于如何构造一个简单的SpringMVCWeb应用程序的极好示例 唯一的问题是它不包括在Spring2.5+中使用注释。您必须等待Spring3.0MVC教程发布,或者自己翻阅Spring官方文档来学习如何使用它 编辑 下面是一个涉及控制表单的示例: 注:弹簧3.0.0 您的控制器:
@Controller
@RequestMapping("/blog.htm")
public class BlogController{
// Service layer class
private final BlogManager blogManager;
// Inject the blog manager into the constructor automatically
@Autowired
public BlogController(BlogManager blogManager){
this.blogManager = blogManager
}
// Set up the form and return the logical view name
@RequestMapping(method=RequestMethod.GET)
public String setupForm(ModelMap model){
model.addAttribute(new EntryForm());
return "addBlog";
}
// Executed when posting the form
@RequestMapping(method=RequestMethod.POST)
public String addBlog(@ModelAttribute("entryForm")EntryForm entryForm){
// Read the entry form command object from the form
String text = entryForm.getText();
// Call your service method
blogManager.addEntry(text);
// Usually redirect to a new logical view name
return "redirect:/homepage";
}
}
表单命令对象:
public class EntryForm{
private String text;
// setters and getters for text
}
这是您的服务层类
public class BlogManager{
private final BlogDAO blogDAO;
@Autowired
public BlogManager(BlogDAO blogDAO){
this.blogDAO = blogDAO;
}
public void addEntry(String text){
int blogID = 100; // simple example id for a blog
Blog blog = blogDAO.findById(blogID);
blog.addEntry(text);
blogDAO.update(blog);
}
}
现在您更新了spring.xml文件,以将其绑定在一起
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- Scan for spring annotations -->
<context:component-scan base-package="test.package"/>
<!-- defined in the xml file and autowired into controllers and services -->
<bean id="blogManager" class="test.package.BlogManager" />
<bean id="blogDAO" class="test.package.dao.BlogDAO" />
<!-- Resolves logical view names to jsps in /WEB-INF/jsp folder -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
谢谢,这正是我想要的。不幸的是,我还需要一些细节。你能详细说明一下(或者给我指一些参考资料)这一切到底是什么样子的吗?特别是注入看起来如何等等。在域对象中包含业务逻辑也是标准的吗?我认为这本书非常令人惊讶,但当我读到它时,它是2.5之前的版本,所以没有提到注释。它可能已经更新,因为,我不太确定-我布莱利通过本教程。然而,我没有发现任何关于服务层的概念。我想按照bpapa的建议去做。@nick,如果你没有读到第三章,你就不会找到任何关于服务层的东西。我编辑了我的答案,以包含一个简单的示例,说明如果使用Spring 3.0.0实现服务层,服务层可能会是什么样子。非常感谢您……快速提问:服务层类应该是单例的吗?@nick,如果您还没有,继续问一个关于单身人士的新问题。请按右上角的ask question
以新问题的形式提出新问题,以避免答案中出现噪音:)不要忘记对你觉得有用的答案进行投票,并接受最有帮助的答案。