在你开始加包的时候无比要仔细阅读 上面的矩阵, hiberante core 3.3 和有的包是不兼容的!
昨天试了 spring 2.0 + hibernate core 3.3 + struts2..0.9 没有成功,
今天调试成功的 版本为 struts2.0.9+spring2.0+hibernate 3.2.1 + tomcat5.5.17+ eclipse3.2 wtp all in one
本指南演示了如何在Eclipse中配置Struts2,并让它与Spring2,Java Persistence API(使用Hibernate)和Struts2 Ajax 标签一起工作。
注意:按指南一步一步来需要Struts2.0.3或更高版本
Show me the code
你可以在 zipped Eclipse project下载源代码,必需的依赖库在/WebContent/WEB-INF/lib目录下,需要导入到Eclipse中。
Prerequisites
Tomcat
首先要安装好Tomcat,如果在安装的时候遇到任何问题,请查看Tomcat的安装指南
MySql
安装并配置MySQL。创建一个名为“quickstart”的数据库,并运行下面脚本来创建“Person”表。后面在applicationContext.xml里,我们将使用"root"数据库用户名和密码,记得用你自己的数据库设置来替换它们。
CREATE TABLE 'quickstart'.'Person' (
'id' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
'firstName' VARCHAR(45) NOT NULL,
'lastName' VARCHAR(45) NOT NULL,
PRIMARY KEY('id')
)
ENGINE = InnoDB;
注:上面的DDL需要保存在文件中,然后在MySQL中导入。我直接复制然后在查询分析器中执行失败
创建Eclipse项目
- 打开Eclipse,我是认真的,你必须打开Eclipse
- 点击File -> New -> Project. 选择"Dynamic Web Project"并点击下一步(注:如果使用MyEclipse,这里不太一样)
- 输入项目名,这里我使用"quickstart"。这个项目将要在Tomcat中运行,所以我们需要为它创建应用服务器配置
- 在"Target Runtime"下面点击"New",选择"Apache Tomcat5.5"并点击下一步
- 输入Tomcat的安装路径并选择一下已安装的JRE(需要1.5)
- 现在你应该回到了项目创建向导,并且Tomcat是你的Target Runtime。点击下一步,选择"Dynamic Web Module"和"Java"facets,最后点"finish"。
(上面讲的都是Eclipse WTP中的配置,如果使用MyEclipse请自行修正)
库依赖关系
你的项目应该包含"src","build"和"WebContent"目录。我们把所有必需的jar文件放在"/WebContent/WEB-INF/lib"目录下。请复制它们到${workspace}\quickstart\WebContent\WEB-INF\lib目录。jar文件名的版本号已经被去除了!
JarFrom
xwork.jar |
Struts 2 |
struts2-api.jar |
Struts 2 |
struts2-core.jar |
Struts 2 |
struts2-Spring-plugin.jar |
Struts 2 |
ognl.jar |
Struts 2 |
freemarker-2.3.4.jar |
Struts 2 |
mysql-connector-java.jar |
MySql JDBC Driver |
spring.jar |
Sping 2.0 |
antlr.jar |
Hibernate Core |
asm.jar |
Hibernate Core |
asm-attrs.jar |
Hibernate Core |
cglib.jar |
Hibernate Core |
dom4j.jar |
Hibernate Core |
jdbc2_0-stdext.jar |
Hibernate Core |
ehcache.jar |
Hibernate Core |
hibernate3.jar |
Hibernate Core |
xml-apis.jar |
Hibernate Core |
commons-collections.jar |
Hibernate Core |
ejb3-persistence.jar |
Hibernate Annotations |
jta.jar |
Hibernate Annotations |
hibernate-annotations.jar |
Hibernate Annotations |
hibernate-entitymanager.jar |
Hibernate Entity Manager |
javassist.jar |
Hibernate Entity Manager |
jboss-archive-browsing.jar |
Hibernate Entity Manager |
右击项目点“刷新”,通知Eclipse我们加入了很多的jar文件。
我使用Struts2.0.9, Spring2.0., Hibernate3.2.1。struts2-api.jar找不到,没有也可以运行成功;Hibernate Annotations和Hibernate Entity Manager需要在Hibernate的主页上下载,不包括在Core里面;
本网站上还有一位仁兄给出了如下 评语:
jta.jar和javassist.jar在Hibernate Tools里面,同样要下载;最后,上面列表并缺少一个包,因为Hibernate3.2对此有一点小小的修改,你需要把Hibernate Annotations里面的hibernate-commons-annotations.jar拷贝进来。
其实 jta.jar和javassist.jar 在 annotation and Entity manager 里有了, 不用tool 包, 还有没有hibernate-commons-annotations.jar 一样可以跑
要注意的是下面的所有xml 第一行要加<?xml version="1.0" encoding="UTF-8"?> , 在官方网站上的原文未来简洁省略了这句话, 一定要加上去
领域模型
我们的领域模型只有一个简单的"Person"类,它包含少量的实例变量。
- 创建一个新类并命名为"Person",然后输入"quickstart.model"作为包名。
- 添加"id"(int), "firstName"(String)和"lastName"(String)三个实例变量,并为它们加上setter/getter方法。
- 为你的类加上"@Entity"annotation,给"id" 加上 "@Id"和"@GeneratedValue" 注解
你的类如下:
package quickstart.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private Integer id;
private String lastName;
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
@Entity让JPA服务Provider知道这个类可以被持久化。@Id标识"id"域为这个类的主键,@GeneratedValue使id域被提供者(Hibernate)自动生成。类和实例变量默认都被映射到同名的表和列上,详细情况请查看JPA文档。
Person service.
我们现在来写对"Person"对象进行CRUD操作的类。
- 创建一个接口,命名为"PersonService",包名为"quickstart.service"
package quickstart.service;
import java.util.List;
import quickstart.model.Person;
public interface PersonService {
public List<Person> findAll();
public void save(Person person);
public void remove(int id);
public Person find(int id);
}
2. 创建一个类,命名为"PersonServiceImpl",包名为"quickstart.service"
JPA 配置
- 在"src"目录下创建一个"META-INF"目录
- 在"META-INF"目录下创建一个名为"persistence.xml"的文件。
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="punit">
</persistence-unit>
</persistence>
JPA configuration can be set on this file. On this example it will be empty because the datasource configuration will be on the Spring configuration file. JPA的配置信息可以在这个文件中设置。本例中该文件为空,因为数据源(datasource)配置放在Spring的配置文件中。
Spring
- 更新/WebContent/WEB-INF/web.xml文件为以下内容:
这会使容器将所有请求转发给Struts的"FilterDispatcher"类。"index.jsp"被设为主页,Spring的"ContextLoaderListener"被配置为listener(监听器)
- 在/WebContent/WEB-INF目录下创建一个名为"applicationContext.xml"的文件,内容如下:
Struts
现在我们需要创建一个简单的Struts action,它封装了PersonServices的方法。并且我们配置Struts使用Spring作为对象工厂。
- 打开新建类对话框,输入"PersonAction"作为类名,包名为"quickstart.action",内容如下:
package quickstart.action;
import java.util.List;
import quickstart.model.Person;
import quickstart.service.PersonService;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.Preparable;
public class PersonAction implements Preparable {
private PersonService service;
private List<Person> persons;
private Person person;
private Integer id;
public PersonAction(PersonService service) {
this.service = service;
}
public String execute() {
this.persons = service.findAll();
return Action.SUCCESS;
}
public String save() {
this.service.save(person);
this.person = new Person();
return execute();
}
public String remove() {
service.remove(id);
return execute();
}
public List<Person> getPersons() {
return persons;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void prepare() throws Exception {
if (id != null)
person = service.find(id);
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
看,我的action是一个简单的POJO!
"Preparable"接口指示Struts去调用"prepare"方法,如果"PrepareInterceptor"被应用在action上(默认就是这样子的)。action的构造器有一个"PersonService"参数,在action被实例化的时候Spring会负责注入。
- 在"src"目录下创建一个名为"struts.xml"的文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value</sp>
分享到:
相关推荐
**JPA配置装载** Java Persistence API (JPA) 是Java平台上的一个标准,用于管理和持久化应用程序中的对象到关系数据库。它提供了一种面向对象的方式来处理数据库操作,减少了开发人员与SQL之间的直接交互,简化了...
此外,合理设置实体的装载模式,如选择性地加载关联,有助于提升性能。 总结,JPA为Java开发者提供了简洁且强大的ORM框架,简化了数据库操作。理解并熟练掌握JPA的加载、更新和删除机制,有助于提高代码的可读性和...
- **Spring 命名空间**: 介绍了如何使用 Spring 的命名空间来配置 JPA Repository。 - **基于注解的配置**: 通过 `@EnableJpaRepositories` 和其他注解来配置 Repository。 ##### 3.2 持久实体 - **保存实体**: ...
还介绍了创建Repository实体的XML配置,以及如何使用过滤器、Java配置、独立使用配置和人工装载。 自定义Repository实现部分,说明了如何在repository中添加自定义方法,以及为所有的repository添加自定义方法,...
### WebSphere6.1与SSH2+JPA2不兼容问题解决 #### 一、引言 随着技术的发展,软件架构也在不断更新迭代。在实际应用中,有时我们需要在较旧的技术栈上运行新的应用程序,这往往会导致各种兼容性问题。例如,在...
比如,为了使用Spring和JPA进行数据库操作,只需在项目中添加`spring-boot-starter-data-jpa`依赖,而无需关心具体版本和其他依赖。启动器内部已经包含了所有必要的组件,确保了版本的一致性和兼容性。官方的启动器...
2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC ...
Spring支持多种数据访问技术,如JDBC、Hibernate、JPA等,提供了一致的编程模型和异常处理机制。 - **MVC框架** Spring MVC是Spring提供的Web应用框架,提供了模型-视图-控制器的架构,支持RESTful风格的URL设计...
对于不同数据库的声明装载类,如`MySqlDataSourceConfig`、`OracleDataSourceConfig`和`SqlServerDataSourceConfig`,它们可以继承自`DataSourceConfig`,并在各自的类中覆盖或补充特定数据库的配置属性,例如URL、...
JPA(Java Persistence API):一种Java持久化规范,用于将Java对象与数据库表进行映射,实现数据的持久化操作。 MyBatis:一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,简化了数据访问层的开发。 ...
- `spring-instrument` 和 `spring-instrument-tomcat`: 用于服务器端的类装载器增强和Tomcat服务器的特殊支持。 在实际项目中,你需要根据具体需求选择引入这些包。通常,一个基本的SpringMVC项目至少需要`spring...
在进行企业级应用开发时,Spring的这些特性可以与Java EE规范中的其他技术无缝整合,如JPA、JMS、JTA等,进一步拓展了Spring的使用场景和能力。在不断的发展中,Spring全家桶还包含了Spring Boot、Spring Cloud等更...
2. **spring-beans.jar**:这个模块主要处理Bean的定义和配置,提供了BeanDefinition和BeanFactory接口,用于解析XML或注解配置,创建和管理Bean实例。 3. **spring-context.jar**:在核心和Bean模块之上,提供了更...
- **修改功能**:使用Jquery EasyUI的form装载数据,通过load方法加载待修改数据。密码修改涉及AJAX编程、Struts2 JSON Plugin和Spring Data JPA的单字段修改方法。 3. **数据库建模设计**: - **PDM(Physical ...
12. **spring-instrument.jar**:提供了类装载器工具,主要用于服务器端的类装载器增强,如Tomcat等。 13. **spring-test.jar**:包含了测试支持类,方便进行单元测试和集成测试,与JUnit和其他测试框架配合使用。 ...
2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC ...
2.3.4. 对AspectJ装载时织入(AspectJ load-time weaving)的支持 2.4. 中间层 2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC ...