SSH框架整合讲解


基于 MyEclipse6.5 的 SSH 整合 hespermoon 2008-7-18 1. 编写目的 最近在学习 Struts1.2+Spring2.5+Hibernate3.2 整合,这期间出现了很多问题, 在网上找了若干的实例均有不同程度的问题,为了让想要学习这个整合的人少走 弯路,特写下这篇文章,希望对大家有所帮助,如果有很么问题可以与我联系, Email:zhaohuawei@live.cn。 2. 实验环境  MyEclipse6.5  Tomcat5.5.26  MySQL5.0  数据库脚本程序 CREATE TABLE user ( id int(11) NOT NULL auto_increment, username varchar(50) default NULL, password varchar(50) default NULL, PRIMARY KEY (id) ); INSERT INTO user VALUES ('1', 'admin', 'admin'); 环境的搭建这里就不写了,估计大家应该很熟悉,不会的可以上网看一下, 有很多这样的资料。 3. Go!让我们开始创建工程 打开 MyEclipse,需要注意的是这里应该处于 MyEclipse Java Enterprise 视图; 新建一个 Web Project,输入适当的工程名字,这里我们输入 ssh,Finish 即可。 确定之后 MyEclipse 会生成名为 SSH 的项目,其中生成的目录结构如下所示: 4. 添加 Struts1.2 框架支持 在 ssh 工程上面右击,在弹出的菜单中选择 MyEclipse -> Add Struts Capabilities…,添加 Struts 的支持。 在弹出的对话框中选择 Struts 1.2,修改 Base package for new classes 成所需 的包名,其余保持原状,Finish 即可 完成后的结构为: 5. 添加 Spring2.0 框架支持 在 ssh 工程上面右击,在弹出的菜单中选择 MyEclipse -> Add Spring Capabilities…,添加 Spring 框架支持 由于 Spring 采取最小化库发布的方式,使得 Spring 的库文件彼此都是分离的, 因而我们需要自己选择需要的库,需要引用的如下图: 选择好后 Next,在窗口中选择 Browse,选择 ssh 工程下面的 WEB-INF 文件夹, 然后 Finsh。 6. 配置数据源 在 MyEclipse 右上角选择 MyEclipse Database Explorer,打开数据库管理视图。 在左侧的 DB Browser 点击右键,选择 New…,打开 Database Driver 对话框。 在 Database Driver 对话框中按照如下配置选择数据库驱动。首先选择 Driver Template,在这里我们选择 MySQL。Driver Name 是以后配置时使用的驱动名字, 用以区分驱动,这里使用 MySQL 即可。然后根据实际情况填写 URL,User name 和 Password。点击 Add JARs 添加数据库驱动文件。为方便配置,可以选择 Save password 保存密码。配置完毕后 Finish 即可。 7. Spring 与 Hibernate 的整合 当配置完数据源后,就可以添加 Hibernate 支持了。切换到 MyEclipse Java Enterprise 视图,在 ssh 工程上面右击,在弹出的菜单中选择 MyEclipse -> Add Hibernate Capabilities…,添加 Hibernate 的支持。 我们选择 Hibernate3.2,全部按照默认设置即可,然后点击 Next; 在对话框中选择 Spring configuration file,表示我们希望将 Hibernate 托管给 Spring 进行管理,这是将 Hibernate 与 Spring 进行整合的基础。然后点击 Next; 在出现的对话框中选择 Existing Spring configuration file。因为我们已经添加了 Spring 的配置文件,所以这里选择的是已存在的配置文件。MyEclipse 会自动找 到存在的那个文件。然后在 SessionFactory ID 中输入 Hibernate 的 SessionFactory 在 Spring 配置文件中的 Bean ID 的名字,这里我们输入 sessionFactory 即可。然 后点击 Next; 在出现的对话框中的 Bean Id 里面输入数据源在 Spring 中的 Bean ID 的名字, 这里我们输入 dataSource。然后在 DB Driver 里面选择我们刚刚配置好的 ssh, MyEclipse 会将其余的信息自动填写到表格里面。然后点击 Next; 在出现的对话框中取消 Create SessionFactory class。点击 Finish 即可。 此时 MyEclipse 会自动打开 Spring 的配置文件,文件内容为: 此时,切换到 MyEclipse DataBase Explorer 视图,右键打开数据库连接,在需 要使用的数据表格上面点击右键,选择 Hibernate Reverse Engineering...。这里我 们使用刚刚建立在 test 数据库中添加的 user 表。 在打开的对话框中修改 Java src folder 为我们建立的/ssh/src,这里需要选择 到 src 文件夹,并且需要填写 Java package,这是 MyEclipse 生成的类所在的包, 我们将其取名为user。然后选择Java Data Object,建立POJO类。然后选择Java Data Access Object。其中,POJO 类是数据库表格所对应的 Java 类,JDO 类是 MyEclipse 自动生成的对数据库的一些操作。这里会封装一些常用的操作,简化我们的编写。 填写完成后点击 Next。 在出现的对话框中选择 ID Generator 为 native,然后点击 Finish 即可。 此时 ssh 项目的目录结构如下所示。其中的 User.Java 是 MyEclipse 生成的使 用面向对象的 Java 语言对数据库表格进行的抽象,User.hbm.xml 是将数据库表格 中的字段和 POJO 类的属性进行映射的定义,UserDAO.java 封装了一些 MyEclipse 自动生成的对数据库的操作。 这时我们修改一下文件目录,使之更好的组织。我们建立一个 dao 包,将 DAO 类与 POJO 类分开。然后我们在 struts 包下面建立 action 和 form 包,用来管 理 Struts 的 Action 和 Form。为了将实现与接口进行解耦,我们建议在 dao 包下 面添加接口,然后建立 dao.impl 包,将实际的 DAO 类放在这里。DAO 类是直接 与数据库打交道的类,为了对业务逻辑进行封装,我们将业务全部写在 service 类里面,和 dao 一样,我们先建立 service 包,里面添加业务接口,具体的实现 放在 service.impl 里面。 将 UserDAO.java 移动到 dao 的 impl 包下面,并在 dao 包下建立接口 IUserDAO, 内容为: 在 service 中建立接口 IUserService.java,在 service 中 impl 中建立 UserService.java IUserService.java package com.ssh.service; import com.ssh.user.User; public interface IUserService { public User getUserById(Integer id); public User getUserByUsername(String username); public void addUser(User user); } package com.ssh.dao; import java.util.List; import com.ssh.user.User; public interface IUserDAO { public User findById(Integer id); public List findByUsername(Object username); public void save(User user); } UserService.java package com.ssh.service.impl; import java.util.List; import com.ssh.dao.IUserDAO; import com.ssh.service.IUserService; import com.ssh.user.User; public class UserService implements IUserService { private IUserDAO userDAO; public void addUser(User user) { userDAO.save(user); } public User getUserById(Integer id) { return userDAO.findById(id); } public User getUserByUsername(String username) { List list = userDAO.findByUsername(username); if (list.size() == 0) { return null; } else { return (User) list.get(0); } } public IUserDAO getUserDAO() { return userDAO; } public void setUserDAO(IUserDAO userDAO) { this.userDAO = userDAO; } } 此时的整体工程结构为: 此时的 applicationContext 内容需要配置 bean 内容为: 8. 整合 Struts 和 Spring Struts 和 Spring 整合方式其核心是让 Struts 能够访问到交给 Spring 进行托管 的类,这个我在网上看到了一个方式,自我认为很好,因此只要我们可以让 Struts 从 Spring 获得需要的类就可以了。 为了达到这个目标,我们创建一个类 BaseAction: 为了让 Web 容器能够初始化 Spring,我们需要修改 web.xml 文件,增加以下 内容: contextConfigLocation /WEB-INF/applicationContext.xml SpringContextServlet org.springframework.web.context.ContextLoaderServlet 1 package com.ssh.struts.action; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.struts.ActionSupport; public class BaseAction extends ActionSupport { protected Object getBean(String id) { WebApplicationContext ctx = WebApplicationContextUtils .getWebApplicationContext(this.servlet.getServletContext()); return ctx.getBean(id); } } 9. 啊,让看看我们工作是否有效 通过上面的配置,我们已经能够让这三个框架来协同作战了,让我们现在来 测试一下。 首先创建基于 Struts 的 JSP 页面。打开 WEB-INF 下面的 struts-config.xml,单 击右键,选择 New -> Form, Action and JSP。 在弹出的对话框中添加 User case,然后点击 Add 生成 Properties 代码。这会 由 MyEclipse 自动生成相应的 Form 代码。输入完成后选择 JSP 选项卡,选上 Create JSP form,修改路径,然后点击 Next。 在出现的对话框中修改 Path,将 Superclass 更改为前面定义的 BaseAction, 然后将 Input Source 修改为自己需要的路径。完成后 Finish 即可。 然后在 struts-config.xml 点击右键,选择 New -> Forward,准备创建一个 ActionForward。 在弹出的对话框中,选择 Local Action Forward,通过 Browser 填写 Action Path, 然后填写 Name 和 Path,完成后点击 Finish 即可。 在 LoginAction 中添加如下代码 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; String username = loginForm.getUsername(); String password = loginForm.getPassword(); ActionForward forward = mapping.getInputForward(); IUserService service = (IUserService) getBean("userService"); User userFromDB = service.getUserByUsername(username); if (userFromDB.getPassword().equals(password)) { forward = mapping.findForward("suc"); } return forward; } login.jsp 内容 Ok,这时我们可以启动 Tomcat 进行查看页面了 10. 黎明前的黑暗 上面的工作完成以后理论上应该可用,但是当你运行的事后却发现会有一个 非常诡异的异常出现 <%@ page language="java" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> JSP for LoginForm form password :
username :
这个问题本来面目是这样,由于 MyEclipse 给我们做的事情太全面了,全面 到 spring 和 hibernate 的包都是重复引用的。 其解决办法就是干掉多余的包,在 Tomcat 5.5\webapps\ssh\WEB-INF\lib 下的 asm-2.2.3.jar 就可以了,在重启 Tomcat 我们看看我们干了这么长时间的成果吧, 真令人失望又失败了,呵呵有如下异常: 哎,谁叫俺的脑子不好使能,忘了加入 bean 的初始化,在 applicationContext.xml 中加入如下内容就可以了 历经千难万阻,我们终于看到了一个想看的巨破巨简陋的界面,呵呵,就到 这里吧,估计大家要疯了。
还剩28页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

493846893

贡献于2011-08-09

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf