博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts&hibernate&spring例子
阅读量:4048 次
发布时间:2019-05-25

本文共 12892 字,大约阅读时间需要 42 分钟。

说明:此教程是oksonic视频教程的修改,我移植到eclipse3.2+myEclipse5.0环境下。原来放在我在和讯的博客上,写的比较早,完成于去年下半学期,当时还在学校,现在出来打工了,今年7月毕业。感觉在CSDN的高手多,所以转移至此。

功能:集合了SSH框架,完成简单的登陆功能

工具:     eclipse-SDK-3.2.1、MyEclipse_5.0.1GA_E3.2、Tomcat_5.5.15、mysql-5.0.18

相关资料下载 原来的资料都是放在gbaopan下,现在gbaopan关了,没有地方放了,只能放在邮箱里,在发件箱里的附件中

用户名:   密码:  mei.infon

视频教程下载邮件主题: struts+hibernate+spring视频.part1       struts+hibernate+spring视频.part2

工程下载邮件主题:  struts+hibernate+spring_src.part1            struts+hibernate+spring_src.part1 说明文件邮件主题:  struts+hibernate+spring_说明 properties2GBK.bat  struts+hibernate+spring_说明    开始。。新建工程:名称为 login   创建Struts框架   创建 index.jsp,增加一链接指向 login.jsp <html>   <head>     <title>Struts+Spring+Hibernate</title>   </head>     <body>     <a href="login.jsp">Login</a>   </body> </html>   按下Ctrl + N,创建 login.jsp、LoginAction,使用MyEclipse的向导就可以了,记得选对正确的版本   在ActionForm配置页中选择类型为动态Form,并继承于DynaValidatorForm,新增两个属性:username、password, 在创建jsp文件打上钩,将路径改为/login.jsp,然后下一步,改LoginAction的Input source改为/login.jsp,点击完成   按下Ctrl + N 创建一个forwards,记得选对正确的版本 name 输入 indexGo 路径选择 /index.jsp   配置validator 先添加Struts插件,使用向导 Plugin class : org.apache.struts.validator.ValidatorPlugIn Property : pathnames Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml 这里需要两个xml文件 现在创建“validation.xml” 文件

文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "validator_1_1_3.dtd" > <form-validation>  <formset>   <form name="loginForm">    <field property="username" depends="required">     <arg0 key="prompt.username" />    </field>    <field property="password" depends="required">     <arg0 key="prompt.password" />    </field>   </form>  </formset> </form-validation>   编辑资源文件“ApplicationResources.properties” 增加以下内容   prompt.username=User Name prompt.password=User Password errors.required={0} is required.   再创建中文件资源文件“ApplicationResources_zh_CN.properties” 增加以下内容

prompt.username=用户名称 prompt.password=登录密码 errors.required={0} 必需填写!

我这没有用Properties Editor插件,所以在tomcat发布后会显示乱码,我们可以用native2ascii来解决 我建了个批处理文件properties2GBK.bat native2ascii -encoding gbk ApplicationResources_zh_CN.properties temp.properties del ApplicationResources_zh_CN.properties rename temp.properties ApplicationResources_zh_CN.properties 放在你的classpath下,或者拷到你要转GBK的地方,双击一下就可以了 我刚开始在eclipse编辑中文properties文件,保存后再打开,也会出现乱码,只要在eclipse上设置一下就可以了 具体设置:Eclipse-->Preferences...-->在“type filter text“栏中输入”Content Types“查找, 然后在选择右边的Text下边相应的文件后缀名,即properties.修改其编码就可。可以修改成GBK 我这已经改好了,直接打开就是汉语了。。。 建议下载 properties Editor插件,我这上不了外国网站,没有办法。。。。有空再下吧。。   修改struts-config.xml文件 在以下位置增加validate="true" <action-mappings >     <action       attribute="loginForm"       input="/login.jsp"       name="loginForm"       path="/login"       scope="request"       validate="true"       type="com.test.struts.action.LoginAction" />   </action-mappings>   这里说明提交的数据必需经过验证,而验证则是通过validator框架进行的。

