java servlets:使用空格传递url变量值

时间:2009-05-08 01:54:53

标签: java servlets url-rewriting

我正在构建一个简单的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吗?

提前致谢

1 个答案:

答案 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 ? "