`

通过中文转码使用包装类

 
阅读更多
jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">   
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  <body>
      <c:url value="testWripperServlet?method=login" var="vv">
        <c:param name="name" value="张三"></c:param>
      </c:url>
       <a href="${vv}">go_1</a>
      <form action="<c url value='////'" method="get">
      </form>
       <a href="javascript:_go()">go</a>
          <form action="<c:url value='testWripperServlet?method=login'/>" method="post">
           <input type="text" name="name" value="">
           <input type="submit" value="提交">
          </form>
  </body>
 
    <script type="text/javascript">
      function _go(){
        var url="<c:url value='testWripperServlet?name=张三你&method=login'/>"
             url=encodeURI(url);
               alert(url);
             window.location.href=url;
          }
    </script>
</html>

servlet类
package com.cgm.servlet;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestWripperServlet extends BaseServlet{
public void login(HttpServletRequest request,HttpServletResponse response) throws Exception{
String name=request.getParameter("name");
System.out.println("req is"+request);
System.out.println("hhhhhhhh--==="+name);
    String[] names=request.getParameterValues("name");
  System.out.println(names);
  for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
 
   // Map<String, String> map=new HashMap<String, String>();
 
    //默认调用父类方法 如果要修改必须覆盖
Map<String, String[]> map=request.getParameterMap();
   String namess= map.get("name")[0];
   System.out.println("namess="+namess);
 

}
}

调用包装类
package com.cgm.servlet;

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BaseServlet extends HttpServlet{
@Override
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String methodName=req.getParameter("method");
try {
Method mm=this.getClass().getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
  //声明包装类 调用
MyRequest myRequest=new MyRequest(req);
     mm.invoke(this, myRequest,res);
} catch (Exception e) {
e.printStackTrace();
}
}
}

包装类
package com.cgm.servlet;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
  //父类没有无参数构造 此方法必须实现
public MyRequest(HttpServletRequest request) {
super(request);
this.request=request;
}

   //我们可以修改parmter方法
@Override
public String getParameter(String name) {
String value =request.getParameter(name);
if (request.getMethod().equals("GET")) {
System.out.println("==============转码");
try {
value=new String(value.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}

return  value;
}



@Override
public String[] getParameterValues(String name) {
String[] values=request.getParameterValues(name);
if (request.getMethod().equals("GET")) {

  System.out.println("=============开始转码");
for (int i = 0; i < values.length; i++) {
try {
values[i]=new String(values[i].getBytes("ISO-8859-1"), request.getCharacterEncoding());

   System.out.println(values[i]);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}

return values;
}

@Override
public Map getParameterMap() {
Map<String, String[]> mm=request.getParameterMap();
if (request.getMethod().equals("GET")) {
Iterator<String[]> it=mm.values().iterator();
while (it.hasNext()) {
String[] its=it.next();
for (int i = 0; i < its.length; i++) {
try {

System.out.println("mappppps1========="+its[i]);
//its[i]=new String(its[i].getBytes("ISO-8859-1"), request.getCharacterEncoding());
  System.out.println("mappppps2========="+its[i]);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


}

return mm;
}
}






分享到:
评论

相关推荐

    防止Socket传递汉字乱码

    当涉及到汉字这类非ASCII字符集的传递时,可能会遇到乱码问题。本篇文章将深入探讨如何防止Socket传递汉字乱码,确保数据传输的正确性。 1. **字符编码理解** - 字符编码是计算机表示和处理文本的方式,常见的有...

    ZipInputStream解压有中文名报错问题解决

    5. **避免乱码问题**:确保在创建ZIP文件时,文件名也使用了正确的编码,这样在解压时使用相同的编码就不会出现问题。 以上就是关于“ZipInputStream解压有中文名报错问题”的详细解析,包括问题的根源、关键概念...

    java中FileOutputStream中文乱码问题解决办法

    然而,当尝试用它来写入包含中文字符的文本时,可能会遇到乱码问题。这是因为`FileOutputStream`并不理解字符编码,它只是简单地将字符串的每个字符转换为对应的字节并写入文件。对于非ASCII字符,如中文,每个字符...

    Java 实现 POS 打印机无驱串口打印(解决中文乱码)

    通过本文介绍的方法,我们可以有效地实现 POS 打印机无驱串口打印的功能,并且能够解决常见的中文乱码问题。这对于实际应用中提高效率、降低成本有着重要意义。此外,需要注意的是,在实际部署时还需考虑更多因素,...

    Java中文编码问题小结

    为了避免这类问题,可以使用`-encoding`选项强制指定源文件的编码。一种检测方法是插入一个Unicode汉字`\u4e00`,然后检查其在JVM内部的整数值是否正确,或者直接以UTF-8打开编译后的`.class`文件查看汉字是否保存...

    Android编程向服务器发送请求时出现中文乱码问题的解决方法

    总结来说,解决Android向服务器发送请求时的中文乱码问题,关键在于对请求参数进行正确的URL编码,并在服务器端适当地进行解码。使用过滤器可以有效地简化这个过程,使得代码更加简洁且易于维护。对于其他可能出现...

    用Filter来解决中文表单提交问题

    总的来说,`TomcatFormFilter`通过在请求到达目标资源之前设置合适的字符编码,有效地解决了中文表单提交时可能出现的乱码问题。此外,这种解决方案还具有一定的通用性,可以应用于其他类似的字符编码转换场景,增强...

    java中Filter过滤器处理中文乱码的方法

    在Java Web开发中,Filter过滤器是...通过以上方法,可以有效地处理Java Web应用中的中文乱码问题,确保数据在传输过程中的正确性。在实际开发中,一定要注意编码的统一和正确设置,避免因编码不一致导致的乱码问题。

    转换中文的过滤器(java 中转换中文)

    中文字符集的编码方式多样,包括GBK、GB2312、UTF-8等,不同编码间的转换可能导致乱码问题。本文将详细讲解如何在Java中创建一个过滤器来转换中文字符。 首先,我们要理解Java中的字符编码概念。Java内部使用...

    Java中文显示过滤器实例.rar

    在Java编程语言中,中文字符的正确显示是一个常见的挑战,特别是在处理...通过学习和分析这个实例,开发者可以更好地理解和应用Java中的编码过滤器,从而在实际项目中解决中文乱码问题,提高代码的可维护性和用户体验。

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被通知对象 7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.1.1. BeanNameAutoProxyCreator 7.9.1.2. DefaultAdvisorAutoProxyCreator ...

    Java字符转换[参考].pdf

    在处理`.properties`文件时,由于Properties类默认使用ISO8859-1编码读取,所以包含汉字的.properties文件需要通过`native2ascii`工具转换为`\uXXXX`格式。XML文件的读取需要注意文件头部的编码声明,以确保与实际...

    Java字符编码转换过程说明

    - `.properties`文件:`Properties`类使用ISO8859-1编码读取,所以不能直接包含汉字。需要使用`native2ascii`工具将汉字转换为`\uXXXX`格式。 - XML文件:XML文件的编码应在文件头中声明,如`...

    CoreJava_面试题

    7. char类型变量理论上可以存储一个汉字,但由于编码方式的不同,可能出现乱码。实际使用时,通常会考虑使用char数组或者字符串来存储中文字符。 8. 计算2乘以8最有效率的方法是使用位运算符,如 2 。 9. final...

    Java字符转换.pdf

    如果以非UTF-8编码(如GBK)写的源文件在英文环境下编译,可能会出现乱码问题。一种检测方法是插入`\u4e00`这样的Unicode字符,然后检查编译后的`.class`文件中的字符串是否正确保存。 文件的读写涉及到字符编码的...

    专题之Java字符转换.pdf

    如果编码不匹配,编译时可能会出现乱码问题。例如,GBK编码的源文件在英文环境下的UNIX系统中编译,可能会导致Java无法正确识别汉字。检测这类问题的一种方法是编写包含Unicode转义序列(如`\u4e00`)的汉字,然后...

    关于EncodingFilter的简单使用

    这个过滤器确保了请求参数和输出内容的正确编码,防止出现乱码问题。本篇文章将详细介绍`EncodingFilter`的原理、配置以及使用方法。 首先,让我们了解什么是过滤器(Filter)。在Servlet规范中,过滤器是Java Web...

    java文件操作

    根据给定的文件信息,我们可以总结出以下几个关于Java...需要注意的是,对于中文字符的处理,应选择合适的编码方式以避免乱码问题。同时,在进行文件操作时,妥善处理异常情况也非常重要,以确保程序的稳定性和安全性。

    JSP 中文字符处理代码

    第二种方法是使用过滤器(Filter)来解决中文乱码问题。这一方法更为通用和长效,适用于整个应用范围内。通过编写一个实现了Filter接口的类,可以在请求到达具体的Servlet之前对其进行预处理。在这个例子中,过滤器...

Global site tag (gtag.js) - Google Analytics