бесскриптовый JSP

Есть ли способ сделать эквивалент следующего в JSP без использования скриптлета?

<% response.setContentType("text/plain");  %>

я не могу просто использовать

потому что мне нужно установить тип содержимого в 2 местах (каждое в другой ветке a ), и компилятор JSP разрешит только одну такую ​​директиву.

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

Привет, Дон


person Dónal    schedule 31.10.2008    source источник


Ответы (3)


<%@ page language="java" contentType="text/plain" %>

Редактировать:

Если вам нужно установить тип MIME условно, вы можете использовать

<% 
if( branch condition ) { 
  response.setContentType("text/plain");
} else {
  response.setContentType("text/html"); 
}
%>

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

Лучшим подходом может быть выполнение логики ветвления в сервлете и перенаправление запроса в JSP, который обрабатывает только отображение. Вы можете использовать две отдельные JSP, по одной для каждого типа контента, если сам контент различается.

person AlexJReid    schedule 31.10.2008
comment
Извините, я забыл упомянуть, почему я не могу это использовать, я обновил вопрос. - person Dónal; 01.11.2008
comment
Нет особых причин не использовать скриптлет, за исключением того факта, что это считается плохой практикой. - person Dónal; 01.11.2008

Самый простой способ — создать тег файла тегов, который может это сделать, а затем использовать его.

Создайте файл setMimeType.tag в каталоге WEB-INF/tags.

<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<%@ attribute name="mimeType" required="true"%>
<%
    response.setContentType(jspContext.findAttribute("mimeType"));
%>

Затем в вашем JSP добавьте это в заголовок:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

Затем в вашем JSP вы можете сделать:

<t:setMimeType mimeType="text/plain"/>

Да, файл тегов НЕ свободен от сценариев, но фактическая страница JSP ЕСТЬ. Вы можете возразить, что я лукавлю, но я не соглашусь, так как я думаю, что файлы тегов являются идеальным средством для размещения таких вещей, как сценарии, поскольку они обеспечивают хорошую инкапсуляцию и абстракцию. Кроме того, единственное другое решение — написать свой собственный обработчик тегов JSP на Java, что безумие для чего-то такого простого.

Требуется JSP 2.0, но я считаю файлы тегов JSP большим подспорьем для разработки JSP.

person Will Hartung    schedule 31.10.2008

Текстовый/обычный ответ и текстовый/html-ответ выглядят как два очень разных ответа с очень небольшим количеством общего.

Вместо этого создайте 2 JPS и ветвитесь в сервлет.

Если у них есть общие элементы, вы все равно можете использовать include.

person myplacedk    schedule 31.10.2008