我正在构建一个简单的java Servlet,它使用URL变量将类别传递到另一个Servlet中。
例如,在以下代码中
ResultSet rs = qw.DBquery("select distinct manufacturer from Products order by manufacturer asc");
try {
while (rs.next()) {
table+= "<tr><td><a href=\"getItems?manufacturer="
+ rs.getString("Manufacturer") + "\">"
+ rs.getString("Manufacturer") + "</a></td></tr>\n";
}
}
其输出包括:
Adobe
Adobe Acrobat
IBM
IBM - Workstations
如果我点击一个,链接将转到URL:
http://localhost/getItems?getItems?manufacturer=Adobe%20Acrobat
然而,当我得到制造商变量及其值
时String manufacturer = request.getParameter( "manufacturer" );
ResultSet rs1 = qw.DBquery("select * from products where Manufacturer like '"
+ manufacturer + "'");
查询输出失败,如果制造商的值中有空格,则不会产生任何内容。有关如何将此转换回来的任何想法或解决方法?我需要做某种urldecode吗?
提前致谢
答案 0 :(得分:3)
URL中空格的编码为%20是正确的,Web应用程序容器负责URL解码。
String manufacturer = request.getParameter( "manufacturer" );
程序中的字符串manufacturer
因此应包含“Adobe Acrobat”(带空格)。你可以验证(通过将其记录到某个地方)吗?
"select * from products where Manufacturer like '"+ manufacturer + "'"
另外,请使用绑定变量。 直接将查询参数(也没有任何验证!)内插到SQL中会让您完全接受SQL注入攻击。这对性能也不利。
"select * from products where Manufacturer like ? "