2017-09-22 57 views
2

我在我的應用程序中使用包含jspInit()方法初始化一些資源的jsp文件。 我試圖在jsp文件的init方法中獲取協議(http/https/ftp),以使用http/https連接啓用應用程序url。如何在jspInit()方法中獲取模式(http/https)?

代碼:

<%!public void jspInit() { 
     String realPath = getServletContext().getRealPath("/"); 
     ServletContext servletContext = getServletConfig().getServletContext(); 
     // how to get ServletRequest like servletcontext, So that we can get protocol from servletRequest. 

    } 
%> 

我見過的ServletRequest接口有 'getScheme()' 方法,但我不知道如何獲得的ServletRequest在jspInit()。

任何機構能告訴我如何在jsp中獲取模式嗎?

+0

*您無法*在jspInit方法中獲取_request scheme_,因爲沒有請求從中獲取requestUri。 – gtosto

+0

謝謝@gtosto,請問我知道有沒有在jspInit()中獲取模式的方法。 –

+0

我很抱歉,但實際上沒有辦法在該方法中獲取請求方案。我試圖寫一個更具說服力的答案。我希望它有幫助。 – gtosto

回答

0

簡短的回答是:有沒有辦法讓在一個jsp的初始化時間的URI模式(即在jspInit方法)。

由於沒有請求,因此無法在jspInit方法中獲取請求的架構。 方法ServletRequest.getSchema() infact從客戶端用來向您的jsp頁面/ servlet發出請求的url中提取方案部分。 當jsp被初始化時,容器調用jspInit方法,並且這在servlet生命週期中發生一次。 因此,當調用jspInit方法時,沒有實際的請求從中獲取該方案。

如果您需要「使用http/https連接啓用應用程序url」,則jspInit不是正確的位置。例如,如果您使用的是Apache Tomcat,請參閱本教程(configure-tomcat-to-support-ssl-or-https)或this ssl-howto以瞭解您需要執行的步驟。

0

從jspInit()訪問請求沒有意義。因爲只有在JSP編譯期間纔會調用它。

您應該從請求中讀取Scheme。這是用於從JSP中的請求中獲取Scheme的EL。

<c:if test="${pageContext.request.scheme eq 'https'}"> 
//this section will be exectured only if it is Https request. 
</c:if> 
+0

謝謝@Ramesh,是隱式對象不能被jspInit()訪問。這同樣適用於ServletContextListener嗎? –

+0

是的。它也適用於那裏, –

相關問題