替换查询字符串中的“#”而不更改实际值

时间:2010-11-25 17:57:31

标签: jsp

我的JSP中有一个查询字符串:

href='www.me-me.com/index.jsp?application=<%=
  myBean.getApplication().replace("&","\\")
%>&appId=<%=
  myBean.getAppId()
%>'>LINK  

现在我正在使用appID中的index.jsp使用请求对象,并使用appId我从数据库中提取数据以填充页面。

但是当myBean.getApplication返回Application ##1之类的内容时,我的屏幕显示为空白,当然因为查询在遇到"#"后遭到攻击。

我可以使用"#"方法替换replace(),但我发现它不可靠和良好,因为我在index.jsp页面中再次使用请求对象提取该应用程序名称而且更换哈希会让它变得丑陋。那么有没有办法保留"#"

任何其他开箱即用的解决方案都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

JSTL c:urlc:param一起使用。

<c:url var="url" value="http://www.me-me.com/index.jsp">
    <c:param name="application" value="${myBean.application}" />
    <c:param name="appId" value="${myBean.appId}" />
</c:url>

<a href="${url}">LINK</a>

无需为旧式 scriptlet 烦恼。

答案 1 :(得分:0)

对值进行URL编码是正确的做法。

href='www.me-me.com/index.jsp?application=<%=
  URLEncoder.encode(myBean.getApplication(), "UTF-8")
%>&appId=<%=
  URLEncoder.encode(myBean.getAppId(), "UTF-8") 
%>'>LINK 

您可以将任何字符串值作为网址参数传输,但必须对其进行正确编码,否则您的网址会中断,就像您遇到的那样。

你需要一个

<%@ page import="java.net.*" %>
页面中的

语句,因为这是定义URLEncoder的位置。