Jersey 的 ServletContainer init 方法可以被覆盖吗?
Can Jersey's ServletContainer init method be overridden?
在 Java (Jersey/Maven) 中编写 Web 服务。我想构建一个 class 来在部署应用程序之前构建多个数据库——因为它的所有资源都依赖于这些数据库。虽然有 Jersey 的 ServletContainer
源代码的文本表示,但它已经被编译成字节码并打包到 jar 中,因此无法编辑。解决方案是否像在我的代码中声明 ServletContainer
class 的实例并覆盖那里的 init 方法一样简单?
您可以在 ResourceConfig
中完成所有初始化。
package org.foo;
public class AppConfig extends ResourceConfig {
public AppConfig() {
// initialize here
packages("the.packages.to.scan");
}
}
并且您可以在 web.xml
中声明它
<web-app>
<servlet>
<servlet-name>MyApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.foo.AppConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyApplication</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
有关其他部署选项,请参阅 Servlet-based Deployment
在 Java (Jersey/Maven) 中编写 Web 服务。我想构建一个 class 来在部署应用程序之前构建多个数据库——因为它的所有资源都依赖于这些数据库。虽然有 Jersey 的 ServletContainer
源代码的文本表示,但它已经被编译成字节码并打包到 jar 中,因此无法编辑。解决方案是否像在我的代码中声明 ServletContainer
class 的实例并覆盖那里的 init 方法一样简单?
您可以在 ResourceConfig
中完成所有初始化。
package org.foo;
public class AppConfig extends ResourceConfig {
public AppConfig() {
// initialize here
packages("the.packages.to.scan");
}
}
并且您可以在 web.xml
中声明它<web-app>
<servlet>
<servlet-name>MyApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.foo.AppConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyApplication</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
有关其他部署选项,请参阅 Servlet-based Deployment