自己做的,都是稳定版本.利用jquery的ajax发送请求到Action.Spring负责组织Action与业务实现类.有一段时间没搞Java EE了,开始恢复功力.
- 首先来看下整个项目结构:需要导入的struts2和spring2.5的包.大致就是这些.
- 登录页面是Index.jsp: 代码
1.
1
<
table
class
="wwFormTable"
>
2
<
tr
>
3
<
td
class
="tdLabel"
>
4
<
label
for
="Login_username"
class
="label"
>
5
用户名:
6
</
label
>
7
</
td
>
8
<
td
>
9
<
input
type
="text"
name
="username"
value
=""
id
="Login_username"
/>
10
</
td
>
11
</
tr
>
12
<
tr
>
13
<
td
class
="tdLabel"
>
14
<
label
for
="Login_password"
class
="label"
>
15
密码:
16
</
label
>
17
</
td
>
18
<
td
>
19
<
input
type
="password"
name
="password"
id
="Login_password"
/>
20
</
td
>
21
</
tr
>
22
<
tr
>
23
<
td
colspan
="2"
>
24
<
div
align
="right"
>
25
<
input
type
="button"
id
="login"
value
="登录"
/>
26
</
div
>
27
</
td
>
28
</
tr
>
29
</
table
>本来用的是struts2标签,为了看清楚标签生成的是什么样的html,俺就把生成后的html拷过来直接用了.免得影响我用jquery读取表单元素.
接下来就需要jquery来发送ajax请求到我的LoginAction:
代码
1
<
script type
=
"
text/javascript
"
>
2
$(document).ready(
3
function
() {
4
$(
"
#login
"
).click(
5
function
() {
6
$.ajax( {
7
url :
"
Login.action
"
,
8
data :
"
username=
"
9
+
$(
"
input[name='username']
"
).val()
10
+
"
&password=
"
11
+
$(
"
input[name='password']
"
).val(),
12
success :
function
(msg) {
13
$(
"
#message
"
).html(msg);
14
}
15
});
16
});
17
});
18
<
/
script>
#message是一个层,用来显示成功返回的内容.
3.实体类,UserInfo类,用来保存登录表单数据:
代码
1 package com.mag.beans;
2
/**
3 * 用户实体类
4 *
5 *
@author
Mr.King
6 *
7
*/
8
public
class
UserInfo {
9
10
public
UserInfo(){
11 }
12
13
private
String username;
14
private
String password;
15
16
public
String getUsername() {
17
return
username;
18 }
19
20
public
void
setUsername(String username) {
21
this
.username
=
username;
22 }
23
24
public
String getPassword() {
25
return
password;
26 }
27
28
public
void
setPassword(String password) {
29
this
.password
=
password;
30 }
31 }
4.UserInfoManager业务处理类,没有实现什么接口,仅做简单演示.
代码
1 package com.mag.util;
2
3 public
class
UserInfoManager {
4
5 public
boolean
checkUser(String name, String pass) {
6
7 return
name.trim().equalsIgnoreCase(
"
admin
"
)
&&
pass.equals(
"
admin
"
)
?
true
8 : false
;
9 }
10 }
没有与数据库交互,直接判断了一下字符串.呵呵 .留作Hibernate来完成吧.
5.接下来当然要看下web.xml是怎么配置struts和spring的:
代码
1 <? xml versinotallow="1.0" encoding="UTF-8" ?>
2 < web-app
version
="2.5"
xmlns
="http://java.sun.com/xml/ns/javaee"
3 xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
5 <!-- 配置struts2拦截器
-->
6 < filter
>
7 < filter-name
>
struts2
</
filter-name
>
8 < filter-class
>
org.apache.struts2.dispatcher.FilterDispatcher
</
filter-class
>
9 </ filter
>
10 < filter-mapping
>
11 < filter-name
>
struts2
</
filter-name
>
12 < url-pattern
>
/*
</
url-pattern
>
13 </ filter-mapping
>
14 <!-- 配置默认首页
-->
15 < welcome-file-list
>
16 < welcome-file
>
index.jsp
</
welcome-file
>
17 </ welcome-file-list
>
18 < login-config
>
19 < auth-method
>
BASIC
</
auth-method
>
20 </ login-config
>
21 <!-- 配置spring监听
-->
22 < listener
>
23 < listener-class
>
org.springframework.web.context.ContextLoaderListener
</
listener-class
>
24 </ listener
>
25 < context-param
>
26 < param-name
>
contextConfigLocation
</
param-name
>
27 < param-value
>
classpath:applicationContext.xml
</
param-value
>
28 </ context-param
>
29 </ web-app
>
tomcat根据web.xml的配置.来监听struts与spring.
6.接下来是struts.xml.需要对Action进行配置.
代码
1 <? xml versinotallow="1.0" encoding="UTF-8" ?>
2 <! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd" >
3 < struts >
4 < include file
="struts-default.xml"
></
include
>
5 < package name
="default"
extends
="struts-default"
>
6 <!-- Action在applicationContext.xml里进行配置 -->
7 < action name
="Login"
class
="userlogin"
>
8 < result name
="success"
>
/welcome.jsp
</
result
>
9 < result name
="error"
>
/error.jsp
</
result
>
10 </ action >
11 </ package >
12 </ struts >
这里因为与Spring结合了,当然代码组织就需要靠spring来完成了.所以这里的class只指定了一个名称.会在spring配置文件里的bean id里见到.那里会指定登录处理的Action.
7.Spring配置文件applicationContext.xml:
代码
1 <? xml versinotallow="1.0" encoding="UTF-8" ?>
2 < beans default-autowire ="byName"
3 xmlns ="http://www.springframework.org/schema/beans" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:p ="http://www.springframework.org/schema/p"
5 xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" >
6 <!-- 配置业务处理类 -->
7 < bean id ="userUtil"
class
="com.mag.util.UserInfoManager"
></
bean
>
8 <!-- 配置Action,织入业务类 -->
9 < bean id ="userlogin"
class
="com.mag.str2.LoginAction"
>
10 < property name ="userInfoManager"
ref
="userUtil"
></
property
>
11 </ bean >
12 </ beans >
这里将业务类与Action组织在一起了,所谓的注入吧.
8.最后就来看下我们的Action了:
代码
1 package com.mag.str2;
2
3 import com.mag.beans.UserInfo;
4 import com.mag.util.UserInfoManager;
5 import com.opensymphony.xwork2.Action;
6 import com.opensymphony.xwork2.ActionContext;
7 import com.opensymphony.xwork2.ModelDriven;
8
9 public class LoginAction implements
Action, ModelDriven
<
UserInfo
>
{
10
11 private UserInfo userInfo = new
UserInfo();
12
13 public UserInfo getModel() {
14 return userInfo;
15 }
16
17 private UserInfoManager userInfoManager = null
;
18
19 public void setUserInfoManager(UserInfoManager userInfoManager) {
20 this .userInfoManager = userInfoManager;
21 }
22
23 public UserInfoManager getUserInfoManager() {
24 return userInfoManager;
25 }
26
27 public String execute() throws Exception {
28
29 if (userInfoManager.checkUser(userInfo.getUsername(), userInfo
30 .getPassword())) {
31 // 将用户名存入session
32 ActionContext.getContext().getSession().put( " user " ,
33 userInfo.getUsername());
34 return SUCCESS;
35 } else {
36 return ERROR;
37 }
38 }
39 }
40
这里实现了两个接口,Action主要用到了它的常量SUCCESS,ERROR.ModelDriven用于处理接收的表单元素与实体类的对应.这里有三种方法,我选择了这种,感觉最为方便.呵呵.execute()方法是必须的.感觉struts2的确不错.简化了很多.UserInfoManager就是我们的业务处理类,userInfoManager对象已经在spring配置文件里配置好了.对象的实例化就交给我们的框架来完成了.
根据返回的结果,在struts.xml配置的resutl就可以帮你进行跳转了.
9.welcome.jsp和error.jsp很简单,只返回两串文本.
welcome.jsp:
<% @ page language = " java " import =
"
java.util.*
"
pageEncoding
=
"
UTF-8
"
%>
欢迎,${sessionScope.user}.您已经登录!
error.jsp:
1 <% @ page language = " java " import
=
"
java.util.*
"
pageEncoding
=
"
UTF-8
"
%>
2
3 < font color ="red" >
用户名或密码错误!
</
font
>
返回的结果jquery会处理,并显示在message层里.
看一下效果图:

和预期结果一样,提示登录成功.完整的过程就是这样,代码全贴出来了,没有做过多解释,仅仅是一步一步做出来的.可能写的不是很周到,也有可能有出入,欢迎指正.
















