標籤:form 使用 equals 服務 優秀 二進位 技術 www 定向
前言:Struts2作為一款優秀的MVC架構,和Ajax結合在一起,使用者就會有良好的體驗,本篇博文我們來類比一個簡單的登入操作,實現Ajax的非同步請求,其中Struts2進行的是連結處理,Action動態處理請求,Ajax負責進行非同步處理,傳送資料與返回資料,其中主要使用的技術有:struts2+Ajax+Jquery+Css,好吧,廢話不多說,讓我們來看看這個執行個體吧。
第一步:建立一個Dynamic web project,然後起名:Struts2Ajax,引入相關的jar包,在web.xml檔案中配置struts2的filter.我們都知道新的請求首先進入的.xml檔案,所以配置上過濾器,這樣請求就會自動進入交給struts2處理了。
<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>Struts2Ajax</display-name><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
第二步:我們來配置Struts2的設定檔,其中主要是配置Action,也就是請求過來交給誰進行處理,注意這裡的result Type="stream"是io中流的方式,它輸出的是位元據,我們的contentType是html檔案,它最終會返回頁面以html的形式出現在頁面下角
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="StrutsAjax" extends="struts-default"><action name="login" class="com.wyq.Action.LogAction"><result type="stream" name="success"><param name="cotentType">text/html</param><param name="inputName">result</param></result></action></package></struts>
第三步:我們建立一個包,起名com.wyq.Action,主要是來存放請求的Action。建立類,LoginACtion,代碼如下:
package com.wyq.Action;import java.io.ByteArrayInputStream;import java.io.InputStream;import com.opensymphony.xwork2.Action;public class LogAction implements Action{private String user;private String pass;private InputStream inputStream;public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public InputStream getResult() {return inputStream;}@Overridepublic String execute() throws Exception {String sus="恭喜你,登入成功!";String fail="對不起,使用者名稱和密碼不匹配";inputStream=user.equals("wangyongqiang")&&pass.equals("123")?new ByteArrayInputStream(sus.getBytes("UTF-8")):new ByteArrayInputStream(fail.getBytes("UTF-8"));return SUCCESS;}}
第四步:我們來編寫請求的頁面,loginForm.jsp,其中要引入Jquery架構,使用到css,這裡為了方便起見,我採用的方式是引入一個互連網中的jquery資源,然後藉助於Jquery的Ajax,實現非同步請求
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>使用stream結果實現Ajax</title><script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js" type="text/javascript"></script></head><body><s:form id="loginForm"><s:textfield name="user" label="使用者名稱"/><s:textfield name="pass" label="密碼"/><tr><td colspan="2"><input id="loginBn" type="button" value="提交"/></td></tr></s:form><div id="show" style="display:none;"></div><script type="text/javascript">// 為id為loginBn的按鈕綁定事件處理函數$("#loginBn").click(function(){$("#show").hide();// 指定向login發送請求,以id為loginForm表單裡各表單控制項作為請求參數$.get("login" , $("#loginForm").serializeArray() , // 指定回呼函數function(data , statusText){$("#show").height(30).width(400).css("border" , "1px solid black").css("border-radius" , "10px").css("background-color" , "#efef99").css("color" , "#ff0000").css("padding" , "20px").empty();$("#show").append("登入結果:" + data + "<br />");$("#show").show(2000);},// 指定伺服器響應為html"html");});</script></body></html>
第五步:編譯,然後放在weblogic中部署,接下來就可以運行了。在瀏覽器視窗,輸入:http://localhost:7001/Struts2Ajax/loginForm.jsp,我們就可以看到一個登陸框。
然後,按照我們的寫法,先來輸入一個錯誤的使用者名稱和密碼,我們看看會發生什麼情況。
再按照Action中設定的帳號和密碼,我們來看看會返回什麼結果;
總結:這就是一個完整的Struts2和Ajax結合的執行個體,雖然很簡單,但是也可以學到很多知識,比如Struts2支援的傳回型別為Stream,這是一種流的方式,就可以進行資料輸出,從而結合與jquery,就可以實現非同步請求,以下是基本原理圖:
Struts2結合Ajax實現登入