【问题标题】:java servlets : passing url variable values with spacesjava servlets:传递带有空格的url变量值
【发布时间】:2009-05-08 10:11:50
【问题描述】:

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

提前致谢

【问题讨论】:

    标签: java servlets url-rewriting


    【解决方案1】:

    将 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 ? "
    

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2017-12-09
      • 2012-01-04
      • 2013-10-21
      • 2012-01-25
      • 2016-04-08
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多