在具體介紹之前,先來說下問題產生的具體場景,以便大家快速鎖定問題,具體問題具體分析。
首先指明後臺應用的是spring框架,攔截的是html請求,返回的是jsp頁面。
在Spring 的spring-servlet.xml配置中,有一項關於請求和響應路徑的選擇配置,代碼如下:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp"></property>
</bean>
而問題就出在這裏,因爲要使用的iframe標籤裏面的src屬性所指定的路徑爲項目工程的根目錄下(或者項目根目錄下的其他可訪問目錄,以下統稱根目錄),但是上方prefix屬性配置中的路徑是iframe 標籤的src屬性無法訪問到。
但是相關的業務邏輯處理後的視圖都需要轉到prefix屬性配置下的路徑中,而iframe恰恰要引用已經業務邏輯處理後的視圖,如何解決這個問題呢?
解決辦法:
叫做遠交近攻。對於iframe的src只能訪問項目的根目錄.而根目錄下的頁面也可發出業務請求,那就利用根目錄下的頁面作爲跳板,直接發出業務訪問,返回來的視圖即是iframe所需要的業務邏輯已經處理好的視圖。示例如下:
<iframe src="a.jsp" width="!00%" height="100%" frameborder="0"
scrolling="auto" name="MainFrame"> </iframe>
其中,a.jsp文件就是在項目根目錄下的頁面,在這個頁面裏面只需要寫入以下代碼即可
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<% response.sendRedirect(path+"/a.html");%>.
a.html就是你發出的業務請求路徑,在後臺處理完成後返回的頁面指定爲prefix屬性下的視圖即可。
問題:用這種方法完全滿足要求,但是這種方法返回的業務邏輯處理過後的視圖是iframe所在的位置,那麼如何將返回的視圖顯示在新的窗口中,而不只是iframe所處的位置呢?
小弟剛接觸不久,說的不對的地方還請各位糾正,在下虛心接受