无脚本的JSP

时间:2008-10-31 21:31:15

标签: jsp scriptlet

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

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

我不能简单地使用

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

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

干杯, 唐

3 个答案:

答案 0 :(得分:2)

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

编辑:

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

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

显然上面是一个违背原始问题的scriptlet。是否有特殊原因不想使用scriptlet?

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

答案 1 :(得分:2)

最简单的方法是创建一个Tag File标签,然后使用它。

在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页面IS。你可以说我分裂了,但我不同意,因为我认为标记文件是编写脚本等内容的理想媒介,因为它们提供了很好的封装和抽象。另外,唯一的另一个解决方案是用Java编写自己的JSP Tag处理程序,这对于像这样简单的事情来说是疯了。

需要JSP 2.0,但我发现JSP标记文件对JSP开发很有帮助。

答案 2 :(得分:0)

text / plain-response和text / html-response声音就像两个非常不同的响应,几乎没有共同之处。

创建2个JPS,然后在servlet中进行分支。

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