`

传参问题

 
阅读更多

使用java.net.URLEncoder.encode()可以对要传递的中文进行编码

a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);
取值时用语句java.net.URLDecoder.decode(param);再转回中文
b.在你的Tomcat目录-->conf目录-->server.xml里找出这段:
       <Connector 
         port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true"
<!--在里边加上这个参数-->
URIEncoding="gb2312" 
     />

简单示例程序如下:

<%@ page contentType="text/html;charset=gb2312" %>

<a href="ds.jsp?url=<%=java.net.URLEncoder.encode("编码的是这里","GB2312")%>">点击这里</a>


<%
//request.setCharacterEncoding("GBK");
if(request.getParameter("url")!=null)
{

str=request.getParameter("url");
str=java.net.URLDecoder.decode(str,"GB2312");
str=new String(str.getBytes("ISO-8859-1"));
out.print(str);
}

%>

JSP经过上面的处理之后,最后输出的HTML页面联结已经可以正常向服务器传递中文参数了。

下面我们阐述一下Servlet里怎么接收/解析中文参数。

对于<a href="/someServlet?key=%E4%BD%A0%E5%A5%BD">你好</a>之类的联结,我们可以用下面的servlet来解析传递过来的中文参数。


GetAsiaCharServlet.java

view plaincopy to clipboardprint?
import java.io.IOException;   
import java.net.URLEncoder;   

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

public class GetAsiaCharServlet extends HttpServlet {   
         
             
      @Override 
      //redir?key=xxxx   
      protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {   
          String key = req.getParameter("key");   
             
          key = <SPAN style="COLOR: #ff0000">new String(key.getBytes("ISO-8859-1", "utf-8"))</SPAN>;   
             
      System.out.println(keyword);   
      //...   

      //重定向处理   
      //res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key , "utf-8"));   
      }   
}

import java.io.IOException;
import java.net.URLEncoder;

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

public class GetAsiaCharServlet extends HttpServlet {
      
          
      @Override
      //redir?key=xxxx
      protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
          String key = req.getParameter("key");
          
          key = new String(key.getBytes("ISO-8859-1", "utf-8"));
          
      System.out.println(keyword);
      //...

      //重定向处理
      //res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key , "utf-8"));
      }
}

我们注意到使用req.getParameter("key")得到参数后,还使用了new String(key.getBytes("ISO-8859-1", "utf-8"))把ISO-8859-1字符集形式转换成UTF-8形式。
为什么呢?因为iso-8859-1是Java中网络传输使用的标准字符集,req.getParameter("key")得到的还是ISO-8859-1字符集,所以要转换一下才不会是乱码。

最后,顺便提一下,采用servlet重定向时,也需要对包含中文文字的参数做特殊处理。
例如,SERVLET从HTML页面的联结接受参数,然后重新定向到Google搜索。
则可以在上面的GetAsiaCharServlet里加上如下处理:
res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key , "utf-8"));

也就是说,需要把参数取出来,转换,再重新使用URLEncoder.encode编码,这样就不会出现乱码现象。

0
1
分享到:
评论

相关推荐

    分页插件传参问题

    分页插件传参问题 在用分页插件进行分页的时候pg:pager中的url只能是一个action连接,那么如果县级下一步需要传另一个action名称的参数,就需要pg:parameter 来设置了.

    【达梦数据库】函数传参问题复现

    【达梦数据库】函数传参问题复现

    关于JSP页面间的传参问题

    ### 关于JSP页面间的传参问题 #### JSP页面间传值方法概述 在进行Web开发时,尤其是在使用Java Server Pages(JSP)技术的过程中,页面间的参数传递是一项非常重要的技能。它不仅涉及到基本的HTML知识,还涉及到...

    收集并统计网络流量--关于传参问题

    标题中的“收集并统计网络流量--关于传参问题”指的是编写程序来监控和统计网络上的数据传输情况,而描述中的“为什么这个main要传参,要传什么参数?”则聚焦于程序主函数`main()`接收命令行参数的意义和具体参数...

    关于Python Tkinter Button控件command传参问题的解决方式

    本文将详细讨论两种解决Python Tkinter Button控件command传参问题的方法。 ### 方法一:使用`lambda`表达式 在Python中,`lambda`关键字用于创建匿名函数,这种函数可以接受任意数量的参数,但只能有一个表达式。...

    JQuery中SetTimeOut传参问题探讨

    标题中提到的“JQuery中SetTimeOut传参问题探讨”说明我们要探讨的是在使用JavaScript的JQuery库进行编程时,如何在使用`setTimeout`或`setInterval`函数时传递参数的问题。`setTimeout`和`setInterval`是JavaScript...

    Delphi主程序与Dll传参问题1.0

    在主程序与Dll经常传参,参数个的个数、类型不同方法也不同,有没有统一的方法呢? 有!传字典就可以了!这样我只要传一个参数就可以了! Delphi有好用的字典对象吗? 有TStringList+TNamedVariantsList就可以组合成...

    python函数传参问题.py

    个人写的python函数传参值改变的问题脚本,自己学习用的,大家可以拿来参考。 有问题欢迎大家指出。

    多action之间跳转传参问题

    在开发Java Web应用程序时,尤其是使用Struts2或者Spring MVC等MVC框架时,我们经常需要在多个Action之间进行跳转并传递参数。这在构建动态、交互性强的Web应用中是必不可少的。本项目旨在演示如何在自定义的Action...

    前端导出excel附件,补充一下字体大小传参问题

    主要是解决一下前端使用xlsx-syle插件的一些自定义的属性

    wxrssjs一个轻量级的事件订阅器主要解决微信小程序跨页面传参问题

    在微信小程序的开发过程中,经常会遇到跨页面通信的问题,即如何在不同的页面之间传递数据。传统的解决方案可能包括全局变量、缓存或者通过App对象的属性进行传递,但这些方法都有其局限性,如数据同步性差、易引发...

    解决vue-router中的query动态传参问题

    解决vue-router中的query动态传参问题 在Vue Router中,query参数的动态传递是一个常见的问题。该问题的解决方案可以分为两步:首先,在模板中使用v-bind指令将id绑定到li元素上,然后在router-link中使用该id作为...

    birt报表钻取传参方法之beforOpen代码初始化参数

    birt报表钻取传参方法之beforOpen代码初始化参数

    pyMySQL SQL语句传参问题,单个参数或多个参数说明

    本篇文章主要探讨如何在Python中通过pymysql库有效地传递参数到SQL语句中,以避免SQL注入问题并提高代码可读性和可维护性。 首先,我们来看两种常用的传参方式: 1. **单个参数传参**: 使用`%s`作为占位符。例如...

    Angular 页面跳转时传参问题

    在AngularJS应用中,页面之间的跳转和参数传递是一个常见的需求。AngularJS通过uirouter库提供了优雅的方式来管理应用的路由和导航。在这个场景中,我们主要讨论如何在页面跳转时传递参数,并在目标页面中获取这些...

    【ASP.NET编程知识】ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据.docx

    4. 传参问题:在ASP.NET MVC中,将参数传递给AngularJS是一个常见的问题。解决这个问题需要使用$http服务将数据传递给AngularJS控制器。 5. ng-click事件:ng-click事件是AngularJS中的一个指令,用于绑定点击事件...

    面试宝典(必会面试高频-八股文之二).docx

    作者总结了九个坑点和解决方案,涵盖了 axios 的 post 请求问题、路由传参问题、页面缓存问题、Vue 组件动态加载问题、解析后端返回的 map 格式数据问题、更新文件缓存问题、h5 页面打开调试日志问题、获取首页链接...

    L1范数最小化算法matlab代码(修改过可用C调用)

    2、稍微修改了一下函数的接口,解决了用C++调用这个matlab函数时参数传参问题。因为该函数用到了varargin,可变参数传参,而C++参数传递都是固定的。 3、代码我自己亲自用opencv调用过,可以使用。 4、如果不用将...

Global site tag (gtag.js) - Google Analytics