- 浏览: 87777 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
kuge6688:
我的中文还不显示啊。。。。。。。。。。。。。。。求
Itext中文处理pdf(转) -
xmllong:
奇怪,第一个代码例子就不行,只输出start ok,中间的中文 ...
Itext中文处理pdf(转) -
byandby:
Class类有一个forName()静态方法,可以根据传入的类 ...
Java中的Class对象 -
xiaoyuqi00:
c:/aoke_temp/userInfo2009070710 ...
用jspsmartupload下载文件 -
wsbwindy:
good
怎样用JspSmartUpload实现文件上传攻略
这里的方案是页面(page)是基于GBK(gb2312) 的编码格式
AJAX的中文情况,默认情况下,tomcat和weblogic的get和post请求的编码方案都不一样,不过前提都是要设置
request.setCharactorEncoding("UTF-8")如下面代码中,get方案是很烦琐的那种将得到的参数重新编码来实现
的|new String(request.getParameter("para name").getBytes("encoding
name"))|而post方案是比较简单而方便的,也提倡使用这种方式,因为可以基于filter来管理编码
tomcat可以通过设置在server.xml里的Connector元素下设置URIencoding="gbk"参数来让get使用
post的方案(即get和post都使用request.setCharactorEncoding("UTF-
8"),request.getParameter("para name")
)具体设置参考http://www.iteye.com/topic/131542,不过在weblogic下无解(我个人还没发现如何实
现),weblogic好像在解析get参数后自己又用什么编码格式包装过......其实AJAX
get根本没有普通请求get请求作为标签的作用,我们完全可以不使用get,而只使用post
测试用的jsp和servlet在下面,丢到一个项目里,在web.xml里配置servlet后运行可以看到效果,servlet的url-
pattern是这个<url-pattern>/GetAndPostExample</url-pattern>
getAndPostExample.jsp
- <%@ page language= "java" import = "java.util.Date" contentType= "text/html; charset=gbk" %>
- <html>
- <head>
- <title>发送带参数的信息到服务器,以及get,post的区别</title>
- <script type="text/javascript" >
- var xmlHttp;
- function show()
- {
- document.getElementById("show" ).value=document.getElementById( "firstName" ).value;
- }
- function createXMLHttpRequest()
- {
- if (window.ActiveXObject)
- xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
- else if (window.XMLHttpRequest)
- xmlHttp = new XMLhttpRequest();
- }
- function createQueryString()
- {
- var firstName = document.getElementById("firstName" ).value;
- var secondName = document.getElementById("secondName" ).value;
- var birthday = document.getElementById("birthday" ).value;
- var queryString = "firstName=" +firstName+ "&secondName=" +secondName
- +"&birthday=" +birthday;
- return queryString;
- }
- function doRequestUsingGET()
- {
- createXMLHttpRequest();
- show();
- var queryString = "GetAndPostExample?" ;
- queryString = queryString + createQueryString()
- + "&timeStamep=" + new Date().getTime();
- xmlHttp.onreadystatechange = handleStateChange;
- xmlHttp.open("GET" ,queryString, true );
- xmlHttp.setRequestHeader("RequestType" , "ajax" );
- xmlHttp.send(null );
- //alert(queryString);
- }
- function doRequestUsingPOST()
- {
- createXMLHttpRequest();
- show();
- var url = "GetAndPostExample"
- var queryString = createQueryString()+ "&timeStamp=" + new Date().getTime();
- xmlHttp.open("POST" ,url, true );
- xmlHttp.onreadystatechange = handleStateChange;
- xmlHttp.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded;" );
- //设置报头,说明此请求是ajax请求
- xmlHttp.setRequestHeader("RequestType" , "ajax" );
- xmlHttp.send(queryString);
- }
- function handleStateChange()
- {
- if (xmlHttp.readyState == 4 )
- {
- if (xmlHttp.status == 200 )
- parseResults();
- }
- }
- function parseResults()
- {
- var responseDiv = document.getElementById("serverResponse" );
- if (responseDiv.hasChildNodes())
- {
- responseDiv.removeChild(responseDiv.childNodes[0 ]);
- }
- var responseText = document.createTextNode(xmlHttp.responseText);
- responseDiv.appendChild(responseText);
- }
- </script>
- </head>
- <body>
- <h1>输入你的姓,名,生日日期</h1>
- <br>
- <table>
- <tr>
- <td>
- 姓:
- </td>
- <td>
- <input type="text" name= "firstName" id= "firstName" value= "羽飞" >
- </td>
- </tr>
- <td>
- 名:
- </td>
- <td>
- <input type="text" name= "secondName" id= "secondName" value= "翼" >
- </td>
- <tr>
- </tr>
- <tr>
- <td>
- 生日:
- </td>
- <td>
- <input type="text" name= "birthday" id= "birthday" value= "五月" >
- </td>
- <td>
- <input type="text" name= "show" id= "show" >
- </td>
- </tr>
- </table>
- <form action="#" >
- <input type="button" value= "使用GET提交" onclick= "doRequestUsingGET();" >
- <br>
- <input type="button" value= "使用POST提交" onclick= "doRequestUsingPOST();" >
- </form>
- <br>
- <br>
- <h2>服务器返回信息:</h2>
- <div id="serverResponse" >
- </div>
- </body>
- </html>
<%@ page language="java" import="java.util.Date" contentType="text/html; charset=gbk"%> <html> <head> <title>发送带参数的信息到服务器,以及get,post的区别</title> <script type="text/javascript"> var xmlHttp; function show() { document.getElementById("show").value=document.getElementById("firstName").value; } function createXMLHttpRequest() { if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); else if (window.XMLHttpRequest) xmlHttp = new XMLhttpRequest(); } function createQueryString() { var firstName = document.getElementById("firstName").value; var secondName = document.getElementById("secondName").value; var birthday = document.getElementById("birthday").value; var queryString = "firstName="+firstName+"&secondName="+secondName +"&birthday="+birthday; return queryString; } function doRequestUsingGET() { createXMLHttpRequest(); show(); var queryString = "GetAndPostExample?"; queryString = queryString + createQueryString() + "&timeStamep=" + new Date().getTime(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("GET",queryString,true); xmlHttp.setRequestHeader("RequestType","ajax"); xmlHttp.send(null); //alert(queryString); } function doRequestUsingPOST() { createXMLHttpRequest(); show(); var url = "GetAndPostExample" var queryString = createQueryString()+ "&timeStamp="+ new Date().getTime(); xmlHttp.open("POST",url,true); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); //设置报头,说明此请求是ajax请求 xmlHttp.setRequestHeader("RequestType","ajax"); xmlHttp.send(queryString); } function handleStateChange() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) parseResults(); } } function parseResults() { var responseDiv = document.getElementById("serverResponse"); if (responseDiv.hasChildNodes()) { responseDiv.removeChild(responseDiv.childNodes[0]); } var responseText = document.createTextNode(xmlHttp.responseText); responseDiv.appendChild(responseText); } </script> </head> <body> <h1>输入你的姓,名,生日日期</h1> <br> <table> <tr> <td> 姓: </td> <td> <input type="text" name="firstName" id="firstName" value="羽飞"> </td> </tr> <td> 名: </td> <td> <input type="text" name="secondName" id="secondName" value="翼"> </td> <tr> </tr> <tr> <td> 生日: </td> <td> <input type="text" name="birthday" id="birthday" value="五月"> </td> <td> <input type="text" name="show" id="show"> </td> </tr> </table> <form action="#"> <input type="button" value="使用GET提交" onclick="doRequestUsingGET();"> <br> <input type="button" value="使用POST提交" onclick="doRequestUsingPOST();"> </form> <br> <br> <h2>服务器返回信息:</h2> <div id="serverResponse"> </div> </body> </html>
GetAndPostExample.java
- package yufei;
- import java.io.*;
- import java.net.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class GetAndPostExample extends HttpServlet
- {
- protected void processRequest(HttpServletRequest request,
- HttpServletResponse response, String method1)
- throws ServletException,IOException
- {
- //设置文本类型(content type)
- response.setContentType("text/xml" );
- //设置文本类型的编码格式
- response.setCharacterEncoding("GBK" );
- response.setHeader("Cache-Control" , "no-cache" );
- String firstName =null ;
- String secondName = null ;
- String birthday = null ;
- //无论是get还是post,都要使用下面这句
- request.setCharacterEncoding("UTF-8" );
- if (method1.equals( "GET" ))
- {
- firstName = new String(request.getParameter( "firstName" ).getBytes( "ISO8859-1" ));
- secondName = new String(request.getParameter( "secondName" ).getBytes( "ISO8859-1" ));
- birthday = new String(request.getParameter( "birthday" ).getBytes( "ISO8859-1" ));
- }
- else if (method1.equals( "POST" ))
- { firstName = request.getParameter("firstName" );
- secondName = request.getParameter("secondName" );
- birthday = request.getParameter("birthday" );
- }
- String responseText = "Hello " + firstName + " " + secondName
- + " 你的生日是 " + birthday + " " + "(method: " + method1 + ")" ;
- PrintWriter out = response.getWriter();
- out.println(responseText);
- out.close();
- }
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException,IOException
- {
- processRequest(request,response,"GET" );
- }
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException,IOException
- {
- processRequest(request,response,"POST" );
- }
- }
package yufei; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class GetAndPostExample extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response, String method1) throws ServletException,IOException { //设置文本类型(content type) response.setContentType("text/xml"); //设置文本类型的编码格式 response.setCharacterEncoding("GBK"); response.setHeader("Cache-Control","no-cache"); String firstName =null; String secondName = null; String birthday = null; //无论是get还是post,都要使用下面这句 request.setCharacterEncoding("UTF-8"); if (method1.equals("GET")) { firstName = new String(request.getParameter("firstName").getBytes("ISO8859-1")); secondName = new String(request.getParameter("secondName").getBytes("ISO8859-1")); birthday = new String(request.getParameter("birthday").getBytes("ISO8859-1")); } else if (method1.equals("POST")) { firstName = request.getParameter("firstName"); secondName = request.getParameter("secondName"); birthday = request.getParameter("birthday"); } String responseText = "Hello " + firstName + " " + secondName + " 你的生日是 " + birthday + " " + "(method: " + method1 + ")"; PrintWriter out = response.getWriter(); out.println(responseText); out.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { processRequest(request,response,"GET"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { processRequest(request,response,"POST"); } }
-
-
当我们的ajax请求只使用post(tomcat下可以实现get和post同样方案)请求时,我们可以使用过滤器来实现其编码设置,就可以把
servlet中的request.setCharactorEncoding提出来,去掉servlet里的
request.setCharactorEncoding("encoding name"),加入下面的过滤器
根据fins大大的指导,将过滤器重写为可以区分普通请求和ajax请求的样式了(ajax请求中设置了header)
SetCharacterEncodingFilter.java
- package yufei;
- import java.io.IOException;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.Filter;
- import javax.servlet.http.HttpServletRequest;
- public class CharactorEncodingFilter implements Filter
- {
- public CharactorEncodingFilter()
- {
- super ();
- }
- private FilterConfig filterConfig;
- private String ajaxEncoding = "UTF-8" ;
- private String commonEncoding;
- protected boolean ignore = true ;
- public void init(FilterConfig filterConfig) throws ServletException
- {
- this .filterConfig = filterConfig;
- commonEncoding = filterConfig.getInitParameter("CommonRequestEncoding" );
- 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 ;
- }
- public void doFilter(ServletRequest req, ServletResponse res,
- FilterChain filterChain)
- {
- try
- {
- HttpServletRequest request = (HttpServletRequest) req;
- if (ignore || (request.getCharacterEncoding() == null ))
- {
- if (request.getHeader( "RequestType" ) != null
- && request.getHeader("RequestType" )
- .equalsIgnoreCase("ajax" ))
- {
- request.setCharacterEncoding(ajaxEncoding);
- }
- else if (commonEncoding != null )
- {
- request.setCharacterEncoding(commonEncoding);
- }
- else
- {
- request.setCharacterEncoding("UTF-8" );
- }
- }
- filterChain.doFilter(req, res);
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- catch (ServletException e)
- {
- e.printStackTrace();
- }
- }
- public void destroy()
- {
- this .commonEncoding = null ;
- this .filterConfig = null ;
- }
- }
package yufei; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.Filter; import javax.servlet.http.HttpServletRequest; public class CharactorEncodingFilter implements Filter { public CharactorEncodingFilter() { super(); } private FilterConfig filterConfig; private String ajaxEncoding = "UTF-8"; private String commonEncoding; protected boolean ignore = true; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; commonEncoding = filterConfig.getInitParameter("CommonRequestEncoding"); 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; } public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) { try { HttpServletRequest request = (HttpServletRequest) req; if (ignore || (request.getCharacterEncoding() == null)) { if (request.getHeader("RequestType") != null && request.getHeader("RequestType") .equalsIgnoreCase("ajax")) { request.setCharacterEncoding(ajaxEncoding); } else if (commonEncoding != null) { request.setCharacterEncoding(commonEncoding); } else { request.setCharacterEncoding("UTF-8"); } } filterChain.doFilter(req, res); } catch (IOException e) { e.printStackTrace(); } catch (ServletException e) { e.printStackTrace(); } } public void destroy() { this.commonEncoding = null; this.filterConfig = null; } }
web.xml加入如下过滤器配置
- <filter>
- <filter-name>CharactorEncoding</filter-name>
- <filter-class >org.apache.struts2.dispatcher.FilterDispatcher</filter- class >
- <!-- 设置编码格式到initparameter里去 -->
- <init-param>
- <param-name>CommonRequestEncoding</param-name>
- <param-value>GBK</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>CharactorEncoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
发表评论
-
Itext中文处理pdf(转)
2010-06-04 17:26 8024http://quicker.iteye.com/blog/5 ... -
JfreeChart学习总结
2008-09-10 17:35 977JfreeChart学习总结 关键 ... -
Tomcat 5/6 utf-8 编码下完美解决(post/get)中文表单问题的过滤器
2008-05-30 00:40 67961.过滤器 (包含get与post方式)SetCharacte ... -
Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器
2008-05-29 21:40 1788常 见的 Tomcat 5 表单编码提交后乱码的 ... -
对象的初始化
2008-05-27 09:39 1064调用构造器的具体处理步骤: 1.所有数据域被初始化为默认值(0 ... -
简单的FTP客户端 sun.net.ftp.FtpClient
2008-01-04 23:15 3079某些数据交换,我们需要通过ftp来完成。sun.net.ftp ... -
sun.net.ftp.FtpClient的函数说明
2008-01-04 23:14 1298sun.net.ftp.FtpClient., ... -
java实现的ftp文件上传例题
2008-01-04 23:13 2469前几天写过一编"关于java的http协议文件上传实 ... -
用smartUpload传文件的同时,传递参数的注意事项
2008-01-04 23:12 2078用smartUpload传文件的同时,传递参数时,在获取参数时 ... -
jsp下载文件的问题
2008-01-04 23:10 1296程序如下: <%@page language ... -
怎样用JspSmartUpload实现文件上传攻略
2008-01-04 23:08 2351㈠ 表单要求 对于上传文件的FORM表单,有两个 ... -
用jspsmartupload下载文件
2008-01-04 23:06 8248一般无论网站还是其他系统都会用到文件的上传和下载, ... -
从追MM谈Java的23种设计模式
2008-01-04 23:05 846设计模式做为程序员的& ... -
java操作Excel、PDF文件
2008-01-04 23:03 1543下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是 ... -
Java中的内部类
2008-01-04 22:59 1002从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论 ... -
用servlet filter 解决编码问题的一个小例子
2008-01-04 22:58 1604当在做程序的是你也许会遇到一些很让你恼火的乱码问题,就是在你在 ... -
JSTL标签的使用
2008-01-04 22:57 36441. <c:out>标签的用法 ... -
用java实现简单的email正则表达式判断
2008-01-04 22:56 1513import java.sql.*; import java. ... -
eclipse内存不足解决方法
2008-01-04 22:55 2067问题解决]用ECLIPSE3.2+MYECLIPS ... -
如何编写一个简单的Servlet
2008-01-04 22:54 18961.写一个Servlet的java源文件2.编译Servlet ...
相关推荐
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...
使用Ajax传递中文参数,如果不对参数进行处理的话,传到后台会变成乱码,经测试可以使用如下方法 这里是以jquery.autocomplete插件中获取输入框中的数据传到后台为例: 注意要对中文使用encodeURI编码两次 代码如下:...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
这些请求被发送给 DWR,这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端,编码成 JavaScript。DWR 还提供了帮助执行常见的用户界面任务的 ...
Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...
用ajax 通过url传参数给servlet时,在servlet提取时一直是乱码,即使用了统一的字符编码也没用。
除此之外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。通过对这两个实例的学习,读者可以对SSH开发模式有更透彻地理解和认识。SSH是...
除此之外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。通过对这两个实例的学习,读者可以对SSH开发模式有更透彻地理解和认识。SSH是...
通过模拟视频存储的操作的AJAX请求创建了应用程序客户端。 与开发 :hammer_and_wrench: 工具和技术: -IDE项目,JAVA。 -IDE前端开发(JS,CSS3,HTML5)。 数据库。 数据库连接器。 -Gson库。 -JAVA 11。 ...
用AJAX 来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把 resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...