You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个Web应用能否共享同一Java项目中的Servlet代码

方案可行性结论

该方案完全可行,不需要在fr、en两个Web项目中重复编写相同的Servlet代码。

实现原理

web.xml中<servlet-class>配置项的作用,是告知Servlet容器(Tomcat/Jetty等)当前Web应用启动时,需要加载对应全限定名的类来实例化Servlet,规则只要求这个类存在于当前Web应用的类加载路径中,并不强制要求类的源码必须写在当前Web项目自身的目录下。

你给出的配置写法本身是正确的:

<servlet>
  <description></description>
  <display-name>AServlet</display-name>
  <servlet-name>AServlet</servlet-name>
  <servlet-class>com.projp.AServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>AServlet</servlet-name>
  <url-pattern>/a_servlet</url-pattern>
</servlet-mapping>
必要前置条件

要让配置正常生效,只需要保证Java项目P的编译输出能被fr、en两个Web应用的类加载器扫描到即可,常规操作有两种:

  • 把项目P打包为jar包,分别放到fr、en两个Web应用的WEB-INF/lib目录下
  • 如果使用Maven/Gradle等构建工具,直接将项目P声明为fr、en两个项目的编译依赖,构建时工具会自动将P的产物拷贝到对应Web应用的依赖目录
注意事项

虽然fr、en两个应用引用的是同一个Servlet类,但二者的运行态是完全隔离的:

  • 两个独立Web应用持有各自独立的类加载器、独立的Servlet上下文
  • 两个应用中初始化生成的AServlet实例互不干扰,各自的初始化参数、请求处理、成员变量数据完全隔离,不会出现跨应用的数据串扰问题

内容的提问来源于stack exchange,提问作者Léa Massiot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:24:24