Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee SpringMVC,设计问题_Jakarta Ee_Spring Mvc_N Tier Architecture - Fatal编程技术网

Jakarta ee SpringMVC,设计问题

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、将数据打包到模型和调用视图的适当流程是什么 正如您所看到的,对于这一切是如何结合在一起的,

我从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
以新问题的形式提出新问题,以避免答案中出现噪音:)不要忘记对你觉得有用的答案进行投票,并接受最有帮助的答案。