刚学Struts2,在整合Spring的时候遇到了不少麻烦,想在网上找简单的例子却老是找不到,经过一番折腾,终于完成了如下简单得不得了的小例子。
开发环境是:Windows Server 2008 + jdk6.0 + myeclipse6.5 blue + struts-2.0.11 + Spring2.0 + Tomcat6.0
新建一个web Porject,名称为Struts2Spring, J2EE Specification level(J2EE版本) 选择 JAVA EE 5.0, 然后为该项目加入Sturts2的支持,
右键项目 -> Bilud Path -> ConfigBiludPath -> Libraries -> Add External JARs然后添加struts2的类包.
这里注意的是必须加入了Struts2-spring-plugin-2.0.11.jar。
紧接着,再添加对spring的支持,
右键项目 -> MyEclipse-> AddSpringCapabilities .
这里需要特别注意的是,在选择Spring类包的时候,必须勾上Spring 2.0 Web Libraries,否则在启动Tomcat服
务器的时候就回报错,好像是Spring的监听器什么什么的,然后直接点击 Finish 完成对Spring支持的添加
接着编写LoginService.java这个接口,具体代码如下:
1 |
<font face= "Verdana" > package org.lmxzz.struts2.service; |
2 |
3 |
public interface LoginService |
4 |
{ |
5 |
public boolean doLogin(String userName, String password) ; |
6 |
} |
7 |
8 |
</font> |
再编写实现类LoginServiceImpl,具体代码如下:
01 |
<font face= "Verdana" > package org.lmxzz.struts2.service.impl; |
02 |
03 |
import org.lmxzz.struts2.service.LoginService; |
04 |
05 |
public class LoginServiceImpl implements LoginService |
06 |
{ |
07 |
public boolean doLogin(String userName, String password) |
08 |
{ |
09 |
boolean flag = false ; |
10 |
|
11 |
if ( "LmxZz" .equals(userName) && "3348635" .equals(password)) |
12 |
flag = true ; |
13 |
|
14 |
return flag ; |
15 |
} |
16 |
} |
17 |
18 |
</font> |
接着是LoginAction.java 的具体代码:
01 |
<font face= "Verdana" > package org.lmxzz.struts2.action; |
02 |
03 |
import org.lmxzz.struts2.service.LoginService; |
04 |
05 |
import com.opensymphony.xwork2.ActionSupport; |
06 |
07 |
public class LoginAction extends ActionSupport |
08 |
{ |
09 |
private String userName ; |
10 |
private String password ; |
11 |
private LoginService loginService ; |
12 |
|
13 |
public String getUserName() |
14 |
{ |
15 |
return userName; |
16 |
} |
17 |
18 |
public void setUserName(String userName) |
19 |
{ |
20 |
this .userName = userName; |
21 |
} |
22 |
23 |
public String getPassword() |
24 |
{ |
25 |
return password; |
26 |
} |
27 |
28 |
public void setPassword(String password) |
29 |
{ |
30 |
this .password = password; |
31 |
} |
32 |
|
33 |
public void setLoginService(LoginService loginService) |
34 |
{ |
35 |
this .loginService = loginService; |
36 |
} |
37 |
|
38 |
@Override |
39 |
public String execute() throws Exception |
40 |
{ |
41 |
if (loginService.doLogin(userName, password)) |
42 |
return SUCCESS ; |
43 |
else |
44 |
return INPUT ; |
45 |
} |
46 |
} |
47 |
48 |
</font> |
接着,修改index.jsp文件,修改后代码如下:
01 |
< font face = "Verdana" ><%@ page language="java" pageEncoding="UTF-8"%> |
02 |
<%@ taglib prefix="s" uri="/struts-tags" %> |
03 |
< html > |
04 |
< head > |
05 |
< title >ndex.jsp</ title > |
06 |
</ head > |
07 |
|
08 |
< body > |
09 |
< s:form action = "login" > |
10 |
< s:textfield name = "userName" label = "userName" /> |
11 |
< s:textfield name = "password" label = "password" /> |
12 |
< s:submit /> |
13 |
</ s:form > |
14 |
</ body > |
15 |
</ html > |
16 |
17 |
18 |
19 |
</ font > |
这里需要注意的是<s:form action="login"> 中的 login,具体要注意什么在struts.xml里再进行说明
下面是重要的struts.xml 和 applicationContext.xml 配置文件,具体代码分别如下:
01 |
< font face = "Verdana" ><? xml version = "1.0" encoding = "UTF-8" ?> |
02 |
<!DOCTYPE struts PUBLIC |
03 |
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" |
04 |
"http://struts.apache.org/dtds/struts-2.0.dtd "> |
05 |
< struts > |
06 |
< constant name = "struts.objectFactory" value = "spring" /> |
07 |
< package name = "struts2" extends = "struts-default" > |
08 |
< action name = "login" class = "loginAction" > |
09 |
< result >success.jsp</ result > |
10 |
< result name = "input" >index.jsp</ result > |
11 |
</ action > |
12 |
</ package > |
13 |
</ struts > |
14 |
15 |
</ font > |
下面的是applicationContext.xml :
01 |
< font face = "Verdana" ><? xml version = "1.0" encoding = "UTF-8" ?> |
02 |
< beans |
03 |
xmlns = "http://www.springframework.org/schema/beans " |
04 |
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance " |
05 |
xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd " > |
06 |
07 |
< bean id = "loginService" class = "org.lmxzz.struts2.service.impl.LoginServiceImpl" /> |
08 |
|
09 |
< bean id = "loginAction " class = "org.lmxzz.struts2.action.LoginAction" scope = "prototype" > |
10 |
< property name = "loginService" > |
11 |
< ref bean = "loginService" /> |
12 |
</ property > |
13 |
</ bean > |
14 |
</ beans > |
15 |
16 |
</ font > |
首先,<action name="login" class="loginAction"> 中的 name="login",
这个login必须与index.jsp中的action="login"保持一致
class="loginAction"这里的loginAction不再是以前的真正的类的映射,如class="org.lmxzz.struts2.action.LoginAction"
因为要交给spring管理,所以这里的loginAction 必须 要与 applicationContext.xml 中的
<bean id="loginAction" class="org.lmxzz.struts2.action.LoginAction" scope="prototype">
的 id="loginAction" 保持一致,这里的class="org.lmxzz.struts2.action.LoginAction"就是真正的类的映射,
这样写,就表明了struts.xml中的loginAction 已交给 spring来进行管理。
scope="prototype" 这里和以前的struts1.x整合spring的时候不一样,因为strust1.x对action的管理是单例模式。
完成了上面的工作以后,只是相当于完成了整个项目的一半,而最为重要的 web.xml 的代码如下:
01 |
< font face = "Verdana" ><? xml version = "1.0" encoding = "UTF-8" ?> |
02 |
< web-app version = "2.5" |
03 |
xmlns = "http://java.sun.com/xml/ns/javaee " |
04 |
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance " |
05 |
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee |
06 |
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "> |
07 |
|
08 |
< listener > |
09 |
< listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class > |
10 |
</ listener > |
11 |
< filter > |
12 |
< filter-name >struts2</ filter-name > |
13 |
< filter-class >org.apache.struts2.dispatcher.FilterDispatcher</ filter-class > |
14 |
</ filter > |
15 |
< filter-mapping > |
16 |
< filter-name >struts2</ filter-name > |
17 |
< url-pattern >/*</ url-pattern > |
18 |
</ filter-mapping > |
19 |
< welcome-file-list > |
20 |
< welcome-file >index.jsp</ welcome-file > |
21 |
</ welcome-file-list > |
22 |
</ web-app > |
23 |
24 |
</ font > |
这里最需要注意的是:
<context-param> <param-name>ContextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> |
|
|
它为服务器添加了一个监听器,这样也使的struts2 与 spring 结合起来。如果没有这句话,服务器是启动不了的。
剩下的就是一个success.jsp页面,这里就不再详说这个页面了。
完成了以后,启动服务器,如没有意外的话,系统会报错,说找不到 applicationContext.xml 配置文件,这个
时候我们停止服务器,把 applicationContext.xml 移动到 WebRoot中的WEB-INF目录下,重新启动服务器,
进入页面后输入用户名:LmxZz,密码:3348635 系统就会转到 success.jsp页面去了.
原址:http://dev.firnow.com/course/3_program/java/javajs/200866/122777.html