修改web.xml文件 增加  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>   </welcome-file-list> 显示主页   修改LoginAction.java文件的execute方法,内容如下 public ActionForward execute(   ActionMapping mapping,   ActionForm form,   HttpServletRequest request,   HttpServletResponse response) {   DynaValidatorForm loginForm = (DynaValidatorForm) form;   String username=loginForm.getString("username");   String password=loginForm.getString("password");   if(username.equals("test")||password.equals("test")){    return mapping.findForward("indexGo");   }else{    return mapping.getInputForward();   }  }   现在再修改一下login.jsp 增加以下部份 <%@ page language="java" contentType="text/html; charset=UTF-8" %>   其中charset=UTF-8 是使用UTF-8的字符编码,这也是为了支持国际化而使用的。要不然中文还是会显示乱码 关于乱码解决,网上查资料,一查就有一堆 我们现在还没有传递中文参数,要不然还得加个过滤器。。

好了,现在可以启动Tomcat进行测试了

如果不输入任何数据而直接提交表单的话就可以看到效果了。   好了,如果没有什么问题的话就继续往下看吧,如果有问题的话就得往上看了^_^ 出现了乱码,我们用native2ascii来解决,非得我重启一下!> ok了   现在创建Spring框架了,在这里我将Spring所有的包全部加载进去,因为我还不知道具体用到哪些类,全部加进去方便点   单选框选第二个,这样的话所有的类库和标签等都将拷贝到项目中去,这样方便以后的布署 下一步后是创建配置文件,将文件放到“WebRoot/WEB-INF”目录下,文件名称为“applicationContext.xml”     配置struts-config.xml文件,添加(spring)的插件   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">     <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />   </plug-in>     修改LoginAction配置   原: <action       attribute="loginForm"       input="/login.jsp"       name="loginForm"       path="/login"       scope="request"       validate="true"       type="com.test.struts.action.LoginAction" />     </action-mappings>   改为: <action       attribute="loginForm"       input="/login.jsp"       name="loginForm"       path="/login"       scope="request"       validate="true"       type="org.springframework.web.struts.DelegatingActionProxy" />   </action-mappings>     这里将使用spring的代理器来对Action进行控制   当提交到/login.do是将控制权交给了spring,然后由spring来决定是否转回到struts的Action   现在来配置spring   <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "">   <beans>  <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean> </beans>

