2009-12-07 2 views
1

Так что у меня большая длинная строка запроса, который может быть либо ...сервлетов проверка PARAMS

// URL = г & Surl = у & времени = г & Кодека = A264 & acodec = mp3 & ширин = 400x100 или // URL = г & Surl = у & время = г & optlevel = ш

Im используя request.getQueryString ("URL"), чтобы проверить, если а) в достаточном количестве есть и б) убедитесь, что его не ноль. Все это приводит к большому беспорядочному набору операторов if. Мне просто интересно, есть ли лучший способ сделать это.

пример ..

if(request.getParameter("originalURL") != null && 
     request.getParameter("originalURL").equals("") && ................) 

Спасибо, ребята

ответ

3

Конечно, просто рефакторинг дублированный кода в методы или использовать в существующих рамках.

Базовый пример стартового реорганизованным кода:

String field1 = getField(request, "field1", true); 
String field2 = getField(request, "field2", true); 
String field3 = getField(request, "field3", false); 

... 

public static String getField(HttpServletRequest request, String fieldName, boolean required) throws ValidatorException { 
    String fieldValue = request.getParameter(fieldName); 
    if (fieldValue == null || fieldValue.trim().isEmpty()) { 
     if (required) { 
      throw new ValidatorException("Field is required"); 
     } else { 
      fieldValue = null; // Make empty string null so that you don't need to hassle with equals("") afterwards. 
     } 
    } 
    return fieldValue; 
} 

Вы, конечно, можете пойти дальше и принять существующую структуру MVC с проверкой (и преобразования) возможностей, таких как Sun JSF или Apache Struts.

+0

Я согласен с тем, что дублированный код используется в методах. Тем не менее, мне не нравится передавать логические аргументы, они часто просто означают, что метод делает больше, чем одно, и что метод действительно должен быть разделен на 2 метода (например, 'getField()' и 'getRequiredField()'). Это совет Чикаго Кода Роберта К. Мартина № 12: Исключение логических аргументов (http://www.informit.com/articles/article.aspx?p=1392524). –

+0

Несомненно, это просто базовый пример. В реальности я бы разделил их на 3 метода. Метод, делающий логическое быть приватным. В противном случае существует только дублирование кода. – BalusC

+0

@BalusC просто интересно, что вы имели в виду под номером fieldValue = null; // Make empty string null so that you don't need to hassle with equals("") afterwards. wmitchell

0
if("something".equals(request.getParameter("originalURL"))) 

Нет необходимости нулевых проверок, потому что равно всегда будет возвращать ложь, если передать нуль, как atribute

+0

Если вы хотите использовать это значение, а не сравнивать его с определенными ожидаемыми значениями, вам нужна нулевая проверка. – djna

1

рамочные, такие как JSF и Struts предлагают более привлекательные абстракции для обработки запросов. Когда я работаю с сырым API, Servlet я использую небольшую утилиту библиотеку, чтобы иметь дело с этим, а также разбор Интса и дату и т.д.

getStringParam(request, "originalUrl") {} 

, который будет бросать исключение, если пары не найден, или чаще Я использую varient, который обеспечивает значение по умолчанию, если пары отсутствуют:

getStringParam (request, "origanlUrl", "http://someusefulDefault") {} 

getIntParam(request, "howManyRivers", 93); 
1

Я не знаю, используете ли вы какую-либо фреймворк, но, как упоминалось выше, большинство из них предоставляют служебные классы для этой цели. Если вы этого не сделаете, вы должны создать такой класс.

Лично мне нравится Spring ServletRequestUtils, который предоставляет несколько сильных типизированных статических методов для получения параметров из запроса, позволяя резервные значения и проверку требуемых параметров. Если бы мне пришлось кодировать что-то эквивалентное (вздох), я бы подражал этому классу.

Смежные вопросы