AJAX 實現局部刷新,jQuery 封裝瀏覽器差異,提供統一 API。本文演示三種核心方法及 Struts2 JSON 整合。
<script src="${basePath}/js/jquery-1.8.3.min.js"></script>
<!-- basePath 定義 -->
<% String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
pageContext.setAttribute("basePath", path); %>
$(selector).load(url, data, callback) —— 最簡單<script>
$(function(){
$(":button").click(function(){
$("#time").load("${basePath}/timeServlet"); // GET,無參數
});
});
</script>
<span id="time"></span> <input type="button" value="獲取時間">
Servlet 返回純文本:
PrintWriter pw = response.getWriter();
pw.println(new SimpleDateFormat("HH:mm:ss").format(new Date()));
data 參數 → GET 請求。data → POST 請求。$.post(url, data, success, dataType) —— 表單提交首選$.post("${basePath}/userServlet",
{username: $(":text").val(), password: $(":password").val()},
function(data, status, jqXHR) {
// data: 響應文本 (純字符串)
$("img").attr("src", "${basePath}" + data);
}
);
jqXHR 關鍵屬性:status(HTTP狀態碼)、readyState、responseText、statusText。
$.ajax(options) —— 完全控制$.ajax({
type: "POST",
url: "${basePath}/user_login.action", // Struts2 action
data: $("form").serialize(), // 自動序列化表單
success: function(result) {
// result 為 JSON 對象 {src: "/images/ok.ico"}
$("img").attr("src", "${basePath}" + result.src);
}
});
struts2-json-plugin.jar<package name="user-action" namespace="/" extends="json-default">
<action name="user_login" class="top.bwcx.ajax.user.UserAction">
<result type="json" /> <!-- 自動序列化 Action 屬性為 JSON -->
</action>
</package>
public class UserAction extends ActionSupport {
private User user; // 接收表單數據 (user.username, user.password)
private String src; // 返回圖片路徑
public String execute() {
user = userDao.findByUsernameAndPassword(user.getUsername(), user.getPassword());
src = (user == null) ? "/images/icon/delete.ico" : "/images/icon/ok.ico";
return SUCCESS;
}
// getter/setter 必須齊全:getUser/setUser, getSrc
}
user.username 對應 setUser(User),Struts2 OGNL 自動注入。getSrc() 返回值自動序列化為 JSON {"src":"/images/..."}。| 維度 | Servlet | Struts2 + JSON Plugin |
|---|---|---|
| 參數接收 | request.getParameter() 手動 | OGNL 自動注入對象屬性 |
| 返回數據 | PrintWriter 手寫字符串/JSON | 屬性自動序列化為 JSON |
| 類型轉換 | 手動 parseInt/parseDate | 內置類型轉換器 |
| 驗證 | 手寫 | Validation 框架 / 註解 |
| 攔截器 | Filter 手工 | 聲明式攔截器棧 |