Struts,Spring,Hibernate Web應(yīng)用開發(fā)1
Posted on 2008-01-02 09:43 笑看人生 閱讀(1941) 評(píng)論(0) 編輯 收藏 所屬分類: Web開發(fā)技術(shù)這個(gè)Web應(yīng)用很簡(jiǎn)單,就是實(shí)現(xiàn)一個(gè)用戶注冊(cè)頁(yè)面,當(dāng)用戶在register.jsp頁(yè)面輸入注冊(cè)信息,點(diǎn)保存,如果成功,進(jìn)入registerSuccess.jsp頁(yè)面。這個(gè)應(yīng)用雖然很小,但它也有三層組成,表示層由Struts框架負(fù)責(zé),業(yè)務(wù)層由Spring框架負(fù)責(zé),持久層由Hibernate框架負(fù)責(zé)。
開發(fā)環(huán)境:MyEclipse 5+ MySQL4 + Struts1.3.5 + Spring2.0.1 + Hibernate3.2.1 + Tomcat5.0.19 + jdk1.4.2_06.
1. 首先,我們?cè)贛yEclipse中新建一個(gè)Web Project ,login;
2.然后把Struts,Spring,Hibernate框架所需要的jar包以及MySQL的驅(qū)動(dòng)拷貝到WEB-INF\lib下;
3.創(chuàng)建用戶注冊(cè)頁(yè)面register.jsp
4.創(chuàng)建注冊(cè)成功后顯示的頁(yè)面registerSuccess.jsp
5. 創(chuàng)建消息資源文件registermessages.properties
6. 由于我們使用動(dòng)態(tài)ActionForm,只需在Struts-config.xml中配置與register.jsp頁(yè)面中form對(duì)應(yīng)的ActionForm。
7. 創(chuàng)建配置文件Struts-config.xml
8. 創(chuàng)建實(shí)體類Register.java
9.創(chuàng)建Hibernate映射文件,Register.hbm.xml
9. 創(chuàng)建Spring配置文件applicationContext.xml
10. 創(chuàng)建數(shù)據(jù)訪問對(duì)象RegisterDAO.java
12.創(chuàng)建服務(wù)對(duì)象RegisterService.java
11. 創(chuàng)建web.xml
14.創(chuàng)建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對(duì)象,我們要對(duì)struts-config.xml作下修改,具體修改如下:
在struts-config.xml增加controller元素
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
目的告訴Struts自動(dòng)將對(duì)Action的請(qǐng)求委托給Spring上下文中的Struts Action來處理。
并且為了讓Struts能訪問Spring容器,還必須在struts-config.xml注冊(cè)一個(gè)能訪問Spring上下文的插件:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/action-servlets.xml" />
</plug-in>
action-servlets.xml文件的具體內(nèi)容如下:
注意:這里bean是name屬性,而不是id。
至此,一個(gè)完整的SSH(Struts,Spring,Hibernate)框架搭建好了。
開發(fā)環(huán)境:MyEclipse 5+ MySQL4 + Struts1.3.5 + Spring2.0.1 + Hibernate3.2.1 + Tomcat5.0.19 + jdk1.4.2_06.
1. 首先,我們?cè)贛yEclipse中新建一個(gè)Web Project ,login;
2.然后把Struts,Spring,Hibernate框架所需要的jar包以及MySQL的驅(qū)動(dòng)拷貝到WEB-INF\lib下;
3.創(chuàng)建用戶注冊(cè)頁(yè)面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>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

4.創(chuàng)建注冊(cè)成功后顯示的頁(yè)面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

2

3

4

5

6

7

8

9

10

11

12

13

5. 創(chuàng)建消息資源文件registermessages.properties
1
register.title = Register
2
register.username = UserName
3
register.password = Password
4
register.email = Email
5
register.submit = Submit
6
register.success = RegisterSuccess!
7

2

3

4

5

6

7

6. 由于我們使用動(dòng)態(tài)ActionForm,只需在Struts-config.xml中配置與register.jsp頁(yè)面中form對(duì)應(yīng)的ActionForm。
7. 創(chuàng)建配置文件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對(duì)應(yīng)的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
<!—配置對(duì)Struts Action請(qǐng)求的代理-->
18
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
19
<!—配置register.jsp中form對(duì)應(yīng)的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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

8. 創(chuàng)建實(shí)體類Register.java
1
package test.register.entity;
2
3
import java.io.Serializable;
4
5
publicclass 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

9.創(chuàng)建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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

9. 創(chuàng)建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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

10. 創(chuàng)建數(shù)據(jù)訪問對(duì)象RegisterDAO.java
1
package test.register.dao;
2
3
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
4
5
import test.register.entity.Register;
6
7
publicclass 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

12.創(chuàng)建服務(wù)對(duì)象RegisterService.java
1
package test.register.service;
2
3
import test.register.dao.RegisterDAO;
4
import test.register.entity.Register;
5
6
publicclass 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

11. 創(chuàng)建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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

14.創(chuàng)建RegisterAction.java




































在RegisterAction.java中,為了獲取spring容器中的RegisterService對(duì)象,我們要對(duì)struts-config.xml作下修改,具體修改如下:
在struts-config.xml增加controller元素

目的告訴Struts自動(dòng)將對(duì)Action的請(qǐng)求委托給Spring上下文中的Struts Action來處理。
并且為了讓Struts能訪問Spring容器,還必須在struts-config.xml注冊(cè)一個(gè)能訪問Spring上下文的插件:





action-servlets.xml文件的具體內(nèi)容如下:
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

2

3

4

5

6

7

8

9

注意:這里bean是name屬性,而不是id。
至此,一個(gè)完整的SSH(Struts,Spring,Hibernate)框架搭建好了。