环境
:eclipse3.2+myeclipse5.0m2,
在
tomcat
上顺利运行
,
为了简便开发
,
这一个例子我没有写业务逻辑层
,
而且包名的设置也不太合理,各位可以自行修改
.
构造好开发环境
,
把需要的
jar
导入
web project
中
.
1、创建一个名叫demo数据库,这里用mysql
再创建一个表 :
create table user (
id int(15) not null auto_increment,
username varchar(50) not null,
password varchar(50) not null,
primary key(id)
)type=INNODB;
记得 type 要设为 innodb 或 bdb 类型的,不然的话不支持数据库事务 .
// Fields
// Constructors
/** full constructor */
public AbstractUser(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
// Property accessors
User.java文件
package com.test;
// Generated by MyEclipse - Hibernate Tools
/** full constructor */
public User(Integer id, String username, String password) {
super(id, username, password);
}
}
User.hbm.xml 文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
3、 创建strutsMVC的框架的一些具体实现内容,把struts中的action控制放在spring中去配置,因为可以利用spring中DI或IoC的功能.
struts的配置文件struts-config.xml配置如下,<action>里面type元素的设置,还有设置两个<plug-in/>,第一个用来验证的,第二个是spring和struts结合的一个配置,可以用spring来控制struts的action:
1、创建一个名叫demo数据库,这里用mysql
再创建一个表 :
create table user (
id int(15) not null auto_increment,
username varchar(50) not null,
password varchar(50) not null,
primary key(id)
)type=INNODB;
记得 type 要设为 innodb 或 bdb 类型的,不然的话不支持数据库事务 .
自行插入几条数据;
2、domain层和DAO层
.
使用MyEclipse的数据Database Explorer工具创建User.hmb.xml、AbstractUser.java、User.java映射文件。具体文件如下:
AbstractUser.java文件:
package com.test;
使用MyEclipse的数据Database Explorer工具创建User.hmb.xml、AbstractUser.java、User.java映射文件。具体文件如下:
AbstractUser.java文件:
package com.test;
public abstract class AbstractUser implements java.io.Serializable {
// Fields
private Integer id;
private String username;
private String password;
private String username;
private String password;
// Constructors
/** default constructor */
public AbstractUser() {
}
public AbstractUser() {
}
/** full constructor */
public AbstractUser(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
User.java文件
package com.test;
// Generated by MyEclipse - Hibernate Tools
/**
* User generated by MyEclipse - Hibernate Tools
*/
public class User extends AbstractUser implements java.io.Serializable {
* User generated by MyEclipse - Hibernate Tools
*/
public class User extends AbstractUser implements java.io.Serializable {
// Constructors
/** default constructor */
public User() {
}
public User() {
}
/** full constructor */
public User(Integer id, String username, String password) {
super(id, username, password);
}
}
User.hbm.xml 文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.test.User" table="user">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="username" type="java.lang.String">
<column name="username" length="50" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" not-null="true" />
</property>
</class>
</hibernate-mapping>
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.test.User" table="user">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="username" type="java.lang.String">
<column name="username" length="50" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" not-null="true" />
</property>
</class>
</hibernate-mapping>
提示:User.java,和User.hbm.xm两个文件放在同一个包文件夹里面。
接下来是创建UserDAO接口,和UserDAO接口的实现UserDAOImp.
UserDAO文件:
package com.test;">
接下来是创建UserDAO接口,和UserDAO接口的实现UserDAOImp.
UserDAO文件:
package com.test;">
publicinterface
UserDAO {
publicabstractboolean
isValidUser(String username,String password);
}
UserDAOImp文件,主要是用来验证用户名和密码正确不:
package com.test;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class UserDAOImp extends HibernateDaoSupport implements UserDAO{
private static String hql = "from User as u where u.username=:userName"+" and u.password=:passWord";
public boolean isValidUser(String username, String password) {
Query query= this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(hql);
query.setString("userName", username);
query.setString("passWord", password);
return (query.list().size()>0);
}
}
我把配置文件放在最后才说,即是spring的的配置文件,这里利用spring来管理hibernate的dataSource和事务管理.
3、 创建strutsMVC的框架的一些具体实现内容,把struts中的action控制放在spring中去配置,因为可以利用spring中DI或IoC的功能.
新建一个index.jsp文件,如下所示:
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@
taglib
uri
=
"http://struts.apache.org/tags-bean"
prefix
=
"bean"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-html"
prefix
=
"html"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-logic"
prefix
=
"logic"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-tiles"
prefix
=
"tiles"
%>
<!
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<
html
>
<
head
>
<
title
>
My JSP 'index.jsp' starting page
</
title
>
</
head
>
<
body
>
<
a
href
=
"login.jsp"
>
进入登录系统
</
a
>
</
body
>
</
html
>
再创建一个login.jsp文件
<%@
page
language
=
"java"
pageEncoding
=
"utf-8"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-bean"
prefix
=
"bean"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-html"
prefix
=
"html"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-logic"
prefix
=
"logic"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-tiles"
prefix
=
"tiles"
%>
<!
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<
html:html
lang
=
"true"
>
<
head
>
<
html:base
/>
<
title
>
login.jsp
</
title
>
</
head
>
<
body
>
<
html:form
action
=
"/login"
>
username :
<
html:text
property
=
"username"
/><
html:errors
property
=
"username"
/><
br
/>
password :
<
html:password
property
=
"password"
/><
html:errors
property
=
"password"
/><
br
/>
<
html:submit
/><
html:cancel
/>
</
html:form
>
</
body
>
</
html:html
>
登录成功后的success.jsp
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@ page language = "java" pageEncoding = "UTF-8" %>
<%@
taglib
uri
=
"http://struts.apache.org/tags-bean"
prefix
=
"bean"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-html"
prefix
=
"html"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-logic"
prefix
=
"logic"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-tiles"
prefix
=
"tiles"
%>
<!
DOCTYPE
HTML
PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<
html:html
lang
=
"true"
>
<
head
>
<
html:base
/>
<
title
>
success.jsp
</
title
>
<
meta
http-equiv
=
"pragma"
content
=
"no-cache"
>
<
meta
http-equiv
=
"cache-control"
content
=
"no-cache"
>
<
meta
http-equiv
=
"expires"
content
=
"0"
>
<
meta
http-equiv
=
"keywords"
content
=
"keyword1,keyword2,keyword3"
>
<
meta
http-equiv
=
"description"
content
=
"This is my page"
>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</
head
>
<
body
>
Welcome!
<
br
/>
<
logic:present
name
=
"loginForm"
>
欢迎你
,
<
bean:write
name
=
"loginForm"
property
=
"username"
/>
</
logic:present
>
</
body
>
</
html:html
>
创建struts框架的action文件,LoginAction.java文件,这里没有创建form文件,在struts-config.xml中配置.
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
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;
/**
* MyEclipse Struts
* Creation date: 08-08-2006
*
* XDoclet definition:
* @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true"
*/
public class LoginAction extends Action {
private 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");
if (userDAO.isValidUser(username,password)) {
return mapping.findForward("success");
} else {
return mapping.getInputForward();
}
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
struts的配置文件struts-config.xml配置如下,<action>里面type元素的设置,还有设置两个<plug-in/>,第一个用来验证的,第二个是spring和struts结合的一个配置,可以用spring来控制struts的action:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts-config
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd"
>
<
struts-config
>
<
data-sources
/>
<
form-beans
>
<
form-bean
name
=
"loginForm"
type
=
"org.apache.struts.validator.DynaValidatorForm"
>
<
form-property
name
=
"password"
type
=
"java.lang.String"
></
form-property
>
<
form-property
name
=
"username"
type
=
"java.lang.String"
></
form-property
>
</
form-bean
>
</
form-beans
>
<
global-exceptions
/>
<
global-forwards
>
<
forward
name
=
"success"
path
=
"/success.jsp"
/>
</
global-forwards
>
<
action-mappings
>
<
action
attribute
=
"loginForm"
input
=
"/login.jsp"
name
=
"loginForm"
path
=
"/login"
scope
=
"request"
validate
=
"true"
type
=
"org.springframework.web.struts.DelegatingActionProxy"
/>
</
action-mappings
>
<
message-resources
parameter
=
"com.test.struts.ApplicationResources"
/>
<
plug-in
className
=
"org.apache.struts.validator.ValidatorPlugIn"
>
<
set-property
property
=
"pathnames"
value
=
"/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
/>
</
plug-in
>
<
plug-in
className
=
"org.springframework.web.struts.ContextLoaderPlugIn"
>
<
set-property
property
=
"contextConfigLocation"
value
=
"/WEB-INF/applicationContext.xml"
/>
</
plug-in
>
</
struts-config
>
在
WEB-INF/
创建
validation.xml
文件
,
用来验证密码和用户名的
文件如下所示
:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
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
=
用户名称
prompt.password
=
登录密码
errors.required
=
{0}
是必须的
.
4、最关键的一步,也是最后一步,酷暑
spring的配置文件applicationContext.xml
具体文件,根据具体的情况把用户名和密码修改即可
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
beans
PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
<
beans
>
<
bean
id
=
"dataSource"
class
=
"org.apache.commons.dbcp.BasicDataSource"
>
<
property
name
=
"driverClassName"
>
<
value
>
com.mysql.jdbc.Driver
</
value
>
</
property
>
<
property
name
=
"url"
>
<
value
>
jdbc:mysql://localhost:3306/demo
</
value
>
</
property
>
<
property
name
=
"username"
>
<
value
>
root
</
value
>
</
property
>
<
property
name
=
"password"
>
<
value
>
12345
</
value
>
</
property
>
</
bean
>
<
bean
id
=
"sessionFactory"
class
=
"org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
=
"dataSource"
>
<
ref
bean
=
"dataSource"
/>
</
property
>
<
property
name
=
"mappingResources"
>
<
list
>
<
value
>
com/test/User.hbm.xml
</
value
>
</
list
>
</
property
>
<
property
name
=
"hibernateProperties"
>
<
props
>
<
prop
key
=
"hibernate.dialect"
>
org.hibernate.dialect.MySQLDialect
</
prop
>
<
prop
key
=
"hibernate.show_sql"
>
true
</
prop
>
</
props
>
</
property
>
</
bean
>
<
bean
id
=
"userDAO"
class
=
"com.test.UserDAOImp"
>
<
property
name
=
"sessionFactory"
>
<
ref
local
=
"sessionFactory"
/>
</
property
>
</
bean
>
<
bean
id
=
"transactionManager"
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<
property
name
=
"sessionFactory"
>
<
ref
local
=
"sessionFactory"
/>
</
property
>
</
bean
>
<
bean
id
=
"userDAOProxy"
class
=
"org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
>
<
property
name
=
"transactionManager"
>
<
ref
local
=
"transactionManager"
/>
</
property
>
<
property
name
=
"target"
>
<
ref
local
=
"userDAO"
/>
</
property
>
<
property
name
=
"transactionAttributes"
>
<
props
>
<
prop
key
=
"is*"
>
PROPAGATION_REQUIRED,readOnly
</
prop
>
</
props
>
</
property
>
</
bean
>
<
bean
name
=
"/login"
class
=
"com.test.struts.action.LoginAction"
singleton
=
"false"
>
<
property
name
=
"userDAO"
>
<
ref
local
=
"userDAOProxy"
/>
</
property
>
</
bean
>
</
beans
>
注意:
<
bean
name
=
"/login"
class
=
"com.test.struts.action.LoginAction"
singleton
=
"false"
>
中name的值要和struts配置文件的<action>里面的path子元素一样,还有建议把singleton设置为false,解决了
Struts中有时会发生错误的线程安全问题.
5、在tomcat发布运行, 体验一下动手带来的乐趣
转载请标明出处,谢谢你的合作.http://blog.csdn.net/lightersky/archive/2006/08/11/1050374.aspx
上面这个例子是我转的,我前几天也配置成功了,不过是struts+hibernate和这个基本上一样,签于本人的语文水平有限,所以就直接转过来了,不过我用的是eclipse3.1.1+myeclipse4.1+tomcat5.0.28不过这个都没什么关系,只要基本思路清晰就成了。。呵呵。。。。。。