Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Параметры запроса и их значения в сервлете


Автор: tolet 24.10.2008, 07:37
Добрый день всем!

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

Ошибку выдает строчка: if (menulevel3.equals(null)) {...} и дальше обработка если условие верно.

Ну и собственно вопрос - в чем ошибка? У меня есть предположение, что при обработке запроса и присвоению переменной menulevel3 параметра из запроса происходит что-то, что я не учел.

Заранее благодарен за ответ.

Автор: admin82 24.10.2008, 10:26
Ну если menulevel3 у тебя как раз тот параметр, которого нет, то не на чем и equals вызывать, NPE получаешь.
Надо
 
Код

if (menulevel3 == null){
//
}

Автор: tolet 24.10.2008, 10:59
admin82, пробовал я такой вариант - не проходит

Автор: necromancer 24.10.2008, 11:05
иногда посмотришь посмотришь на все это и улыбнешься =)
что бы господа эхперты могли дать вменяемый и полный ответ необходимо:
1 предоставить кусок (или весь) код
2 предоставить стректрейс

как получить стектрейс в простейшем случае:
Код

try {
   ...  ваш код
} catch(Exception e) {
    e.printStackTrace();
}


в результате при возниконовении ошибки на консоль будет выведен стектрейс.

Автор: admin82 24.10.2008, 12:15
Ну если включить телепатию, то можно еще предложить
Код

if (menulevel3 == null || ((String)menulevel3).trim()).equals("")){

}

Автор: skhilkov 24.10.2008, 13:42
tolet, 
Цитата

Ну и собственно вопрос - в чем ошибка? 


Вот это бы я тоже хотел знать.... предполагаю что admin82 был прав, тогда
Цитата

admin82, пробовал я такой вариант - не проходит

что не проходит и как?

Автор: tolet 24.10.2008, 13:58
Я обошел данную ошибку, но... достаточно кривым способом - я просто задал в URL этот параметр, но присвоил ему значение 0, если другого web-приложение не дает ему. Но вопрос у меня все равно остается - ошибка в сравнении чем вызвана? Я предполагаю, что когда этот параметр приходит из URL (вернее не приходит вообще - т.е. попросту отсутствует), то ему присваивается значение отличное от null, но тогда вопрос - какое? Собственно говоря, если бы было присвоено значение null, то даже мое условие было бы верно. Или я не прав?

Автор: admin82 24.10.2008, 14:02
Жесть. 
Кода мы так и не увидели, отладчик у человека тоже отсутствует. 
Ну что же, пусть будет так

Автор: skhilkov 25.10.2008, 06:29
tolet, 
1) Код в студию!
2) 
Цитата

если бы было присвоено значение null, то даже мое условие было бы верно. Или я не прав? 

Не прав, так как пытаешься вызвать метод у объекта которого нет.

Автор: tolet 25.10.2008, 07:37
Вот выжимки из кода:

Код

    private String menulevel1;
    private String menulevel2;
    private String menulevel3;
    private String article;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        menulevel1 = request.getParameter("ml1");
        menulevel2 = request.getParameter("ml2");
        menulevel3 = request.getParameter("ml3");
        article = request.getParameter("artcl");
        //Делаем другие действия
    }

    private void setEnMainContent()
    {
        
       if (menulevel3.equals(null))
       {
           //Делаем другие действия
       }
    }

Автор: skhilkov 25.10.2008, 07:44
tolet, 
Код это уже хорошо. Но судя по коду тебе должно 100% подойти решение admin82. 
Напиши почему оно тебе не подходит? Какая ошибка вываливается? Кстати не видно где у тебя вызывается метод в котором происходит проверка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)