属性singleton="false",指明了Action 的实例获取方式为每次重新创建。解决了Struts中令人诟病的线程安全问题(Struts中,由一个Action实例处理所有的请求,这就导致了类公用资源在并发请求中的线程同步问题。)(摘自spring开发指南) 测试一下,如果没有什么问题的话就继续往下看吧,如果有问题的话就得往上看了^_^ 好的,struts spring俩人成为朋友了,友好的集成到了一起。。。   建立数据库在 这里我使用的是mysql-5.0.18 配置好mySql连接...... 不好意思,这里我忘记驱动怎么写了。。。 CREATE TABLE `user` (   `ID` int(11) NOT NULL auto_increment,   `USERNAME` varchar(50) NOT NULL default '',   `PASSWORD` varchar(50) NOT NULL default '',   PRIMARY KEY  (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;   添加记录 insert into user (USERNAME,PASSWORD) values ('test','test')

创建Hibernate框架 新建包com.test.hibernate com.test.beans 选hibernate3.1 libraries全选,我也不知道那个具体有什么用^_^,可能只选第一个也行,但考虑还要用DAO,第三个也选上了, 看第二是高级支持,也加上了,没试里面的作用,大家有空可以试一下。。 第二步选 spring configuration file 我们直接在Spring配置hibernate的连接。。就不用创建hibernate.cfg.xml了 第三步选existing Spring configuration file我们刚才已经创建了一个。。  SessionFactory ID就直接填sessionFactory 第四步 Bean Id填 dataSource 我们用JDBC Driver,DB Profile选刚才配置好的

使用MyEclipse的数据Database Explorer工具创建User.hmb.xml、AbstractUser.java、User.java,UserDAO文件 这里选项比较多,大家看视频。。我就不一一说明了。。。不懂的看书^_^

打开User.hbm.xml配置文件,把 catalog="meilvin" 这一项删除了,要不后果很严重。因为mySql在连接的时候要写上数据库 如果我们在这里也写上数据库的名字的话就会重复了,就变成了meilvin.meilvin.user,显然是错的。后面就会报错,我深有体会。

修改UserDAO,增加如下方法 public boolean isValidUser(String username, String password) {   String hql = "from User u where u.username=? and u.password=?";   String []userInfo=new String[2];   userInfo[0]=username;   userInfo[1]=password;   List userList = this.getHibernateTemplate().find(hql, userInfo);   if (userList.size() > 0) {    return true;   }   return false;  }

修改LoginAction.java文件,使用userDao的方法来进行用户验证 package com.test.struts.action;   import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;   import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.DynaValidatorForm;   import com.test.UserDAO;

public class LoginAction extends Action {

 private UserDAO userDAO;    public UserDAO getUserDAO() {   return userDAO;  }    public void setUserDAO(UserDAO userDAO) {   this.userDAO = userDAO;  }    public ActionForward execute(ActionMapping mapping, ActionForm form,    HttpServletRequest request, HttpServletResponse response) {   DynaValidatorForm loginForm = (DynaValidatorForm) form;   // TODO Auto-generated method stub   String username = (String) loginForm.get("username");   String password = (String) loginForm.get("password");   loginForm.set("password", null);   if (userDAO.isValidUser(username,password)) {    return mapping.findForward("indexGo");   } else {    return mapping.getInputForward();   }  } }   现在剩下最后的spring配置了 把原来的 <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean> 删除了 在最底下增加  <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">   <property name="userDAO">    <ref bean="UserDAO" />   </property>  </bean> 利用反转控制产生action 现在可以进行测试了,可以登陆了^-^ 老是说log4j没有配置,下次视频配置一下。。。成功了。。

注册新用户,用户浏览、删除用户

打开 UserDAO.java 文件,增加以下方法:  public boolean addUser(User user) {   try {    //调用前面save方法    save(user);   } catch (Exception e) {    System.out.println(e.getMessage());    return false;   }   return true;  }

按下 Ctrl + N ,使用向导创建 adduser.jsp 、AdduserForm(DynaValidatorForm)、AdduserAction.java文件,这是注册新用户的Action 我用的是maxthon浏览器,如果是add.jsp,它会当做广告拦下来,,,,多加个user...

修改配置内容如下: <action       attribute="adduserForm"       input="/adduser.jsp"       name="adduserForm"       path="/adduser"       validate="true"       type="org.springframework.web.struts.DelegatingActionProxy" />

第一句实现了必须对提交的数据进行验证 第二句实现了和spring集成

修改 AdduserAction.java 文件,内容如下:

 private UserDAO userDAO;    public UserDAO getUserDAO() {   return userDAO;  }  public void setUserDAO(UserDAO userDAO) {   this.userDAO = userDAO;  }

 public ActionForward execute(   ActionMapping mapping,   ActionForm form,   HttpServletRequest request,   HttpServletResponse response) {   DynaValidatorForm adduserForm = (DynaValidatorForm) form;   User user = new User();   user.setUsername(adduserForm.getString("username"));   user.setPassword(adduserForm.getString("password"));   adduserForm.set("password", null);   if (userDAO.addUser(user)) {    return mapping.findForward("indexGo");   } else {    return mapping.getInputForward();   }  }

关于在Action中使用 User 对像,我在这里没有使用 IoC 方式进行管理,这不好,希望大家在正式应用中使用。

在spring配置文件(applicationContext.xml)中加入以下内容:  <bean name="/adduser" class="com.test.struts.action.AdduserAction"   singleton="false">   <property name="userDAO">    <ref bean="UserDAO" />   </property>  </bean>

修改 index.jsp 文件 <html>   <head>     <title>Struts+Spring+Hibernate</title>   </head>     <body>     <a href="login.jsp">Login</a>     <br>     <a href="add.jsp">Add User</a>   </body> </html>

修改 adduser.jsp 文件的首行,替换为以下内容,目的是为了使用UTF-8的编码格式显示页面 <%@ page language="java" contentType="text/html; charset=UTF-8" %>

修改 validation.xml 文件,加入以下内容:   <form name="adduserForm">    <field property="username" depends="required">     <arg0 key="prompt.username" />    </field>    <field property="password" depends="required">     <arg0 key="prompt.password" />    </field>   </form>

现在整个 AddUser 已经完成,如果你觉得不放心的话可以在这里停一停先进行这一段的测试!

创建一个Action用于查询数据,名称为 find

创建 display.jsp 文件,用于显示所有用户

创建一个 forward displayGO 指向 display.jsp 选中 redirect

修改 UserDAO.java 文件,增加 findAllUser() 方法,代码如下:  public List findAllUser() {   List users=this.getHibernateTemplate().find("from User u");   if(users.size()>0)    return users;   return null;  }

修改 struts-config.xml 文件 <action path="/find" type="org.springframework.web.struts.DelegatingActionProxy" />

修改 FindAction.java 文件,内容如下:  private UserDAO userDAO;    public UserDAO getUserDAO() {   return userDAO;  }  public void setUserDAO(UserDAO userDAO) {   this.userDAO = userDAO;  }

 public ActionForward execute(   ActionMapping mapping,   ActionForm form,   HttpServletRequest request,   HttpServletResponse response) {   List users=userDAO.findAllUser();   if(users!=null){    HttpSession session=request.getSession();    session.setAttribute("users",users);    return mapping.findForward("displayGo");   }   return mapping.getInputForward();  }

在spring配置文件(applicationContext.xml)中加入以下内容:  <bean name="/find" class="com.test.struts.action.FindAction" singleton="false">   <property name="userDAO">    <ref bean="UserDAO" />   </property>  </bean>

修改 display.jsp 文件,内容如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="" prefix="bean"%> <%@ taglib uri="" prefix="html"%> <%@ taglib uri="" prefix="logic"%> <html>   <head>     <title>DISPLAY</title>   </head>   <body>     <logic:present name="users">     <form action="del.do">     <table border="1">     <logic:iterate id="element" name="users">  <tr><td width="100">   <input type="radio" name="select" value="<bean:write name="element" property="id"/>">      <bean:write name="element" property="username"/>     </td></tr>     </logic:iterate>     </table>     <INPUT type="submit" name="Submit" value="submit">     </form>     </logic:present>   </body> </html>

现在整个 Display 已经完成,如果你觉得不放心的话可以在这里停一停先进行这一段的测试!

新建一个 Action 用于删除选中的用户,name:del

修改 struts-config.xml 文件中的以下内容为: <action path="/del" type="org.springframework.web.struts.DelegatingActionProxy" />

修改 UserDAO.java 文件,增加以下方法  public boolean delUser(Integer lid) {   try {    User user=(User)findById(lid);    this.getHibernateTemplate().delete(user);   } catch (Exception e) {    System.out.println(e.getMessage());    return false;   }   return true;  }

修改 DelAction.java 文件,内容如下: public class DelAction extends Action {

 private UserDAO userDAO;

 public UserDAO getUserDAO() {   return userDAO;  }

 public void setUserDAO(UserDAO userDAO) {   this.userDAO = userDAO;  }

 public ActionForward execute(   ActionMapping mapping,   ActionForm form,   HttpServletRequest request,   HttpServletResponse response) {   Integer selid=Integer.valueOf(request.getParameter("select"));   if(userDAO.delUser(selid))    return mapping.findForward("indexGo");   return mapping.getInputForward();  } } Ctrl+Shift+o导入包 在spring配置文件(applicationContext.xml)中加入以下内容:  <bean name="/del" class="com.test.struts.action.DelAction" singleton="false">   <property name="userDAO">    <ref bean="UserDAO" />   </property>  </bean>

修改 index.jsp 文件 <html>   <head>     <title>Struts+Spring+Hibernate</title>   </head>     <body>     <a href="login.jsp">Login</a>     <br>     <a href="add.jsp">Add User</a>     <br>     <a href="find.do">Display</a>   </body> </html>

代码已经全部完成,可以进行测试了!!!

如果测试不成功,请往回查看。。。。完了!!! 失误失误,大小写不注意,就是这种后果,大家以后要注意点哦 好了,成功了,祝大家都成功! 拜拜!

转载地址:http://cobci.baihongyu.com/

你可能感兴趣的文章
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
自定义 select 下拉框 多选插件
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
arm linux 生成火焰图
查看>>
linux和windows内存布局验证
查看>>