JSP, включая частный сервлет - PullRequest
1 голос
/ 13 декабря 2011

У меня есть сервлет, который отвечает на URL, а затем перенаправляет его в JSP в типичном шаблоне MVC.

Многие страницы имеют один и тот же заголовок, поэтому в JSP есть включение в head.jsp

head.jsp находится внутри WEB-INF, поэтому к нему нельзя получить прямой доступ.

Теперь я обнаружил, что мне нужно добавить немного контроля над головой. Вместо того, чтобы пересылать в WEB-INF / head.jsp и помещать скриптлеты, я бы хотел вместо этого переслать сервлету.

Как я могу перенаправить из JSP на сервлет без привязки этого сервлета к URL, поскольку я не хочу предоставлять прямой доступ к этому сервлету.

Или, другими словами, существует ли сервлет-эквивалент WEB-INF, чтобы скрыть его от прямого доступа? Таким образом, сервлет может быть вызван только через include?

1 Ответ

1 голос
/ 13 декабря 2011

Вместо пересылки в WEB-INF / head.jsp и помещения скриплетов, я бы хотел вместо этого переслать сервлету.

Это действительно возможно сделать (используя <jsp:include> или небольшой скриптлет, который отправляет), но я не уверен, действительно ли это лучший подход.Сервлет будет либо писать напрямую в ответ, либо помещать в область запроса некоторые данные, которые JSP сможет получить позже.

Запись непосредственно в ответ сегодня немного спорна, и для другого подхода, который вы не используете.Сервлет вообще не нужен.

Идиоматическим способом является использование некоторого вспомогательного компонента, содержащего логику.Оригинальный сервлет, который вы упомянули, может поместить этот bean-компонент в область запроса или использовать тег <jsp:usebean>.Ссылка на данные, подготовленные компонентом-помощником, с помощью языка выражений или очень простых скриптлетов.

Таким образом, сервлет может быть вызван только через include?

Если вы все еще хотите перейтина этом пути может быть возможность защитить сервлет за ролью, а затем дать head.jsp роль run-as в web.xml:

<servlet>
    <servlet-name>headInclude</servlet-name>
    <jsp-file>/WEB-INF/head.jsp</jsp-file>
    <run-as>
        <role-name>SYSTEM</role-name>
    </run-as>
</servlet>

отказ от ответственности: я никогда не пробовалэто сам, просто указывая в возможном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...