action處理Ajax請求

action有3種方式處理Ajax請求:

(1)跟servletAPI耦合的方式:藉助response流獲取out來完成;

(2)藉助Stream結果類型,跟servlet API解耦合方式;

   1-給result指定type=stream
     <result type="stream">
                <param name="contentType">test/html;charset=utf-8</param>
                <param name="inputName">is</param>
            </result>

2-action中:is = new ByteArrayInputStream(str.getBytes("utf-8"));

(3)struts內置的json插件;

     1-.導入:struts2-json-plugin-2.3.20.jar
     2-後臺:直接給action定義屬性,然後給屬性賦值即可
     public String testjson(){
        this.p = new Person();
        p.setId(2);
        p.setName("zhangsan");
        return SUCCESS;
    }
     3-配置:
       1-package----繼承json-default包
       2-action---result---type:json
          1-result中不需要寫相應的資源url

具體實例:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'testajax.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  <script type="text/javascript" src="jquery-1.9.1.js"></script>
  <script type="text/javascript">
  $(function(){
  	$("#b1").click(function(){
  		$.post('testajax','',function(data){
  			alert(data);
  		},'text');
  	});
  	$("#b2").click(function(){
  		$.post('testajax1','',function(data){
  			alert(data.name);
  		},'json');
  	});
  	$("#b3").click(function(){
  		$.post('json/testajax3','',function(data){
  			alert(data.name);
  			alert("p.id="+data.p.id+",p.name"+data.p.name);
  		},'json');
  	});
  });
  </script>
  </head>
  
  <body>
    <button id="b1">耦合servletapi</button><br>
    <button id="b2">stream結果類型</button><br>
    <button id="b3">struts2內置json</button><br>
  </body>
</html>
Struts.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="default" namespace="/" extends="struts-default">
    	
    	<interceptors>
    		<interceptor name="myInter" class="com.interceptors.MyInter"/>
    		<interceptor-stack name="abc">
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="tokenSession"></interceptor-ref>
    			<interceptor-ref name="myInter"></interceptor-ref>
    		</interceptor-stack>
    	<action name="testajax" 
    			class="com.handler.AjaxAction" 
    			method="testajax">
    	</action>
    	
    	<action name="testajax1" class="com.handler.AjaxAction" method="testajax1">
    		<result type="stream">
    			<param name="contentType">test/html;charset=utf-8</param>
    			<param name="inputName">inputStream</param>
    		</result>
    	</action>
    </package>
     <package name="json" namespace="/json" extends="json-default">
     	<action name="testajax3" class="com.handler.AjaxAction" method="testjson">
     		<result type="json"></result>
     	</action>
     </package>
</struts>
action域:

package com.handler;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.bean.Person;
import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;

public class AjaxAction extends ActionSupport {

	
	public String testajax()throws Exception{
		
		HttpServletResponse response = ServletActionContext.getResponse();
		PrintWriter out = response.getWriter();
		out.print("hello");
		out.flush();
		out.close();
		return NONE;
	}
	
	private InputStream inputStream;
	public InputStream getInputStream() {
		return inputStream;
	}
	public String testajax1()throws Exception{
		Person p = new Person();
		p.setId(1);
		p.setName("李四");
		Gson g = new Gson();
		String str = g.toJson(p);
		inputStream = new ByteArrayInputStream(str.getBytes("utf-8"));
		return SUCCESS;
	}
	
	private Person p;
	public Person getP() {
		return p;
	}
	public void setP(Person p) {
		this.p = p;
	}
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String testjson(){
		this.p = new Person();
		p.setId(2);
		p.setName("zhangsan");
		this.name = "abc";
		return SUCCESS;
	}
}
運行結果:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章