代码之家  ›  专栏  ›  技术社区  ›  Dónal

无脚本jsp

  •  1
  • Dónal  · 技术社区  · 16 年前

    在一个jsp中,没有使用scriptlet,有没有什么方法可以实现以下等价的功能?

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

    我不能简单地使用

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

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

    干杯, 唐

    3 回复  |  直到 16 年前
        1
  •  2
  •   AlexJReid    16 年前
    <%@ page language="java" contentType="text/plain" %>
    

    编辑:

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

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

    很明显,上面的脚本违背了最初的问题。不想使用scriptlet有什么特别的原因吗?

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

        2
  •  2
  •   Will Hartung    16 年前

    最简单的方法是创建一个标记文件标记,可以这样做,然后使用。

    在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页面是。你可以说我是在胡扯,但我不同意,因为我认为TAG文件是把脚本之类的东西放在最合适的介质,因为它们提供了一个很好的封装和抽象。另外,唯一的解决方案是在Java中编写自己的JSP标记处理程序,这对于像这样简单的东西来说是疯狂的。

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

        3
  •  0
  •   myplacedk    16 年前

    文本/纯文本响应和文本/HTML响应听起来像两个非常不同的响应,几乎没有共同点。

    创建2个jps,并在servlet中分支。

    如果他们有共同的元素,你仍然可以使用包含。