package action;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class AddPerson extends ActionSupport {
public String add() {
String name = ServletActionContext.getRequest().getParameter("name");
String age = ServletActionContext.getRequest().getParameter("age");
String add = ServletActionContext.getRequest().getParameter("add");
System.out.println("name:"+name);
try {
name = URLDecoder.decode(name, "UTF-8");
age = URLDecoder.decode(age, "UTF-8");
add = URLDecoder.decode(add, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("name:" + name);
System.out.println("age:" + age);
System.out.println("add:" + add);
return this.SUCCESS;
}
}
今天朋友让帮忙处理乱码的问题,具体的操作为:当在页面选择某项执行修改操作,将弹出一个修改信息对话框,里面可能会输入中文,当点击提交按钮后,通过Javascript中国的AJAX通信,给后台Struts2中的Aciton传递信息进行处理。
其实这么做已经有问题了,应该直接使用Struts传递,但是因为之前是别人写的,就这么传,那也只能继续这么写,不然项目要改的太多~~(管理太混乱了)
很显然,传给Action的参数出现了乱码~
其实很简单,前台得到后需要进行编码,后台再进行解码。
以为Url中中文是需要进行编码的。
我就自己写了测试的代码,
前台页面如下:
<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/thickbox_plus.js"></script>
<script type="text/javascript" src="js/myfunction.js"></script>
<link rel="stylesheet" type="text/css" href="css/thickbox.css"/>
<title>Insert title here</title>
</head>
<body>
Name:<input type="text" id="name"></input>
<br/>
Age:<input type="text" id="age"></input>
<br/>
Address:<input type="text" id="address"></input>
<br/>
<input type="button" value="Add person" onclick="submit()"></input>
</body>
</html>
提交相应的javascript代码 ,这里需要使用encodeURI进行编码,而且要执行两次,因为是测试,也就不管反馈数据了。
function submit() {
var name = $("#name").val();
var age = $("#age").val();
var add = $("#address").val();
var url = "toAdd.action?name=" + name + "&age=" + age + "&add=" + add;
url = encodeURI(url);
url=encodeURI(url);
alert("URL:" + url);
$.get(url);
}
后台的Action如下:
package action;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class AddPerson extends ActionSupport {
public String add() {
String name = ServletActionContext.getRequest().getParameter("name");
String age = ServletActionContext.getRequest().getParameter("age");
String add = ServletActionContext.getRequest().getParameter("add");
System.out.println("name:" + name);
try {
name = URLDecoder.decode(name, "UTF-8");
age = URLDecoder.decode(age, "UTF-8");
add = URLDecoder.decode(add, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("name:" + name);
System.out.println("age:" + age);
System.out.println("add:" + add);
return this.SUCCESS;
}
}
name:%E4%BD%A0%E5%A5%BD
name:你好
age:么
add:不dsf2
经测试,中文得以正常在后台显示。
分享到:
相关推荐
在使用AJAX向服务器发送请求时,如果请求参数中包含中文字符,可能会因为编码方式不一致导致接收方解析出错,从而出现乱码现象。这主要是由于客户端(如浏览器)和服务器端默认采用的字符集可能不同所导致的。 ####...
在Ajax GET请求中,参数通常会附加到URL后面,形成查询字符串。 中文字符在HTTP传输过程中可能出现乱码的主要原因有两个: 1. URL编码问题:URL不支持非ASCII字符,因此在发送包含中文字符的请求时,需要先将这些...
ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8", 修改了jquery.js,添加了charset=utf8之后ajax就能传输文佬参数过去后台
lotus domino AJAX js获取url中的中文参数的方法
### AJAX中使用JavaScript的send方法POST参数详解 #### 一、引言 在Web开发中,AJAX(Asynchronous JavaScript and XML)技术被广泛应用于实现网页的局部刷新,提升用户体验。其中,通过JavaScript发送POST请求是一...
本文将深入探讨“ajax提交中文到servlet”的相关知识点,以解决在异步传输过程中处理中文字符的问题。 一、Ajax基础 Ajax的核心是通过JavaScript创建XMLHttpRequest对象,它允许浏览器在不重新加载整个网页的情况下...
例如,我们使用 AJAX 通过 URL 传递中文参数 "中文测试" 给 Servlet,Servlet 在接收参数时却变成了乱码 "�������"。这使得我们的应用程序无法正确地处理中文参数。 解决方案 要解决这个问题,我们可以从两...
在第一个示例中,开发者通过调用`encodeURIComponent()`或`encodeURI()`函数对请求URL中的参数进行编码。这是因为在发送HTTP请求时,URL中的特殊字符和非ASCII字符需要被转换成一种可传输的格式。`...
**Ajax中文API** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。Ajax的核心是JavaScript对象...
在本文中,我们将深入探讨如何解决使用Ajax进行POST请求时出现的中文乱码问题。首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous...
如果你在JavaScript中使用Ajax发送GET请求,确保使用`encodeURIComponent()`函数对包含中文的参数进行编码。这将确保在发送到服务器之前,中文字符被正确地编码。 6. **浏览器兼容性**: 考虑到不同浏览器可能对...
本例中,我们将探讨如何使用AJAX的GET方法通过URL传递数据,并在Lotus Domino后端处理这些数据。 首先,让我们了解AJAX(Asynchronous JavaScript and XML)的基本概念。AJAX是一种在无需刷新整个页面的情况下,...
在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的问题:即通过Ajax发送带有中文字符的数据时,后端接收到的数据出现乱码现象。...
除此之外,还可以通过JavaScript代码显式设置请求的参数值,将中文变量直接拼接在URL中,而不是让浏览器自动编码。如下例所示: ```javascript function confirmCommit() { var wlCompany = $("#wlCompany").val()...
**Ajax教程中文手册** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新,提高了用户体验。Ajax...
### AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题 #### 背景与问题概述 在使用AJAX技术进行前后端数据交互时,经常会出现中文字符编码的问题,尤其是在使用`XMLHttpRequest`对象发送请求的过程中。例如...
这个中文的"AJAX.CHM"帮助文档详细地涵盖了AJAX的基础概念、核心原理以及实际应用,旨在为开发者提供全面的指导。CHM(Compiled Help Manual)是微软开发的一种帮助文件格式,它将HTML文件、图像和其他资源打包成一...
在`url`参数中,我们使用`escape()`函数对中文参数进行了编码,以确保它们在网络传输过程中保持正确格式。 编码过程如下: ```javascript url: "ajaxpage.aspx?t=smrz&name=" + escape(name) + "&zjtype=" + ...
通过上述代码,我们可以确保在发送AJAX请求时,URL中的中文字符会被正确地编码为相应的Unicode形式,从而避免了传输过程中的乱码问题。 #### 后端处理:参数接收与解码 在后端(即服务器端),我们需要对接收到的...
综上所述,解决`prototype.js`发送Ajax GET请求中文参数乱码问题的关键在于确保客户端、服务器和传输过程中的编码一致性。这包括设置请求头、服务器配置以及HTML页面的字符集声明。在实际开发中,理解并处理这些细节...