我正在尝试在jsp中使用encodeURL
方法来编码带有“%”符号的网址。
response.encodeURL(/page1/page2/view.jsp?name=Population of 91% in this place)
只要单击该按钮,就会显示"The website cannot display the page"
错误。
但是当您手动将"%"
符号更改为此"%25"
“Population of 91%25 in this place
时,会显示正确的页面。
此外,只要最后放置"%"
符号,就像这个“In this place Population of 91%
”一样,页面就会正确显示,但我注意到在地址栏中它仍然显示为"%"
和不是"%25"
而是仍在工作。
当我四处搜索时,它只提到使用encodeURI() & encodeURIComponent().
即使有encodeURL
符号,您是否可以在使用"%"
方法正确显示页面的同时向我建议解决方案。我应该使用replace()
或为什么encodeURL()
方法无法正常工作?
答案 0 :(得分:1)
考虑使用URLEncoder和URLDecoder。
答案 1 :(得分:1)
HttpServletResponse#encodeURL()
方法实际上有一个误导性的名称。阅读javadoc以了解它的确实作用(必要时附加jsessionid
)。另请参阅In the context of Java Servlet what is the difference between URL Rewriting and Forwarding?以了解JSP / Servlet世界中的ambiguties。
在servlet方面,您需要URLEncoder#encode()
代替:
String url = "/page1/page2/view.jsp?name=" + URLEncoder.encode("Population of 91% in this place", "UTF-8");
// ...
但是,在JSP方面,您需要使用JSTL <c:url>
标记(avoid Java code in JSP!):
<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:url var="url" value="/page1/page2/view.jsp">
<c:param name="name" value="Population of 91% in this place" />
</c:url>
<a href="${url}">link</a>
<form action="${url}">
<input type="submit" value="button" />
</form>
答案 2 :(得分:1)
您的代码的结果是:
%2Fpage1%2Fpage2%2Fview.jsp%3Fname%3DPopulation%20of%2091%25%20in%20this%20place
您应该只编码查询字符串值。
... = "/page1/page2/view.jsp?name=" + URLEncoder.encode('Population of 91% in this place');
答案 3 :(得分:0)
在您的示例中,您可以使用c:url
和c:param
代码:
<c:url value="/page1/page2/view.jsp">
<c:param name="name" value="Population of 91% in this place" />
</c:url>
特别是,c:param
标记会对value属性进行url编码。我刚遇到一种情况,我需要生成一个带有查询字符串的URL,该查询字符串包含以井号开头的值。如果没有url-encoding,则浏览器会将井号解释为锚点部分的开头。我添加了c:param
标记,并对井号进行了编码,允许在跟踪链接时出现预期的行为。