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