这个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
1<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
2<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
3<html>
4
5<head>
6 <title><bean:message key="register.title"/></title>
7</head>
8
9<body>
10<html:errors />
11 <html:form action="register.do">
12 <table >
13 <tr>
14 <td><bean:message key="register.username"/>:</td>
15 <td><html:text property="register.username" /></td>
16 </tr>
17 <tr>
18 <td><bean:message key="register.password"/>:</td>
19 <td><html:password property="register.password" /></td>
20 </tr>
21 <tr>
22 <td><bean:message key="register.email"/>:</td>
23 <td><html:text property="register.email" /></td>
24 </tr>
25 <tr>
26 <td colspan="2" align="center">
27 <html:submit><bean:message key="register.submit"/></html:submit>
28 </td>
29 </tr>
30 </table>
31 </html:form>
32</body>
33
34</html>
4.创建注册成功后显示的页面registerSuccess.jsp
1<%@ taglib uri=" http://struts.apache.org/tags-bean " prefix="bean" %>
2<html>
3
4<head>
5 <title><bean:message key="register.title"/></title>
6</head>
7
8<body>
9 <bean:message key="register.success"/>
10</body>
11
12</html>
13
5. 创建消息资源文件registermessages.properties
1register.title = Register
2register.username = UserName
3register.password = Password
4register.email = Email
5register.submit = Submit
6register.success = RegisterSuccess!
7
6. 由于我们使用动态ActionForm,只需在Struts-config.xml中配置与register.jsp页面中form对应的ActionForm。
7. 创建配置文件Struts-config.xml
1<?xml version="1.0" encoding="iso-8859-1"?>
2<!DOCTYPE struts-config PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
4 "http://struts.apache.org/dtds/struts-config_1_3.dtd">
5<!--
6 Default configuration file for examples application.
7 Each module also has its own struts-config under: /WEB-INF/$MODULE/
8 @version $Revision: 1.9 $ $Date: 2006-02-13 18:39:49 -0700 (Mon, 13 Feb 2006) $
9-->
10<struts-config>
11 <form-beans >
12 <!—配置register.jsp中form对应的ActionFrom-->
13 <form-bean name="registerForm" type="org.apache.struts.action.DynaActionForm" >
14 <form-property name="register" type="test.register.entity.Register"/>
15 </form-bean>
16 </form-beans>
17 <!—配置对Struts Action请求的代理-->
18 <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
19 <!—配置register.jsp中form对应的Action-->
20 <action-mappings >
21 <action
22 name="registerForm"
23 path="/register"
24 scope="request"
25 type="test.register.action.RegisterAction"
26 validate="false"
27 input="register.jsp">
28 <forward name="success" path="/registerSuccess.jsp" />
29 </action>
30 </action-mappings>
31
32 <message-resources parameter="test.register.registermessages" />
33 <!—配置插件,让action能访问sping容器-->
34 <plug-in
35 className="org.springframework.web.struts.ContextLoaderPlugIn">
36 <set-property property="contextConfigLocation"
37 value="/WEB-INF/action-servlets.xml" />
38</plug-in>
39
40</struts-config>
41
8. 创建实体类Register.java
1package test.register.entity;
2
3import java.io.Serializable;
4
5publicclass Register implements Serializable{
6 privatestaticfinallongserialVersionUID = 1521645755684977819L;
7 private Long id;
8 private String username;
9 private String password;
10 private String email;
11
12 public Register(){
13
14 }
15
16 public String getEmail() {
17 returnemail;
18 }
19
20 publicvoid setEmail(String email) {
21 this.email = email;
22 }
23
24 public Long getId() {
25 returnid;
26 }
27
28 publicvoid setId(Long id) {
29 this.id = id;
30 }
31
32 public String getPassword() {
33 returnpassword;
34 }
35
36 publicvoid setPassword(String password) {
37 this.password = password;
38 }
39
40 public String getUsername() {
41 returnusername;
42 }
43
44 publicvoid setUsername(String username) {
45 this.username = username;
46 }
47
48
49
50}
51
9.创建Hibernate映射文件,Register.hbm.xml
1<?xml version="1.0"?>
2<!DOCTYPE hibernate-mapping PUBLIC
3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
5<hibernate-mapping
6 package="test.register.entity">
7
8 <class name="Register" table="REGISTER">
9
10 <id name="id">
11 <generator class="native"/>
12 </id>
13
14 <property name="username"
15 not-null="true"
16 length="15"
17 column="USERNAME"/>
18
19 <property name="password"
20 not-null="true"
21 length="15"
22 column="PASSWORD"/>
23
24 <property name="email"
25 not-null="true"
26 length="15"
27 column="EMAIL"/>
28
29 </class>
30
31</hibernate-mapping>
32
9. 创建Spring配置文件applicationContext.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
3
4<beans>
5
6 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
7<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
8 <property name="url" value="jdbc:mysql://localhost/register"/>
9 <property name="username" value="root"/>
10 <property name="password" value="root"/>
11 </bean>
12
13 <!-- Hibernate SessionFactory -->
14 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
15 <property name="dataSource" ref="dataSource"/>
16 <property name="mappingDirectoryLocations">
17 <value>classpath:test\register\entity\</value>
18 </property>
19 <property name="hibernateProperties">
20 <props>
21 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
22 <prop key="hibernate.show_sql">true</prop>
23 <prop key="hibernate.generate_statistics">true</prop>
24 </props>
25 </property>
26 </bean>
27
28 <bean id="registerDAO" class="test.register.dao.RegisterDAO">
29 <property name="sessionFactory">
30 <ref local="sessionFactory"/>
31 </property>
32 </bean>
33
34 <bean id="registerService" class="test.register.service.RegisterService">
35 <property name="registerDAO">
36 <ref local="registerDAO"/>
37 </property>
38 </bean>
39
40</beans>
41
10. 创建数据访问对象RegisterDAO.java
1package test.register.dao;
2
3import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
4
5import test.register.entity.Register;
6
7publicclass RegisterDAO extends HibernateDaoSupport{
8
9 public Register saveRegister(Register r){
10 try{
11 this.getHibernateTemplate().saveOrUpdate(r);
12 return r;
13 }catch (Exception e) {
14 e.printStackTrace();
15 returnnull;
16 }
17 }
18}
19
12.创建服务对象RegisterService.java
1package test.register.service;
2
3import test.register.dao.RegisterDAO;
4import test.register.entity.Register;
5
6publicclass RegisterService {
7 private RegisterDAO registerDAO;
8
9 publicRegisterDAO getRegisterDAO() {
10 returnregisterDAO;
11 }
12
13 publicvoid setRegisterDAO(RegisterDAO registerDAO) {
14 this.registerDAO = registerDAO;
15 }
16
17 public Register saveRegister(Register r){
18 this.getRegisterDAO().saveRegister(r);
19 return r;
20 }
21}
22
11. 创建web.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE web-app PUBLIC
3 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
4 "http://java.sun.com/dtd/web-app_2_3.dtd">
5<web-app>
6<context-param>
7 <param-name>contextConfigLocation</param-name>
8 <param-value>/WEB-INF/applicationContext.xml</param-value>
9</context-param>
10<listener>
11 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
12</listener>
13<servlet>
14 <servlet-name>action</servlet-name>
15 <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
16 <init-param>
17 <param-name>config</param-name>
18 <param-value>/WEB-INF/struts-config.xml</param-value>
19 </init-param>
20 <init-param>
21 <param-name>debug</param-name>
22 <param-value>3</param-value>
23 </init-param>
24 <init-param>
25 <param-name>detail</param-name>
26 <param-value>3</param-value>
27 </init-param>
28 <load-on-startup>0</load-on-startup>
29 </servlet>
30
31 <servlet-mapping>
32 <servlet-name>action</servlet-name>
33 <url-pattern>*.do</url-pattern>
34 </servlet-mapping>
35
36 <welcome-file-list>
37 <welcome-file>register.jsp</welcome-file>
38 </welcome-file-list>
39
40</web-app>
41
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;
publicclass RegisterAction extends Action{
private RegisterService registerService;
public RegisterService getRegisterService() {
returnregisterService;
}
publicvoid 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文件的具体内容如下:
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
3
4<beans>
5 <bean name="/register" class="test.register.action.RegisterAction">
6 <property name="registerService" ref="registerService"/>
7 </bean>
8</beans>
9
注意:这里bean是name属性,而不是id。
至此,一个完整的SSH(Struts,Spring,Hibernate)框架搭建好了。