有没有办法在不使用scriptlet的情况下在JSP中执行以下等效操作?
<% response.setContentType("text/plain"); %>
我不能简单地使用
因为我需要在2个位置设置内容类型(每个位于a的不同分支中),JSP编译器只允许一个这样的指令。
此外,我无法编写两个单独的JSP并转发到servlet中的一个或另一个,因为在发生身份验证失败时,容器会触发JSP。
干杯, 唐
答案 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中进行分支。
如果他们确实有共同元素,您仍然可以使用包含。