posts - 0,  comments - 17,  trackbacks - 0

说明:此教程是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关了,没有地方放了,只能放在邮箱里,在发件箱里的附件中


视频教程下载邮件主题: 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进行测试了
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>


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

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

posted on 2007-12-18 11:43 xyz 阅读(1129) 评论(0)  编辑  收藏 所属分类: 他山之石

只有注册用户登录后才能发表评论。


网站导航:
 

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

留言簿

随笔档案(1)

文章分类(44)

文章档案(46)

收藏夹(1)

Adobe

AOP

API

appServer

BI

c

  • c-free
  • codeblocks
  • codelite
  • CodeLite IDE 是一个强大的开源,跨平台的 C/C++整合开发环境. 支持包括 Windows、Linux 和 Mac 系统下运行
  • codelite官网
  • dev-c++
  • Dev-C++是一个C&C++开发工具,它是一款自由软件,遵守GPL协议。
  • GCC
  • GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada 与其他语言。

Cache

CMS

DB

eclipse

FreeMarker

hibernate

html5

ibatis

java

jquery

js

json

Linux

Log

mail server

mobile

mysql

oauth

openID

other

PHP

portal

report

Scheduler

schema

Security

SOA

spring

struts

UI原型设计

w3c

Wap

webservice

xml

供应链管理

博客链接

好网站

工作流

开源网

招聘

插件下载

操作系统

构建可伸缩的系统

构建工具

测试

  • IETest
  • IE官网
  • OpenSTA
  • Siege
  • Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力

游戏

源码托管

经营

资源

金融/财务

搜索

  •  

最新评论