• Struts2中 ajax交互


    <span style="font-size:18px;"><strong>Struts.xml</strong>配置文件
    
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    	<include file="struts-default.xml"></include>
    	
    	
    	
    	<package name="ajax" extends="struts-default">
    		<action name="ajax_*" class="com.test.action.AjaxAction" method="{1}">
    			<result name="SUCCESS">/ajax.jsp</result>
    			<result type="stream">
    				<param name="inputName">inputStream</param>
    			</result>
    		</action>
    	</package>
    	
    </struts></span>


    AjaxAction

    package com.test.action;
    
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.StringBufferInputStream;
    import java.io.StringReader;
    import java.io.UnsupportedEncodingException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class AjaxAction extends ActionSupport {
    
    	private InputStream inputStream;
    
    	public InputStream getInputStream() {
    		return inputStream;
    	}
    
    	public String execute() throws Exception {
    		return SUCCESS;
    	}
    
    	public String checkUser() throws Exception {
    		HttpServletRequest request = ServletActionContext.getRequest();
    		// 获取 ajax 传递的 name 参数值
    		Object name = request.getParameter("name");
    		Object password = request.getParameter("password");
    		System.out.println("name=>" + name);
    		// 返回 StringBufferInputStream 对象,新的 jdk 里面已经不推荐使用,但推荐使用的 StringReader
    		// 并不是 InputStream 接口的实现类,这个比较蛋疼,可以使用下面 test 里面其他的实现类来传递
    		inputStream = new StringBufferInputStream(transcoding("哈哈,"+name +password));
    		return SUCCESS;
    	}
    	
    	public String test() throws Exception {
    		// 返回 ByteArrayInputStream 对象至前台,注意跟上面的编码上的区别
    		inputStream = new ByteArrayInputStream("乱码测试".getBytes("utf-8"));
    		return SUCCESS;
    	}
    	
    	private String transcoding(String str) {
    		try {
    			return new String(str.getBytes("utf-8"), "iso-8859-1");
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
    		return str;
    	}
    }
    


    ajax.jsp

    <span style="font-size:18px;"><%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>ajax</title>
    </head>
    <body>
    	<form>
    		用户名:<input type="text" id="nameId"/><br/>
    		密码:<input type="text" id="passwordId"/><br/>
    		<span id="nameId2"><span></span></span><br/>
    		<span id="msgId"></span><br/>
    		<input type="button" onclick="checkUserName()" value="提交"/>
    	</form>
    </body>
    </html>
    
    <script type="text/javascript">
    var xhr ;
    
    // 初始化 xhr 对象
    // return value : 1 : IE , 2 , Mozila , 0 : create xhr error ;
    function createXHR(){
    	// 1,创建xhr 对象 .
    	if( window.ActiveXObject ){
    		xhr = new ActiveXObject( "Microsoft.XMLHTTP" ) ;
    		return 1 ;
    	}else if( window.XMLHttpRequest ){
    		xhr = new XMLHttpRequest();
    		return 2 ;	
    	}else{
    		return 0 ;
    	}	   
    }   
      
    // ////////// 验证用户名是否存在 ////////////////////
    
    // 将用户填写的用户名发送给服务器端验证
    function checkUserName(){
    	var ret = createXHR();
    	if( ret == 0 ){
    		alert( "create xhr error" ) ;
    	}else{
    		// 在xhr中注册用于处理应答的函数(handleCheck)
    		xhr.onreadystatechange = handleCheck ;
    		/*
    		 * //使用Get方式向服务器发送请求 . 
    		 * var url = makeQueryString( "/ajax/reg.jsp" ); 
    		 * xhr.open( "get" , url ) ; 
    		 * xhr.send( null );
    		 */
    		  
    		// 通过Post 形式向服务器发送数据 .
    		var url = "http://localhost:8080/ajax/ajax_checkUser.action" ;
    		xhr.open( "post" , url ) ;   
    		xhr.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" ) ;
    		xhr.send( makeQueryString( null ) ) ;
    	}   
    }   
      
    // 在指定的URL上添加参数
    function makeQueryString( url ){
    	var name = document.getElementById( "nameId" ).value ;
    	var password = document.getElementById( "passwordId" ).value ;
    	var queryString ;
    	if( url == null ){
    		return "name=" + name ;	
    	}else{
    		return url + "?name=" + name +"&password=" + password;	
    	}
    }   
    
    function handleCheck(){  
    	document.getElementById( "nameId2" ).firstChild.innerHTML="用户名不能为空";
    	// 通信过程结束 .
    	// readyState : 1: 初始化阶段 2 :连接建立阶段 3 : 通信中阶段 4 : 通信结束
    	if( xhr.readyState == 4 ){   
    		// status==200,表示服务器运行正常,其他值代表错误
    		if( xhr.status == 200 ){
    			processResult();
    		}else if(document.getElementById( "nameId" ).value==""){
    			document.getElementById( "nameId2" ).firstChild.nodeValue="用户名不能为空";
    			document.getElementById( "nameId2" ).color="red";	
    		}
    	}
    }
      
    function processResult(){
    	// 获得应答内容 ,把应答内容显示在网页上
    	var span = document.getElementById( "msgId" ) ;
    	span.innerHTML = xhr.responseText ;	
    }
    
    </script></span>
    
    

    web.xml

    <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    	
    
    	<filter>
    		<filter-name>struts2</filter-name>
    		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    	</filter>
    	
    	<filter>
            <filter-name>struts-cleanup</filter-name>
            <filter-class>
                com.test.filter.SetCharacterEncodingFilter
            </filter-class>
            <init-param>
            	<param-name>encoding</param-name>
            	<param-value>utf-8</param-value>
            </init-param>
        </filter>  
        <filter-mapping>
            <filter-name>struts-cleanup</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    	<filter-mapping>
    		<filter-name>struts2</filter-name>
    		<url-pattern>*.action</url-pattern>
    	</filter-mapping>
    
    </web-app></span>


    SetCharacterEncodingFilter

    <span style="font-size:18px;">package com.test.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class SetCharacterEncodingFilter implements Filter {
    
        protected String encoding = null;
    
        protected FilterConfig filterConfig = null;
    
        protected boolean ignore = true;
    
        public void destroy() {
    
            this.encoding = null;
            this.filterConfig = null;
    
        }
    
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain)
        throws IOException, ServletException {
    
            if (ignore || (request.getCharacterEncoding() == null)) {
                String encoding = selectEncoding(request);
                if (encoding != null)
                    request.setCharacterEncoding(encoding);
            }
    
            chain.doFilter(request, response);
    
        }
    
        public void init(FilterConfig filterConfig) throws ServletException {
    
        this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null)
                this.ignore = true;
            else if (value.equalsIgnoreCase("true"))
                this.ignore = true;
            else if (value.equalsIgnoreCase("yes"))
                this.ignore = true;
            else
                this.ignore = false;
    
        }
    
        protected String selectEncoding(ServletRequest request) {
            return (this.encoding);
        }
    }
    </span>


  • 相关阅读:
    List 组件简单示例及其onItemsDisclosure点击事件
    读取mysq数据库l数据,并使用dataview显示
    使用dataview组件显示服务器端xml文件数据
    Flex 布局教程:语法篇
    artTemplate模板引擎
    HTTP协议响应消息的常用状态码【转】
    淘宝网前端开发面试题(二)--JS 面试题
    淘宝网前端开发面试题(一)--HTML & CSS 面试题
    HTML 5 Canvas
    清除浮动的几种方法
  • 原文地址:https://www.cnblogs.com/laohuihui/p/5308752.html
Copyright © 2020-2023  润新知