前面提到过我的一个低级失误并对servlet的setCharacterEncoding有了正确认识。
主要是基于这么一个思路解决我的问题:
<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>
...
<form method="post" action="/servlet" accept-charset="utf-8">
<input type="hidden" name="_charset_"/>
<input type="text" name="text"/>
<input type="submit" value="Submit"/>
</form>
这个表单配合原来在weblogic下写的filter代码,在IE和firefox下运行正常。但既然遵循servlet规范,不能在filter中通过_charset_这个request参数来获取浏览器对post body的真实编码,只能想点歪门邪道了。向jsessionid取经,这个表单改成这样:(关于URL中的分号,请参考RFC1738,这里有个中文版)
<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>
...
<form method="post" action="/servlet;_charset_=utf-8" accept-charset="utf-8">
<input type="hidden" name="_charset_"/>
<input type="text" name="text"/>
<input type="submit" value="Submit"/>
</form>
filter的改造就略了,无非是hack下request uri。幸好遗留应用并不需要url中重写jsessionid。wink
测试,运行,firefox正常了,IE又不正常。哦,恍然大雾啊,原来firefox是严格的根据accept-charset来编码,若accept- charset不存在,则按response或者meta http-equiv="Content-Type"中的声明来编码,最后把编码方式放到_charset_隐藏域。而IE还是顽固的只按照 response或者meta http-equiv="Content-Type"中的声明来编码,并把编码方式放到_charset_隐藏域。原来IE无视accept- charset的存在。我原先一直以为_charset_隐藏域只是IE对accept-charset的一个强制辅助呢,又一个一知半解的典型...
得了,只能让firefox和IE同流合污了。最终,表单变成这样:
<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>
...
<form method="post" action="/servlet;_charset_=gbk">
<input type="text" name="text"/>
<input type="submit" value="Submit"/>
</form>
在IE和firefox下均测试通过。
http://sorphi.iteye.com/blog/177716
分享到:
相关推荐
### JS 获取 Form 表单数据知识点详解 #### 一、标题与描述理解 根据提供的标题“js获取form表单”及描述“ajax js一次性获取form表单”,我们可以明确本篇文章将围绕JavaScript(简称JS)中如何通过Ajax技术一次...
本篇文章主要探讨如何在Servlet中处理AJAX POST请求,特别是当请求参数以`form data`和`request payload`两种不同形式传递时。 首先,理解HTTP请求的基本结构。GET请求的参数通常附加在URL后面,而POST请求的参数...
当我们需要从HTML表单(form)中获取用户输入的数据并在网页上显示时,Servlet扮演着关键角色。本篇将详细介绍如何使用Servlet来接收form表单提交的数据,并将其在网页上呈现。 一、Servlet生命周期 Servlet具有三个...
调用pb开发的webserver(HTTP POST) .../*获取结果 HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <short xmlns="http://webi.org">short*/ //出参是json格式{"statusCode":"2"}
在后端 允许跨域的情况下,axios post 将数据传到后端,但是后端无法接收,始终为空 请求能正常到达后端,那么肯定传数据的地方的问题了 所以这里headers设置为 headers:{"Content-Type":'application/x-...
httpPost.setHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8"); List<NameValuePair> params = new ArrayList(); params.add(new BasicNameValuePair("param", "中文参数")); ...
charset=utf-8"; ``` 上述代码创建了一个`HttpWebRequest`对象,并设置了请求方法为POST以及Content-Type。需要注意的是,这里设置的Content-Type并不是发送图片的标准格式`multipart/form-data`,而是用于提交...
在处理某些特定的POST请求时,我们可能会遇到一种名为"request payload"的数据格式,它与传统的"Form data"有所不同。本文将详细介绍"payload"形式的POST请求,以及如何使用Python的requests库来实现这种请求。 ...
- 表单编码:在HTML表单中,可以使用`accept-charset`属性指定编码,如`<form method="post" accept-charset="UTF-8">`。 - Servlet容器配置:在Tomcat等Servlet容器的配置文件(server.xml或web.xml)中,可以...
同时,可能还需要检查`HTTP_ACCEPT_CHARSET`以获取客户端的接受字符集。 6. **数据转换**:如果服务器和脚本支持不同的字符集,可能需要在接收数据后进行转换,如从GB2312转为UTF-8。 在 boa-0.94.13 版本中,可能...
在上面的代码中,我们使用 doPost 方法来处理 POST 请求,并获取表单中的参数。 3. GET 和 POST 的差异 GET 和 POST 方法的主要差异在于数据传输的方式。GET 方法是通过 URL 传递参数的,而 POST 方法是通过 ...
<button onclick="submitForm()">以POST方式打开新页面 function submitForm() { var form = document.getElementById('myForm'); // 这里可以添加更多的动态数据到表单 // form.appendChild(document....
meta charset="UTF-8"> <title>Document</title> </head> <body> <form id="form"> <input type="text" name="username"> <input type="file" name="file"> <...
type:"post", dataType:"json", //data:{reviewer:encodeURI(reviewer)}, contentType: "application/x-www-form-urlencoded; charset=GBK", // headers:{"ClientCallMode" : "ajax"},//添加请求头部 enctype=...
在PHP开发过程中,有时会遇到一个常见的问题,即使用POST方法发送的数据无法在服务器端的PHP脚本中正常获取。这种情况通常发生在使用非表单数据(如JSON格式)进行通信时,例如通过Vue.js和axios库。本文将详细介绍...
<meta charset="UTF-8"> <title>PHP POST表单提交测试 <form action="process_form.php" method="post"> 用户名: <input type="text" id="username" name="username"><br> 密码: ...
- **表单提交乱码**:通过设置表单提交时的编码方式,如`<form action="submit.jsp" method="post" accept-charset="UTF-8">`。 #### 三、示例分析 接下来,我们将通过一个具体的例子来深入理解如何在JSP中正确...
在实际开发中,可能会遇到`context.Request.Form`和`context.Request.Params`无法正确获取POST数据的问题,我们将探讨这个问题的原因以及解决方案。 首先,了解AJAX的基本概念。AJAX允许网页在不重新加载整个页面的...
- 参数编码:客户端对POST数据进行编码,比如在Java中使用`URLEncoder.encode()`,在JavaScript中使用`new Blob([data], {type: 'application/x-www-form-urlencoded;charset=utf-8'})`。 - 服务器端接收:服务端...
`post`方法处理HTTP POST请求,获取表单数据并进行验证。 ```python from django.shortcuts import render from django.views.generic import View from .forms import SelectTestForm class TestView(View): def...