Java Servlet:请求参数包含加号

4
请求参数类似于decrypt?param=5FHjiSJ6NOTmi7/+2tnnkQ==
在servlet中,当我尝试通过String param = request.getParameter("param");打印参数时,我得到了5FHjiSJ6NOTmi7/ 2tnnkQ==。它将字符+转换为空格。如何保留原始参数或如何正确处理字符+
此外,还有哪些字符需要处理?
4个回答

6

您有两个选择

对参数进行URL编码

如果您可以控制生成URL的过程,那么应该选择这种方法。如果不能...

手动检索参数

如果无法改变URL的生成方式(如上),则可以手动检索原始URL。某些方法会为您解码参数。其中之一是 getParameter 。另一方面,getQueryString不会解码字符串。如果您只有几个参数,那么自己解析该值不应该很难。

request.getQueryString();
//?param=5FHjiSJ6NOTmi7/+2tnnkQ==

2

如果您想在URL中使用“+”字符,则需要在生成时对其进行编码。对于“+”,正确的编码是%2b。


抱歉,我看错了,应该是加号而不是空格。我会修正我的答案。 - Mark Thomas

0
虽然这个问题已经有些年头了,但我想记录下我是如何解决我的问题的:一个文件的下载链接是在一个GWT页面中创建的。
com.google.gwt.http.client.URL.encode(finalurl)

用于编码URL。 问题在于我们的一个客户在文件名中使用的“+”符号没有被编码/转义。因此,我必须删除URL.encode(finalurl),并对URL中的每个参数进行编码。

URL.encodePathSegment(fileName)

我知道我的问题与GWT有关,但似乎URLEncoder.encode(string, encoding)也应该仅应用于参数。


0

使用 URLEncoder、URLDecoder 的静态方法对 URL 进行编码和解码。

例如:- 使用以下方式对 URL 参数进行编码

    URLEncoder.encode(url,"UTF-8") 

回到服务器端,使用以下方法解码该参数:

    URLDecoder.decode(url,"UTF-8") 

decode方法返回已解码URL的字符串类型。


5
在Servlet中,不需要对request.getParameter()进行URL解码。容器会自动完成这个过程。 - BalusC
我的错。谢谢BalusC。 - NishM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接