说明:此教程是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 阅读(1127)
评论(0) 编辑 收藏 所属分类:
他山之石