有沒有什麼辦法可以在不使用scriptlet的情況下在JSP中執行以下等效操作?無腳本JSP
<% response.setContentType("text/plain"); %>
我不能簡單地用
,因爲我需要設置內容類型在2個地方(在每一個不同的分支)和JSP編譯器將只允許一個這樣的指令。
此外,我無法編寫兩個單獨的JSP並轉發到servlet中的一個或另一個,因爲發生身份驗證失敗時,容器會觸發JSP。
乾杯, 唐
有沒有什麼辦法可以在不使用scriptlet的情況下在JSP中執行以下等效操作?無腳本JSP
<% response.setContentType("text/plain"); %>
我不能簡單地用
,因爲我需要設置內容類型在2個地方(在每一個不同的分支)和JSP編譯器將只允許一個這樣的指令。
此外,我無法編寫兩個單獨的JSP並轉發到servlet中的一個或另一個,因爲發生身份驗證失敗時,容器會觸發JSP。
乾杯, 唐
<%@ page language="java" contentType="text/plain" %>
編輯:
如果需要有條件地設置MIME類型,你可以使用
<%
if(branch condition) {
response.setContentType("text/plain");
} else {
response.setContentType("text/html");
}
%>
顯然,上面是一個小腳本不利於原來的問題。有沒有特別的理由不想使用scriptlet?
更好的方法可能是在servlet中執行分支邏輯並將請求轉發到只處理顯示的JSP。如果內容本身不同,您可以選擇使用兩個單獨的JSP,每個內容類型一個。
文本/簡單響應和文本/ html響應聽起來像是兩個截然不同的響應,幾乎沒什麼共同之處。
創建2個JPS,並在servlet中分支。
如果他們有共同的元素,你仍然可以使用包括。
最簡單的方法是創建一個可以做到這一點的標籤文件標籤,然後使用它。
在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開發非常有用。
對不起,我忘了提到爲什麼我不能使用這個,我已經更新了這個問題 – 2008-10-31 21:40:58