1

有没有办法在不使用 scriptlet 的情况下在 JSP 中执行以下等效操作?

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

我不能简单地使用

因为我需要在 2 个地方设置内容类型(每个在 a 的不同分支中),而 JSP 编译器将只允许一个这样的指令。

此外,我不能编写两个单独的 JSP 并转发到 servlet 中的一个或另一个,因为当发生身份验证失败时,容器会触发 JSP。

干杯,唐

4

3 回答 3

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

编辑:

如果您需要有条件地设置 MIME 类型,您可以使用

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

显然,上面是一个与原始问题背道而驰的脚本。是否有不想使用 scriptlet 的特殊原因?

更好的方法可能是在 servlet 中执行分支逻辑并将请求转发到仅处理显示的 JSP。如果内容本身不同,您可以选择使用两个单独的 JSP,每个内容类型一个。

于 2008-10-31T21:33:21.097 回答
2

最简单的方法是创建一个可以执行此操作的标记文件标记,然后使用它。

在 WEB-INF/tags 目录中创建文件“setMimeType.tag”。

<%@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 页面是。你可以说我是在扯皮,但我不同意,因为我认为标签文件是放置脚本之类的完美媒介,因为它们在封装和抽象方面提供了很好的一点。此外,唯一的其他解决方案是用 Java 编写自己的 JSP 标记处理程序,这对于像这样简单的事情来说太疯狂了。

需要 JSP 2.0,但我发现 JSP 标记文件是 JSP 开发的一大福音。

于 2008-10-31T22:13:41.360 回答
0

text/plain-response 和 text/html-response 听起来像是两个非常不同的响应,几乎没有共同点。

创建 2 个 JPS,并改为在 servlet 中分支。

如果它们确实有共同的元素,您仍然可以使用包含。

于 2008-10-31T22:12:19.507 回答