在项目中有另外一系统请求我们的系统,我们会根据请求传入的入参数再进一步获取其它的参数,然后才sendRedirect到真正的请求上。在测试时发现,如果获取的其它参数中有中文汉字,再sendRedirect时出错,原因是地址栏上的中文汉字变成了乱码。
在网上看到说通过URLDecoder.decode(request.getParameter("param1"))即可,但由于我这里的参数比较多,且有些参数还是JSON格式的,不能简单的对URL进行URLDecoder.decode处理(因为整个请求中的:、{、}、//都会被编码),正确的做法是只对URL中的中文进行URLDecoder.decode处理。我的处理方法及测试如下:
import java.io.UnsupportedEncodingException; public class Main { public static void main(String[] args) { String str = "欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/"; String resStr = getEncodeStr(str); System.out.println(resStr); } private static String getEncodeStr(String str) { StringBuffer resultStrBuf = new StringBuffer(); StringBuffer chineseStrBuf = new StringBuffer(); try { for (int i = 0; i < str.length(); i++) { if ((str.charAt(i) + "").getBytes().length > 1) { chineseStrBuf.append(str.charAt(i)); } else { if (chineseStrBuf.length() > 0) { resultStrBuf.append(java.net.URLEncoder.encode(chineseStrBuf.toString(), "UTF-8")); chineseStrBuf.delete(0, chineseStrBuf.length()); } resultStrBuf.append(str.charAt(i)); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return resultStrBuf.toString(); } }
运行结果:
%E6%AC%A2%E8%BF%8E%E5%85%89%E4%B8%B4%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2iteye,%E7%BD%91%E5%9D%80http://bijian1013.iteye.com/
附一:Java如何从字符串中取出中文、Java如何从字符串中取出中文和数字,去掉其他字符
public class Main { public static void main(String[] args) { //Java如何从字符串中取出中文 System.out.println("深圳2015SH".replaceAll("[\\p{ASCII}]","")); System.out.println("深圳2015SH".replaceAll("[\\x00-\\x7F]","")); //Java如何从字符串中取出中文 String str = "欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/"; StringBuffer sb = new StringBuffer(); for (int i = 0; i < str.length(); i++) { if ((str.charAt(i)+"").getBytes().length>1) { sb.append(str.charAt(i)); } } System.out.println(sb); //Java如何从字符串中取出中文 System.out.println("欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/".replaceAll("[^\\u4E00-\\u9FA5]", "")); System.out.println("欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/".replaceAll("[\\w]", "").replaceAll("\\p{Punct}", "")); //Java如何从字符串中取出中文和数字,去掉其他字符 String str1 = "^2^3da42b3中文sae34科e技b2字符2`~!@#$%^&*()_+-=[]{};':\",.<>/?\\93啊"; str1 = str1.replaceAll("[^0-9\\u4e00-\\u9fa5]", ""); System.out.println(str1); } }
运行结果:
深圳 深圳 欢迎光临我的博客,网址 欢迎光临我的博客网址 欢迎光临我的博客,网址 23423中文34科技2字符293啊
附二:检查输入的字符串中是否包含中文
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 检查输入的字符串中是否包含中文 */ public class Main { static String regEx = "[\u4e00-\u9fa5]"; static Pattern pat = Pattern.compile(regEx); public static void main(String[] args) { String input = "Hell world!"; System.out.println(isContainsChinese(input));//false input = "hello world"; System.out.println(isContainsChinese(input));//false input = ",http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = ",http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = "[]%http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = "【】%http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = "中国http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//true } public static boolean isContainsChinese(String str) { Matcher matcher = pat.matcher(str); boolean flg = false; if (matcher.find()) { flg = true; } return flg; } }
运行结果:
false false false false false false true
相关推荐
Jsp利用response.sendRedirect、cookie传参
Servlet跳转方式 sendReDirectServlet跳转方式 sendReDirectServlet跳转方式 sendReDirectServlet跳转方式 sendReDirectServlet跳转方式 sendReDirect
转的页面"> 与 response.sendredirect("转的页面")的区别 sendredirect:
sendRedirect()和forward()的区别,我是个新手,觉得很受用,呵呵,大家学习
jsp response.sendRedirect不跳转的原因分析及解决.docx
jsp response.sendRedirect()用法详解.docx
sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht
用于初学者,牛人不用了,jsp增删改查...
主要介绍了java 中sendredirect()和forward()方法的区别,需要的朋友可以参考下
最近做项目时遇到一个问题,明明加了response.sendRedirect() ,系统也执行了,但是它就是不跳转;最后在网上找到原因如下: 首先我们要明白用response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header...
而sendRedirect方法可以让你重定向到任何URL。 表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/uu); Forward代码中的"/uu...
Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...
jsp跳转getRequestDispatcher()和sendRedirect()的区别.docx
主要为大家详细介绍了java解决请求跨域的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
页面之间的跳转可以通过两种方式实现:forward和sendRedirect;forward:可以在JSP页面中使用,可以在Servlet中实现,需要的朋友可以了解下
Servlet之forward、sendRedirect、 include区别与使用实例 ,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/45169569
1.在网页上访问URL(HTTP:localhost:8080/Login),服务器获取请求头Get,forword转发到(HTTP:localhost:8080/Login.jsp),在浏览器上显示登录窗口。 2.用户在浏览器填写用户信息,点击submit按钮以Post方式请求服务器...
----------重定向------------------...解决这个问题的方法如下: 包含转发 request.getRequestDispatcher("login.html").include(request.response); //就是将该页面所包含的所有的网页代码包含到我所要跳转的目的地去
4. 使用重定向时,可以使用`response.sendRedirect()`方法指定重定向的URL地址。 5. 使用转发时,需要使用`RequestDispatcher`对象获取转发器,并使用`forward()`方法执行转发操作。 6. 根据具体的业务需求,选择...