JSP без сценария - PullRequest
       7

JSP без сценария

1 голос
/ 01 ноября 2008

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

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

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

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

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

Ура, Дон

Ответы [ 3 ]

2 голосов
/ 01 ноября 2008

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

Создайте файл "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.

2 голосов
/ 01 ноября 2008
<%@ page language="java" contentType="text/plain" %>

Edit:

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

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

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

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

0 голосов
/ 01 ноября 2008

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

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

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

...