【发布时间】:2021-07-19 00:33:50
【问题描述】:
我想将现有的 servlet 添加到上下文中,当我使用 (Main.java) 时它可以工作:
Tomcat.addServlet(ctx, "MyServlet", new MyServlet());
ctx.addServletMappingDecoded("/url_pattern", "MyServlet")
但是,我在 servlet 中有注解来映射 url_pattern(MyServlet.java):
@WebServlet(name = "MyServlet", urlPatterns = { "/url_pattern" })
@MultipartConfig(
fileSizeThreshold = 1024 * 1024 * 1, // 1 MB
maxFileSize = 1024 * 1024 * 10, // 10 MB
maxRequestSize = 1024 * 1024 * 100 // 100 MB
)
很遗憾,这些注释不起作用。我想从 Main.java 中删除映射并使用我的 Servlet 注释中的映射。
我使用的是 Tomcat 10.0.0。
Main.java
import java.io.File;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
public class Main {
public static void main(String[] args) throws LifecycleException,
InterruptedException {
Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);
Context ctx = tomcat.addContext("", new File(".").getAbsolutePath());
Tomcat.addServlet(ctx, "MyServlet", new MyServlet());
ctx.setAllowCasualMultipartParsing(true);
ctx.addServletMappingDecoded("/url_pattern", "MyServlet");
tomcat.start();
tomcat.getConnector();
}
}
【问题讨论】:
-
您使用 Servlet 5.0 类和注释 (
jakarta.*) 还是 Servlet 4.0 类 (javax.*)? Tomcat 10 是一个 Servlet 5.0 容器。 -
我使用 jakarta.servlet 5.0 和 jakarta.annotaion 2.0(据我所知,这是最新版本)。 Tomcat 也没有在 web.xml 中看到 Servlet 映射。
-
我还想补充一点,当我从 Eclipse 运行 tomcat 服务器时,这些注释有效,但是当我使用 Main 类(嵌入式 tomcat)时,这些注释不起作用。
-
您可以将
Main课程的内容添加到您的问题中吗?是否调用了Tomcat.addWebapp方法,该方法执行通常的上下文初始化和注释扫描? -
我已经用主课内容编辑了我的问题。我不调用Tomcat.addWebapp,我会再看一遍文档并检查addWebapp方法。
标签: java tomcat servlets annotations catalina