自己做的,都是穩定版本.利用jquery的ajax發送請求到Action.Spring負責組織Action 與業務實現類.有一段時間沒搞Java EE了,開始恢復功力.
首先來看下整個項目結構:
需要導入的struts2和spring2.5的包.大致就是這些.
2. 登錄頁面是Index.jsp:
代碼
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 version="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 version="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 version="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層裡.
看一下效果圖:
和預期結果一樣,提示登錄成功.完整的過程就是這樣,代碼全貼出來了,沒有做過多解 釋,僅僅是一步一步做出來的.