无脚本JSP

发布于 2024-07-08 01:55:35 字数 310 浏览 11 评论 0原文

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

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

我不能简单地使用,

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

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

干杯, 大学教师

Is there any way to do the equivalent of the following in a JSP without using scriptlet?

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

I can't simply use

because I need to set the content-type in 2 places (each in a different branch of a ) and the JSP compiler will only allow one such directive.

Also, I can't write two separate JSPs and forward to one or the other in a servlet because the JSP is triggered by the container when an authentication failure occurs.

Cheers,
Don

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虫児飞 2024-07-15 01:55:35
<%@ page language="java" contentType="text/plain" %>

编辑:

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

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

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

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

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

Edit:

If you need to set the MIME type conditionally, you could use

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

Obviously the above is a scriptlet which goes against the original question. Is there a particular reason for not wanting to use a scriptlet?

A better approach may be to perform the branch logic in a servlet and forward the request to a JSP which only handles the display. You may choose to use two separate JSPs, one for each content type, if the content itself differs.

说不完的你爱 2024-07-15 01:55:35

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

在 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 开发来说是一个巨大的福音。

The easiest way is to create a Tag File tag that can do this, then use that.

Create the file "setMimeType.tag" in your WEB-INF/tags directory.

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

Then, in your JSP add this to the header:

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

Then in your JSP you can do:

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

Yes, the Tag File is NOT script free, but the actual JSP page IS. You can argue I'm splitting hairs, but I'd disagree, as I think tag files are the perfect medium to put things like scripting, as they provide a nice bit on encapsulation and abstraction. Also, the only other solution is to write your own JSP Tag handler in Java, which is insane for something as simple as this.

Requires JSP 2.0, but I find JSP Tag Files to be a great boon to JSP development.

情话墙 2024-07-15 01:55:35

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

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

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

A text/plain-response and a text/html-response sound like two very different responses with very little in common.

Create 2 JPS's, and branch in the servlet in stead.

If they do have common elements, you can still use includes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文