跳到主要内容

部署额外的Servlet 25.02

在ChatGPT中打开

webforJ将所有请求通过WebforjServlet进行路由,该Servlet在web.xml中默认映射到/*。这个Servlet管理组件生命周期、路由和为您的webforJ应用程序提供的UI更新。

在某些情况下,您可能需要在webforJ应用程序旁边部署额外的Servlet:

  • 集成提供自己Servlet的第三方库
  • 实现REST API或Webhooks
  • 处理自定义处理的文件上传
  • 支持基于Servlet的遗留代码

webforJ提供了两种方法来在应用程序旁边部署自定义Servlet:

方法1:重新映射WebforjServlet

这种方法将WebforjServlet/*重新映射到特定路径,例如/ui/*,为自定义Servlet释放URL名称空间。虽然这需要修改web.xml,但它使自定义Servlet直接访问其URL模式,而没有任何代理开销。

<web-app>
<!-- WebforjServlet重新映射以仅处理/ui/* -->
<servlet>
<servlet-name>WebforjServlet</servlet-name>
<servlet-class>com.webforj.servlet.WebforjServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WebforjServlet</servlet-name>
<url-pattern>/ui/*</url-pattern>
</servlet-mapping>

<!-- 带有自己URL模式的自定义Servlet -->
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>com.example.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/hello-world</url-pattern>
</servlet-mapping>
</web-app>

使用此配置:

  • webforJ组件可在/ui/下访问
  • 自定义Servlet处理对/hello-world的请求
  • 无需代理机制 - 直接在Servlet容器路由
Spring Boot配置

当在Spring Boot中使用webforJ时,没有web.xml文件。相反,请在application.properties中配置Servlet映射:

webforj.servlet-mapping=/ui/*

此属性将WebforjServlet从默认的/*重新映射到/ui/*,为您的自定义Servlet释放URL名称空间。不要在值周围包含引号 - 它们将被解释为URL模式的一部分。

方法2:WebforjServlet代理配置

这种方法将WebforjServlet保持在/*并在webforJ.conf中配置自定义Servlet。WebforjServlet拦截所有请求,并将匹配模式代理到您的自定义Servlet。

标准web.xml配置

<servlet>
<servlet-name>WebforjServlet</servlet-name>
<servlet-class>com.webforj.servlet.WebforjServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WebforjServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

<!-- 带有自己URL模式的自定义Servlet -->
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>com.example.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/hello-world</url-pattern>
</servlet-mapping>
</web-app>

webforJ.conf配置

servlets = [
{
name = "hello-world"
class = "com.example.HelloWorldServlet"
}
]

使用此配置:

  • WebforjServlet处理所有请求
  • 请求/hello-world被代理到HelloWorldServlet