设为首页 收藏本站
查看: 1119|回复: 0

[经验分享] Struts2 + Spring2.5 + Hibernate3.2 框架 + MySQL 用Eclipse手工搭建

[复制链接]

尚未签到

发表于 2016-10-24 01:36:16 | 显示全部楼层 |阅读模式
  最近跟着项目组做了两个好玩的项目,
  一个是Struts2 + Hibernate3.2的B/S项目
  另一个是CXF + Spring2.5 + Hibernate3.2的C/S项目
  
  于是乎自己就特别想实际动手,用Eclipse来搭建Struts2 + Spring2.5 + Hibernate3.2 框架。
  与大家一起分享,有的地方可以与我讨论,共通进步。
  
  整体步骤是:
  1、先加入Struts2
  2、加入Spring2.5
  3、加入Hibernate3.2
  
  具体步骤是:
  1、建个Web项目,而Eclipse里是Tomcat project
  2、加入Struts2的核心包,(自己找吧网上很多)
  3、写个web.xml放Web-Info下

<listener>  
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
</listener>  
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  4、写个三个很简单的jsp文件login.jsp/success.jsp/error.jsp

<body>
<s:form action="action_executeFunction" namespace="/">
名称:<s:textfield name="user.name"/>
密码:<s:textfield name="user.password"/>
<input type="submit" value="提交"/>
</s:form>
</body>
<body>
this is success page/
</body>
<body>
this is error page.
</body>
  5、写个Struts.xml文件放src下

<!-- 配置中文支持 -->
<constant name="struts.custom.i18n.resources" value="alternate" />
<!-- 配置Spring-->
<constant name="struts.objectFactory" value="spring" />
<package name="user" namespace="/" extends="struts-default">
<global-results>
<result name="message">/WEB-INF/page/message.jsp</result>
</global-results>
<action name="action_*" method="{1}"
class="com.***.action.LoginAction" >
<result name="input">login.jsp</result>
<result name="error">error.jsp</result>
<result name="success">success.jsp</result>
</action>
</package>
  6、写个action

public class LoginAction extends ActionBase{
private User user  = new User();
private ILoginBo loginBo ;
public String input() throws Exception {
this.user.setName("llll");
return INPUT;
}
public void validateExecuteFunction() throws Exception{
if(user.getName() == null || user.getPassword() == null ){
this.redraw();
}
}
public String executeFunction() throws Exception {
//ILoginBo loginBean = (ILoginBo)this.appContext.getBean("LoginBo");
if(!loginBo.isExits(user.getName())){
loginBo.addUser(user);
return SUCCESS;
}
return ERROR;
}
public String redraw() throws Exception {
return ERROR;
}
public ILoginBo getLoginBo() {
return loginBo;
}
public void setLoginBo(ILoginBo loginBo) {
this.loginBo = loginBo;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
  7、以上这些文件对测试配好Struts2基本完成。其中还加入了一下配置Spring的应该能看出来在web.xml和Struts.xml中。
  8、开始配置Spring,写个applicationContext.xml放Web-Info下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core.xsd">
<!-- 这里scope="prototype"代表Action层不是单例模式,每次请求都会新创建一个对象-->
<bean id="loginActionBean" class="com.***.action.LoginAction" scope="prototype">
<property name="loginBo" ref="loginBo"/>
<property name="user" ref="userBean"/>
</bean>
<!-- 而Bo层默认都是单例的才能进行事物管理-->
<bean id="loginBo" class="com.***.bo.impl.LoginBoImpl">
<property name="userDao">
<ref bean="userDao"/>
</property>
</bean>
<bean id="dataSource"  
class="org.apache.commons.dbcp.BasicDataSource">  
<property name="driverClassName"  
value="org.gjt.mm.mysql.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/liucj"/>
<property name="username" value="cc"/>
<property name="password" value="cc"/>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/****/dao/po/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="hibernateTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!--Dao事务代理Bean的配置 -->
<bean id="daoTemplate"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="hibernateTransactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
<prop key="delete*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="userDao" parent="daoTemplate">
<property name="target">
<ref bean="userDaoTarget"/>
</property>
</bean>
<bean id="userDaoTarget" class="com.***.dao.impl.UserDaoImpl">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
  9、写个业务类,我这里用的是bo结尾,值得注意的是我的业务层和Hibernate层我都是用接口和实现类的方式。
  LoginBoImpl.java

public class LoginBoImpl implements ILoginBo {
private IUserDao userDao ;

public IUserDao getUserDao() {
return userDao;
}
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public boolean isExits(String name) {
// TODO Auto-generated method stub
if(name.equals("liucj")){
return true;
}
return false;
}
@Override
public void addUser(User user) {
// TODO Auto-generated method stub
try{
PoUser poUser = new PoUser();
poUser.setId(0);
poUser.setName(user.getName());
poUser.setPassword(user.getPassword());
this.userDao.saveUser(poUser);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
  10、写到这里,Spring的事物基本上已经完成,(其中在applicationContext.xml中也加入了Hibernate的配置)
  11、开始写Hibernate层,先写个po对象PoUser.java

public class PoUser {
private int id ;
private String name ;
private String password ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
  
  12、写个映射文件User.hbm.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>  
<class name="com.***.dao.po.PoUser" table="user" catalog="liucj">  
<id name="id" type="java.lang.Integer">  
<column name="id" length="4" />  
</id>  
<property name="name" type="java.lang.String" not-null="true">  
<column name="username" length="30" />  
</property>  
<property name="password" type="java.lang.String">  
<column name="password" length="30" />  
</property>  
</class>  
</hibernate-mapping>  
  13、写个dao类,UserDaoImpl.java

public class UserDaoImpl extends HibernateDaoSupport implements IUserDao{
@Override
public void saveUser(PoUser poUser) {
this.getHibernateTemplate().saveOrUpdate(poUser);
}

}
  14、此时,所有配置完成,写的类都很简单,所以没有用多长时间,接下来准备加入Ajax,还有Hibernate的缓存。到时候有时间在更新吧。
  
  朋友们如果你看了我的事物控制,估计会提出疑问,我只是在Hibernate层进行了事务管理,
  其实应该包装在业务层,就是我上面提的bo层,而action就没有这个必要了。
  只是个简单的例子有点说多了,谁有什么好的建议欢迎留言,共通讨论。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290256-1-1.html 上篇帖子: 【转】MySQL中show 句法得到表列及整个库的详细信息(精品珍藏) 下篇帖子: 思考mysql内核之初级系列13---innodb的簇页管理(摘自老杨)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表