SHH

http://meilvin.blog.hexun.com QQ:586762 说明:此教程是oksonic视频教程的修改,我移植到eclipse3.2+myEclipse5.0环境下工具:     eclipse-SDK-3.2.1、MyEclipse_5.0.1GA_E3.2、Tomcat_5.5.15、mysql-5.0.18 相关资料下载说明:http://meilvin.gbaopan.com/files/0584e783cd5b489baaa072f3c5616038.gbp properties2GBK.bat:http://meilvin.gbaopan.com/files/75bad8e012a94b6f8ab1f03ac5e17dba.gbp 视频教程下载下面五个放在同一文件夹解压即可 http://meilvin.gbaopan.com/files/83b41d79529c4c3c807d61310465043b.gbp http://meilvin.gbaopan.com/files/0ff8c56ccd134f2e9730d0f4cf38a59b.gbp http://meilvin.gbaopan.com/files/4d3c645ca0dc415dae16b2eb56de2270.gbp http://meilvin.gbaopan.com/files/f3683bd4a9c44d7b95452089dda4a4fb.gbp http://meilvin.gbaopan.com/files/e41ad14882bf40a5ba0cd6d238c5f602.gbp   开始。。新建工程:名称为 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进行测试了 http://localhost:8080/login/   如果不输入任何数据而直接提交表单的话就可以看到效果了。   好了,如果没有什么问题的话就继续往下看吧,如果有问题的话就得往上看了^_^ 出现了乱码,我们用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" "http://www.springframework.org/dtd/spring-beans.dtd">   <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="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" 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> 代码已经全部完成,可以进行测试了!!!如果测试不成功,请往回查看。。。。完了!!! 失误失误,大小写不注意,就是这种后果,大家以后要注意点哦好了,成功了,祝大家都成功! 拜拜!

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ljah/archive/2008/06/24/2582226.aspx

你可能感兴趣的:(spring,jsp,Hibernate,xml,struts)