gpt4 book ai didi

java - 在 Java 中构造带有请求参数的 URL

转载 作者:搜寻专家 更新时间:2023-11-01 01:14:30 38 4
gpt4 key购买 nike

我有一个通过 URL 访问的 servlet,该 URL 中有一些请求参数。现在我需要将用户重定向到另一个页面(从 servlet),但还要附加我从请求中获得的请求参数。这就是我正在做的

    StringBuffer sb=new StringBuffer("/test.jsp");
sb.append( "?" );
Enumeration en = request.getParameterNames();
while( en.hasMoreElements() ){
String paramName = (String) en.nextElement();
sb.append( paramName );
sb.append( "=" );
sb.append(request.getParameter( paramName ));
sb.append("&");
}
String constructedURLWithParams=sb.toString();

但问题是,有一个“&”将被添加到构造的 URL 的末尾。我不想再做一些字符串操作并删除尾随的“&”。你能建议一个更好的方法吗?

最佳答案

这是一个常见的场景。我将稍微简化它以说明一些解决方案:


选项 #1 - 通过更改 StringBuffer 长度删除最后一个字符:

StringBuffer sb = new StringBuffer();
Enumeration en = ...
while (en.hasMoreElements())
sb.append(en.nextElement());
sb.append(",");
}
if (sb.length() > 0) {
sb.setLength(sb.length() - 1);
}
System.err.println(sb.toString());

选项 #2 - 如果缓冲区不为空则添加分隔符

StringBuffer sb = new StringBuffer();
Enumeration en = ...
while (en.hasMoreElements())
if (sb.length() > 0) {
sb.append(",");
}
sb.append(en.nextElement());
}
System.err.println(sb.toString());

选项 #3 - 如果有更多元素则添加分隔符 ...

StringBuffer sb = new StringBuffer();
Enumeration en = ...
while (en.hasMoreElements())
sb.append(en.nextElement());
if (en.hasMoreElements()) {
sb.append(",");
}
}
System.err.println(sb.toString());

选项 #4 - 如果这不是第一次循环则添加分隔符 ...

StringBuffer sb = new StringBuffer();
Enumeration en = ...
boolean first = true;
while (en.hasMoreElements())
if (first) {
first = false;
} else {
sb.append(",");
}
sb.append(en.nextElement());
}
System.err.println(sb.toString());

哪个最好取决于您正在做的事情的精确细节,以及性能的重要性。


我最后要指出的是,在一般情况下组装 URL 和查询字符串时,您需要更加小心。例如,您需要在参数名称和值中正确转义任何非“未保留”(根据 URL 规范)的字符。如果您粗心大意,您最终可能会得到一个用于向您的网站注入(inject) XSS 攻击的载体。

关于java - 在 Java 中构造带有请求参数的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622366/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com