这个Web应用很简单,就是实现一个用户注册页面,当用户在register.jsp页面输入注册信息,点保存,如果成功,进入registerSuccess.jsp页面。这个应用虽然很小,但它也有三层组成,表示层由Struts框架负责,业务层由Spring框架负责,持久层由Hibernate框架负责。
开发环境:MyEclipse 5+ MySQL4 + Struts1.3.5 + Spring2.0.1 + Hibernate3.2.1 + Tomcat5.0.19 + jdk1.4.2_06.
1. 首先,我们在MyEclipse中新建一个Web Project ,login;
2.然后把Struts,Spring,Hibernate框架所需要的jar包以及MySQL的驱动拷贝到WEB-INF/lib下;
3.创建用户注册页面register.jsp
<%@
taglib
uri
=
"http://struts.apache.org/tags-bean"
prefix
=
"bean"
%>
<%@
taglib
uri
=
"http://struts.apache.org/tags-html"
prefix
=
"html"
%>
<
html
>
<
head
>
<
title
><
bean:message
key
=
"register.title"
/></
title
>
</
head
>
<
body
>
<
html:errors
/>
<
html:form
action
=
"register.do"
>
<
table
>
<
tr
>
<
td
><
bean:message
key
=
"register.username"
/>
:
</
td
>
<
td
><
html:text
property
=
"register.username"
/></
td
>
</
tr
>
<
tr
>
<
td
><
bean:message
key
=
"register.password"
/>
:
</
td
>
<
td
><
html:password
property
=
"register.password"
/></
td
>
</
tr
>
<
tr
>
<
td
><
bean:message
key
=
"register.email"
/>
:
</
td
>
<
td
><
html:text
property
=
"register.email"
/></
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
align
=
"center"
>
<
html:submit
><
bean:message
key
=
"register.submit"
/></
html:submit
>
</
td
>
</
tr
>
</
table
>
</
html:form
>
</
body
>
</
html
>
4.
创建注册成功后显示的页面
registerSuccess.jsp
<%@
taglib
uri
=
" http://struts.apache.org/tags-bean "
prefix
=
"bean"
%>
<
html
>
<
head
>
<
title
><
bean:message
key
=
"register.title"
/></
title
>
</
head
>
<
body
>
<
bean:message
key
=
"register.success"
/>
</
body
>
</
html
>
5. 创建消息资源文件registermessages.properties
register.title =
Register
register.username =
UserName
register.password =
Password
register.email =
Email
register.submit =
Submit
register.success =
Register
Success!
6.
由于我们使用动态
ActionForm,
只需在
Struts-config.xml
中配置与
register.jsp
页面中
form
对应的
ActionForm
。
7.
创建配置文件
Struts-config.xml
<?
xml
version
=
"1.0"
encoding
=
"iso-8859-1"
?>
<!
DOCTYPE
struts-config
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd"
>
<!--
Default configuration file for examples application.
Each module also has its own struts-config under: /WEB-INF/$MODULE/
@version $Revision: 1.9 $ $Date: 2006-02-13 18:39:49 -0700 (Mon, 13 Feb 2006) $
-->
<
struts-config
>
<
form-beans
>
<!—
配置
register.jsp
中
form
对应的
ActionFrom-->
<
form-bean
name
=
"registerForm"
type
=
"org.apache.struts.action.DynaActionForm"
>
<
form-property
name
=
"register"
type
=
"test.register.entity.Register"
/>
</
form-bean
>
</
form-beans
>
<!—
配置对
Struts Action
请求的代理
-->
<
controller
processorClass
=
"org.springframework.web.struts.DelegatingRequestProcessor"
/>
<!—
配置
register.jsp
中
form
对应的
Action-->
<
action-mappings
>
<
action
name
=
"registerForm"
path
=
"/register"
scope
=
"request"
type
=
"test.register.action.RegisterAction"
validate
=
"false"
input
=
"register.jsp"
>
<
forward
name
=
"success"
path
=
"/registerSuccess.jsp"
/>
</
action
>
</
action-mappings
>
<
message-resources
parameter
=
"test.register.registermessages"
/>
<!—
配置插件,让
action
能访问
sping
容器
-->
<
plug-in
className
=
"org.springframework.web.struts.ContextLoaderPlugIn"
>
<
set-property
property
=
"contextConfigLocation"
value
=
"/WEB-INF/action-servlets.xml"
/>
</
plug-in
>
</
struts-config
>
8.
创建实体类
Register.java
package
test.register.entity;
import
java.io.Serializable;
public
class
Register
implements
Serializable{
private
static
final
long
serialVersionUID
= 1521645755684977819L;
private
Long
id
;
private
String
username
;
private
String
password
;
private
String
email
;
public
Register(){
}
public
String getEmail() {
return
email
;
}
public
void
setEmail(String email) {
this
.
email
= email;
}
public
Long getId() {
return
id
;
}
public
void
setId(Long id) {
this
.
id
= id;
}
public
String getPassword() {
return
password
;
}
public
void
setPassword(String password) {
this
.
password
= password;
}
public
String getUsername() {
return
username
;
}
public
void
setUsername(String username) {
this
.
username
= username;
}
}
9.
创建
Hibernate
映射文件,
Register.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"
>
<
hibernate-mapping
package
=
"test.register.entity"
>
<
class
name
=
"Register"
table
=
"REGISTER"
>
<
id
name
=
"id"
>
<
generator
class
=
"native"
/>
</
id
>
<
property
name
=
"username"
not-null
=
"true"
length
=
"15"
column
=
"USERNAME"
/>
<
property
name
=
"password"
not-null
=
"true"
length
=
"15"
column
=
"PASSWORD"
/>
<
property
name
=
"email"
not-null
=
"true"
length
=
"15"
column
=
"EMAIL"
/>
</
class
>
</
hibernate-mapping
>
9. 创建Spring配置文件applicationContext.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
beans
PUBLIC
"-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd"
>
<
beans
>
<
bean
id
=
"dataSource"
class
=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<
property
name
=
"driverClassName"
value
=
"com.mysql.jdbc.Driver"
/>
<
property
name
=
"url"
value
=
"jdbc:mysql://localhost/register"
/>
<
property
name
=
"username"
value
=
"root"
/>
<
property
name
=
"password"
value
=
"root"
/>
</
bean
>
<!-- Hibernate SessionFactory -->
<
bean
id
=
"sessionFactory"
class
=
"org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
<
property
name
=
"mappingDirectoryLocations"
>
<
value
>
classpath:test/register/entity/
</
value
>
</
property
>
<
property
name
=
"hibernateProperties"
>
<
props
>
<
prop
key
=
"hibernate.dialect"
>
org.hibernate.dialect.MySQLDialect
</
prop
>
<
prop
key
=
"hibernate.show_sql"
>
true
</
prop
>
<
prop
key
=
"hibernate.generate_statistics"
>
true
</
prop
>
</
props
>
</
property
>
</
bean
>
<
bean
id
=
"registerDAO"
class
=
"test.register.dao.RegisterDAO"
>
<
property
name
=
"sessionFactory"
>
<
ref
local
=
"sessionFactory"
/>
</
property
>
</
bean
>
<
bean
id
=
"registerService"
class
=
"test.register.service.RegisterService"
>
<
property
name
=
"registerDAO"
>
<
ref
local
=
"registerDAO"
/>
</
property
>
</
bean
>
</
beans
>
10. 创建数据访问对象
RegisterDAO.java
package
test.register.dao;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import
test.register.entity.Register;
public
class
RegisterDAO
extends
HibernateDaoSupport{
public
Register saveRegister(Register r){
try
{
this
.getHibernateTemplate().saveOrUpdate(r);
return
r;
}
catch
(Exception e) {
e.printStackTrace();
return
null
;
}
}
}
12.创建服务对象RegisterService.java
package
test.register.service;
import
test.register.dao.RegisterDAO;
import
test.register.entity.Register;
public
class
RegisterService {
private
RegisterDAO
registerDAO
;
public
RegisterDAO
getRegisterDAO() {
return
registerDAO
;
}
public
void
setRegisterDAO(RegisterDAO registerDAO) {
this
.
registerDAO
= registerDAO;
}
public
Register saveRegister(Register r){
this
.getRegisterDAO().saveRegister(r);
return
r;
}
}
11.
创建
web.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
web-app
PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"
>
<
web-app
>
<
context-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
/WEB-INF/applicationContext.xml
</
param-value
>
</
context-param
>
<
listener
>
<
listener-class
>
org.springframework.web.context.ContextLoaderListener
</
listener-class
>
</
listener
>
<
servlet
>
<
servlet-name
>
action
</
servlet-name
>
<
servlet-class
>
org.apache.struts.action.ActionServlet
</
servlet-class
>
<
init-param
>
<
param-name
>
config
</
param-name
>
<
param-value
>
/WEB-INF/struts-config.xml
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
debug
</
param-name
>
<
param-value
>
3
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
detail
</
param-name
>
<
param-value
>
3
</
param-value
>
</
init-param
>
<
load-on-startup
>
0
</
load-on-startup
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
action
</
servlet-name
>
<
url-pattern
>
*.do
</
url-pattern
>
</
servlet-mapping
>
<
welcome-file-list
>
<
welcome-file
>
register.jsp
</
welcome-file
>
</
welcome-file-list
>
</
web-app
>
14
.创建
RegisterAction.java
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.action.DynaActionForm;
import
test.register.entity.Register;
import
test.register.service.RegisterService;
public
class
RegisterAction
extends
Action{
private
RegisterService
registerService
;
public
RegisterService getRegisterService() {
return
registerService
;
}
public
void
setRegisterService(RegisterService registerService) {
this
.
registerService
= registerService;
}
public
ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws
Exception {
Register r = (Register)((DynaActionForm)form).get(
"register"
);
getRegisterService().saveRegister(r);
return
mapping.findForward(
"success"
);
}
}
在
RegisterAction.java
中,为了获取
spring
容器中的
RegisterService
对象,我们要对
struts-config.xml
作下修改,具体修改如下:
在
struts-config.xml
增加
controller
元素
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
目的告诉
Struts
自动将对
Action
的请求委托给
Spring
上下文中的
Struts Action
来处理。
并且为了让
Struts
能访问
Spring
容器,还必须在
struts-config.xml
注册一个能访问
Spring
上下文的插件:
<
plug-in
className
=
"org.springframework.web.struts.ContextLoaderPlugIn"
>
<
set-property
property
=
"contextConfigLocation"
value
=
"/WEB-INF/action-servlets.xml"
/>
</
plug-in
>
action-servlets.xml
文件的具体内容如下:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
beans
PUBLIC
"-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd"
>
<
beans
>
<
bean
name
=
"/register"
class
=
"test.register.action.RegisterAction"
>
<
property
name
=
"registerService"
ref
=
"registerService"
/>
</
bean
>
</
beans
>
注意:这里bean是name属性,而不是id。
至此,一个完整的SSH(Struts,Spring,Hibernate)框架搭建好了。