2017-09-22 56 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

是的。它也适用于那里, –

相关问题