Eclipse + MyEclipse整合Struts+Spring+Hibernate简单例子开发
功能介绍:由用户输入用户的ID,输出用户的相关信息,包括用户名和毕业学校。前台包括两个jsp页面,index.jsp用来接受用户输入查询条件;result.jsp用来显示查询结果。数据库采用MySQL,创建user表:
Create table user(ID int(11) primary key,name varchar(100),school varchar(100)); Insert into user values(0001,’matthew’,’YunNan University’); Insert into user values(0002,’zhangzili’,’YunNan University’); Insert into user values(0003,’yangxiaopeng’,’HuaNan University’); 环境:Eclipse3.1.2+MyEclipse4.1.1GA+MySql4.1.10 一 新建项目:login,方法参见我的另一篇日志:Struts+Spring+Hibernate之搭建Eclipse + MyEclipse 开发环境。整个项目的结构如下:
二 为项目增加Struts、Spring、Hibernate功能。方法大致一样,细节会因为MyEclipse的版本会有点不一样。
1 增加Struts功能:右激项目名称》MyEclipse》Add Struts Capabilities
接下来,只需要根据你的情况设置下Base package for new classes:如,com.lnic.struts。然后点finish即可。完成后,会在你的项目里面增加一些struts的jar包。
2 增加Spring功能,方法和前面一样。这里需要注意点选:Copy checked Library…项,要不然在我这里会出现找不到build-path错误。
然后,选择applicationContext.xml文件的位置,选择WEB-INF文件夹下。即可。
这个时候,项目下的包结构又会增加一些jar包。
3 增加Hibernate功能。方法和前面的一样。配置如下图:
到此,完成Hibernate功能增加。 三 创建代码:如下图结构
在创建BaseAction.java过程中会出现import org.springframework.web.context.WebApplicationContext;这个包没有加进来,所以要手工把它加进来:spring-web.jar,这个是myeclipse自带的有。如图:
四 创建JSP页面:index.jsp和result.jsp.具体如下图:
五 部署项目和测试。项目部署方法请看我的另一篇日志:Struts+Spring+Hibernate之搭建Eclipse + MyEclipse 开发环境
输入:http://localhost:8080/login/ 如下图:
显示结果如下:
六 详细代码:
1 com.lnic.dao包里面有两个类: UserDao.java
package com.lnic.dao;
import java.util.List;
public interface UserDao { public List getName(String id); }
UserDaoImpl.java /**
* 数据访问对象,实现UserDao接口,并调用Hibernate的映射来获得用户的信息。 */
package com.lnic.dao;
import java.sql.SQLException; import java.util.List;
import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback; import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class UserDaoImpl extends HibernateDaoSupport implements UserDao { public UserDaoImpl(){ super(); } public List getName(final String id) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { int studID = Integer.parseInt(id); StringBuffer sb = new StringBuffer(100); sb.append(\"select user \"); sb.append(\"from User user \"); sb.append(\"where user.id = :id\"); Query query = session.createQuery(sb.toString()); query.setInteger(\"id\ List list = query.list(); return list; } }); } }
2 com.lnic.hibernate包里面有个User.java的hibernate映射类。它的属性和数据库中的User表字段对应。 package com.lnic.hibernate;
import java.io.Serializable;
public class User implements Serializable { private java.lang.Integer id; private java.lang.String name; private java.lang.String school;
public User(){}
public User(java.lang.Integer id){ this.setId(id); }
public java.lang.Integer getId(){ return id;
}
public void setId(java.lang.Integer id){ this.id = id; }
public java.lang.String getName(){ return this.name; }
public void setName(java.lang.String name){ this.name = name; }
public java.lang.String getSchool(){ return this.school; }
public void setSchool(java.lang.String school){ this.school = school; } }
User类的hibernate映射文件:user.hbm.xml
\"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"
\"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" >
3 m.lnic.struts包里面有两个类:BaseAction.java和SearchAction.java BaseAction.java,在这个类中继承了struts的action。并且覆盖了setServlet方法,在此方法中初始化Web应用上下文,获得Spring的Ioc容器,并在容器中获取UserDao接口的实现类的对象,然后使用该对象初始化本类中的成员变量userDao。可以参见applicationContext.xml配置文件。 package com.lnic.struts;
import javax.servlet.ServletContext; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionServlet;
import org.springframework.web.context.WebApplicationContext; import
org.springframework.web.context.support.WebApplicationContextUtils; import com.lnic.dao.UserDao;
public class BaseAction extends Action { private UserDao userDao; public void setServlet(ActionServlet actionServlet) { super.setServlet(actionServlet); ServletContext servletContext = actionServlet.getServletContext(); WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); this.userDao = (UserDao)wac.getBean(\"userDao\"); } public UserDao getUserDao() { return userDao; } public void setStuDao(UserDao userDao) { this.userDao = userDao; } }
SearchAction.java这个类继承了BaseAction,并覆盖了Action的execute方法,它是Struts的Action类中用来处理业务逻辑的方法,并将处理结果转发给下个页面,在本例子中,它直接调用BaseAction中的getUserDao方法获得userDao对象,并调用该对象的getName方法完成查询工作。 package com.lnic.struts;
import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping;
public class SearchAction extends BaseAction { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) { String id = req.getParameter(\"factor\"); List list = this.getUserDao().getName(id); req.setAttribute(\"Students\ return mapping.findForward(\"result\"); } }
4 前台jsp页面:index.jsp和result.jsp index.jsp
<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"GBK\"%> <%@ taglib uri=\"/WEB-INF/struts-html.tld\" prefix=\"html\" %>
result.jsp
<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"GBK\"%> <%@ page import=\"com.lnic.hibernate.User\" %>
您查询的用户信息如下:
<%
java.util.List l =
(java.util.List)request.getAttribute(\"Students\"); java.util.Iterator iter = l.iterator(); User user = new User(); while(iter.hasNext()){ user = (User)iter.next(); %>
学生编号:<%=user.getId() %>
学生姓名:<%=user.getName() %>
学生专业:<%=user.getSchool() %>
<%}%>
5 配置文件:applicationContext.xml和hibernate.cfg.xml,struts-config.xml,web.xml
Spring的配置文件:applicationContext.xml,在这个配置文件,配置了个数据源组件:dataSource,用来获取数据库源,它是个DBCP的BasicDataSource对象,其属性根据不同的数据库,会有不同。另外,在sessionFactory这个Bean组件中配置了Spring 的LocalSessionFactoryBean类的对象,该类包装了Hibernate的SessionFactory类。在这个组件中,我们可以配置该组件的数据源以及Hibernate相关属性,比如数据库方言、hibernate映射文件所在的包路径。
class=\"org.apache.commons.dbcp.BasicDataSource\" destroy-method=\"close\"> /> />
class=\"org.springframework.orm.hibernate3.LocalSessionFactoryBean\">
key=\"hibernate.dialect\">org.hibernate.dialect.MySQLInnoDBDialect
true
classpath:/com/lnic/hibernate
Struts配置文件:struts-config.xml。配置FormBean组件,这里使用的是动态FormBean。它的属性“factor”必须与index.jsp和Form中的属性名字一样。
\"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd\">
type=\"org.apache.struts.action.DynaActionForm\">
name=\"testForm\" input=\"/index.jsp\">
这个地方配置行为映射,指定映射路径,此处为“/search”,它必须和index.jsp的form
的action属性相对应。指定用来处理该行为的Action类。
Web配置文件:web.xml
version=\"2.4\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">action *.do
org.apache.struts.action.ActionServletconfig
/WEB-INF/struts-config.xml
ass>
action
org.springframework.web.context.ContextLoaderList ener
contextConfigLocation
/WEB-INF/applicationContext.xml
debug 3
detail 3
2
Hibernate配置文件:hibernate.cfg.xml
\"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"
\"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">
root name=\"connection.url\">jdbc:mysql://localhost:3306/test name=\"dialect\">org.hibernate.dialect.MySQLMyISAMDialect mysql 131421 name=\"connection.driver_class\">com.mysql.jdbc.Driver