我在Tomcat的应用程序中使用了Struts2。
我通过将应用程序的静态资源放在server.xml
中设置的webapps之外来为它们提供服务。
现在我必须以同样的方式为JSP提供服务,这超出了我的上下文。有可能吗?或者有什么方法可以做到这一点呢?
发布于 2017-07-04 17:32:14
您可以将JSP放在任何地方,但是web应用程序应该知道资源的位置。
由于您没有指出要存储JSP的确切位置,因此我无法告诉您如何做到这一点。我可以说,在Java语言中,资源是通过URL
检索的,如果您可以将服务器指向存储资源的某个URL,那么您就可以访问这些资源。
如果您需要了解更多关于如何在Java中访问资源的信息,可以阅读Location-Independent Access to Resources。
资源、名称和上下文
资源由一个字符串标识,该字符串由一系列子字符串组成,由斜杠(/)分隔,后跟资源名称。每个子字符串必须是有效的Java标识符。资源名称的格式为shortName
或shortName.extension
。shortName
和extension
都必须是Java标识符。
资源的名称独立于Java实现;特别是,路径分隔符始终是斜杠(/)。但是,Java实现控制如何将资源内容映射到包含实际资源的文件、数据库或其他对象的细节。
资源名称的解释是相对于类加载器实例的。由ClassLoader
类实现的方法执行此解释。
静态资源和动态资源的区别:
browser
不要混淆加载动态资源的方式与加载静态资源的方式相同,因为静态资源可以随响应一起返回,但动态资源应该返回给服务器。
发布于 2017-07-04 16:45:14
JSP被编译成servlet(因此是java类),由JSP容器使用一个相当复杂的生命周期来执行,您可以在这里阅读到这个生命周期:https://www.tutorialspoint.com/jsp/jsp_life_cycle.htm
因此,简短的答案是:不。您不能在web应用程序之外提供JSP页面,因为web应用程序的主要功能之一是编译和执行JSP。
正如另一个答案所建议的那样,您可以使用各种机制访问java资源,但是您总是需要一些看起来像JSP容器的东西来呈现JSP。
如果你想通过像内容分发网络这样的东西为你的应用程序提供更多的服务,你就必须转向一种不同的技术。
您可以考虑创建一个纯粹的客户端应用程序,通过REST、graphql或web套接字与后端通信。
https://stackoverflow.com/questions/44910754
复制相似问题