解决Invalid <url-pattern> servletDemo in servlet mapping 问题

  在学习Servlet时,启动tomcat服务时报错日志如下

复制代码
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/servlet]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1119)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/servlet]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
    ... 6 more
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> servletDemo in servlet mapping
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3410)
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3385)
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1438)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1355)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:887)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:387)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5503)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    ... 6 more
复制代码

    检查web.xml配置文件并未发现有哪里配错。

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
 3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       
 5                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 6 
 7   <servlet>
 8           <servlet-name>servletDemo</servlet-name>
 9           <servlet-class>com.xzp.servlet.ServletDemo</servlet-class>
10   </servlet>
11   <servlet-mapping>
12           <servlet-name>servletDemo</servlet-name>
13           <url-pattern>/*</url-pattern>
14   </servlet-mapping>
15   
16 </web-app>
复制代码

    查看Servlet应用程序demo,发现注解@WebServlet的urlPatterns 配置有误。

复制代码
 1 @WebServlet(urlPatterns = "servletDemo")
 2 public class ServletDemo extends HttpServlet {
 3     //初始化方法
 4     @Override
 5     public void init() throws ServletException {
 6         System.out.println("初始化");
 7         super.init();
 8     }
 9     //执行get请求的业务处理
10     @Override
11     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
12         System.out.println("执行get请求");
13         super.doGet(req, resp);
14     }
15     //执行post请求的业务处理
16     @Override
17     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
18         System.out.println("执行post请求");
19         super.doPost(req, resp);
20     }    
21     //销毁
22     @Override
23     public void destroy() {
24         System.out.println("销毁");
25         super.destroy();
26     }
27 }
复制代码

    解决办法:

    @WebServlet(urlPatterns = "servletDemo")   改为   @WebServlet(urlPatterns = "/servletDemo")。
posted @   无虑的小猪  阅读(4778)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
点击右上角即可分享
微信分享提示