用Spring的DelegatingRequestProcessor类来代替struts中的RequestProcessor类,从而把struts中的action与Spring分离。并把struts的动作置于Spring框架的控制下。
1。新建一个登陆页面:loginDelegatingRequestProcessor.jsp
<%@
page
contentType
=
"text/html;charset=GBK"
isELIgnored
=
"false"
%>
<
html
>
<
head
><
title
>
实现用户登录的
Struts
实例
</
title
></
head
>
<
body
>
<
font
size
=
’22’
>
${msg}
<
br
>
</
font
>
<
form
name
=
"form1"
action
=
"/myLogin2/loginDelegatingRequestProcessor.do"
method
=
"post"
>
用户名:
<
input
type
=
"text"
name
=
"username"
value
=
"${user.username}"/><br>
密码:
<
input
type
=
"password"
name
=
"password"
value
=
"${user.password}"/><br>
<
input
type
=
"submit"
name
=
”method”
value
=
"
提交
"
/>
</
form
>
</
body
>
</
html
>
2。
创建一个存储登陆用户信息的类:
User.java
该类继承于
ActionForm
,代码如下:
package
com.zhaosoft.bean;
import
org.apache.struts.action.ActionForm;
public
class
User
extends
ActionForm {
private
String
username
=
null
;
private
String
password
=
null
;
public
String getUsername() {
return
username
;
}
public
void
setUsername(String username) {
this
.
username
= username;
}
public
String getPassword() {
return
password
;
}
public
void
setPassword(String password) {
this
.
password
= password;
}
}
3
。
在
Com.zhaosoft.action
中新建一个
LoginDelegationRequestProcessor
.java
,该类继承于
struts
的
Action
,代码示例如下:
package com.zhaosoft.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 com.zhaosoft.bean.User;
import com.zhaosoft.domain.Login;
public class LoginDelegationRequestProcessor extends Action {
private Login login;
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String forwardJsp = "login";
getLogin().login((User) form);
request.setAttribute("msg", login.getMsg());
request.setAttribute("user", (User) form);
return mapping.findForward("login");
}
}
4。
新建包:
com.zhaosoft.domain
和
com.zhaosoft.domain.impl
在包
com.zhaosoft.domain
中新建一个接口:
Login.java
用来定义登陆的逻辑处理,示例代码如下:
package
com.zhaosoft.domain;
import
com.zhaosoft.bean.User;
public
interface
Login {
public
abstract
void
login(User user);
public
abstract
String getMsg();
}
5
.
在包
com.zhaosoft.domain.impl
中建立
LoginImpl.java
用来实现登陆的逻辑处理
package
com.zhaosoft.domain.impl;
import
com.zhaosoft.bean.User;
import
com.zhaosoft.domain.Login;
public
class
LoginImpl
implements
Login {
private
String
msg
;
public
String getMsg() {
return
this
.
msg
;
}
public
void
login(User user) {
String username = user.getUsername();
String password = user.getPassword();
if
(username ==
null
&& password ==
null
) {
msg
=
"
请输入用户名和密码
"
;
}
else
if
(
""
.equals(username) ||
""
.equals(password)) {
msg
=
"
请输入用户名和密码
"
;
}
else
if
(
"zhaosoft"
.equals(username) &&
"zhaosoft"
.equals(password)) {
msg
=
"
登陆成功
"
;
}
else
if
(!
"zhaosoft"
.equals(username)) {
msg
=
"
用户名填写错误
"
;
}
}
}
6.
修改
struts
的配置文件
struts-config.xml
,注册
ContextLoaderPlugIn
插件,实例代码如下:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts-config
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"
>
<
struts-config
>
<!--
定义
formbean-->
<
form-beans
>
<
form-bean
name
=
"user"
type
=
"com.zhaosoft.bean.User"
></
form-bean
>
</
form-beans
>
<
action-mappings
>
<
action
path
=
"/loginDelegatingRequestProcessor"
type
=
"com.zhaosoft.action.LoginDelegationRequestProcessor"
name
=
"user"
>
<
forward
name
=
"login"
path
=
"/jsp/loginDelegatingRequestProcessor.jsp"
>
</
forward
>
</
action
>
<
action
path
=
"/loginDelegatingRequestProcessorTemp"
type
=
"org.apache.struts.actions.ForwardAction"
parameter
=
"/jsp/loginDelegatingRequestProcessor.jsp"
>
</
action
>
</
action-mappings
>
<
controller
processorClass
=
"org.springframework.web.struts.DelegatingRequestProcessor"
>
</
controller
>
<
plug-in
className
=
"org.springframework.web.struts.ContextLoaderPlugIn"
>
<
set-property
property
=
"contextConfigLocation"
value
=
"/WEB-INF/spring-config.xml"
/>
</
plug-in
>
</
struts-config
>
7. 编写Spring的配置文件spring-config.xml。放在WEB-INF目录中,代码如下:
<?
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
=
"login"
class
=
"com.zhaosoft.domain.impl.LoginImpl"
>
</
bean
>
<
bean
name
=
"/loginDelegatingRequestProcessor"
class
=
"com.zhaosoft.action.LoginDelegationRequestProcessor"
>
<
property
name
=
"login"
>
<
ref
bean
=
"login"
/>
</
property
>
</
bean
>
</
beans
>