сервлеты Java: передача значений переменных URL с пробелами - PullRequest
1 голос
/ 08 мая 2009

Я создаю простой Java-сервлет, который передает категории с помощью переменной URL в другой сервлет.

Например, в следующем коде

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 Ответ

3 голосов
/ 08 мая 2009

Правильное кодирование пространства в URL-адресе% 20, а контейнер веб-приложения заботится о декодировании URL-адреса.

String manufacturer = request.getParameter( "manufacturer" );

Строка manufacturer в вашей программе должна содержать «Adobe Acrobat» (с пробелом). Можете ли вы это проверить (войдя куда-нибудь)?

"select * from products where Manufacturer like '"+ manufacturer + "'"

Также, пожалуйста, используйте переменные связывания. Непосредственная интерполяция параметров запроса (без какой-либо проверки тоже!) В SQL оставляет вас полностью открытыми для атак с использованием SQL-инъекций. Это также плохо сказывается на производительности.

"select * from products where Manufacturer like ? "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...