Может ли два разных сервлетов-диспетчера передавать данные одному и тому же jsp? [Дубликат]

Другим случаем, когда NullReferenceExceptions может случиться, является (неправильное) использование оператора as :

class Book {
    public string Name { get; set; }
}
class Car { }

Car mycar = new Car();
Book mybook = mycar as Book;   // Incompatible conversion --> mybook = null

Console.WriteLine(mybook.Name);   // NullReferenceException

Здесь Book и Car являются несовместимыми типами; a Car не может быть преобразован / передан в Book. Когда этот сбой завершается неудачно, as возвращает null. Используя mybook после этого, вы вызываете NullReferenceException.

В общем случае вы должны использовать cast или as, как показано ниже:

Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:

ComicBook cb = (ComicBook)specificBook;

Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as:

ComicBook cb = specificBook as ComicBook;
if (cb != null) {
   // ...
}

5
задан wasimbhalli 3 February 2011 в 17:57
поделиться

1 ответ

Это двухэтапный процесс:

  1. Получить ServletContext, представляющий web2
  2. Получить RequestDispatcher из этого ServletContext соответствующего to servlet2

Итак, что-то вроде этого изнутри servlet1:

ServletContext web1 = getServletContext();
ServletContext web2 = web1.getContext("/web2");
RequestDispatcher dispatcher = web2.getRequestDispatcher("/servlet2");
dispatcher.forward(request, response);

Существует большое предупреждение обо всем этом - контейнер может не быть настроен для разрешения перекрестной пересылки контекста, поскольку это потенциальный риск для безопасности. Если это так, getContext("web2") вернет null.

8
ответ дан skaffman 24 August 2018 в 19:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: