2008-10-31 77 views
1

有沒有什麼辦法可以在不使用scriptlet的情況下在JSP中執行以下等效操作?無腳本JSP

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

我不能簡單地用

,因爲我需要設置內容類型在2個地方(在每一個不同的分支)和JSP編譯器將只允許一個這樣的指令。

此外,我無法編寫兩個單獨的JSP並轉發到servlet中的一個或另一個,因爲發生身份驗證失敗時,容器會觸發JSP。

乾杯, 唐

回答

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

編輯:

如果需要有條件地設置MIME類型,你可以使用

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

顯然,上面是一個小腳本不利於原來的問題。有沒有特別的理由不想使用scriptlet?

更好的方法可能是在servlet中執行分支邏輯並將請求轉發到只處理顯示的JSP。如果內容本身不同,您可以選擇使用兩個單獨的JSP,每個內容類型一個。

+0

對不起,我忘了提到爲什麼我不能使用這個,我已經更新了這個問題 – 2008-10-31 21:40:58

0

文本/簡單響應和文本/ html響應聽起來像是兩個截然不同的響應,幾乎沒什麼共同之處。

創建2個JPS,並在servlet中分支。

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

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開發非常有用。