在web.xml中配置核心控制器之后就报错,显示404,注释之后显示页面正常

来源:3-6 核心控制器测试

LOEY_dun

2019-09-09 15:05:02

配置核心控制器

<servlet>
    <servlet-name>Global</servlet-name>
    <servlet-class>com.iss.db.global.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Global</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

核心控制器代码

package com.iss.db.global;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class  DispatcherServlet extends GenericServlet {
    private ApplicationContext context;

    public void init() throws ServletException{
        super.init();
        context=new ClassPathXmlApplicationContext("applicationContext-mybatis.xml");
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletRequest request=(HttpServletRequest) servletRequest;
        HttpServletResponse response=(HttpServletResponse) servletResponse;



        String path=request.getServletPath().substring(1);
        String beanName=null;
        String methodName=null;
        int index=path.indexOf('/');
        if (index != -1){
            beanName=path.substring(0,index)+"Controller";
            methodName=path.substring(index+1,path.indexOf(".do"));
        }else {
            beanName="selfController";
            methodName=path.substring(0,path.indexOf(".do"));
        }

        Object obj=context.getBean(beanName);
        try {
            Method method=obj.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
            method.invoke(obj,request,response);
        }catch (NoSuchMethodException e){
            e.printStackTrace();
        }catch (IllegalAccessException e){
            e.printStackTrace();
        }catch (InvocationTargetException e){
            e.printStackTrace();
        }
    }
}

报错信息

09-Sep-2019 15:02:03.256 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception invoking method [manageApp]

java.lang.IllegalStateException: Error starting child

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)

at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1728)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289)

at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:457)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:406)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289)

at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)

at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)

at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)

at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)

at java.security.AccessController.doPrivileged(Native Method)

at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)

at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)

at sun.rmi.transport.Transport$1.run(Transport.java:200)

at sun.rmi.transport.Transport$1.run(Transport.java:197)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:196)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cake]]

at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)

... 43 more

Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext

at java.lang.Class.getDeclaredFields0(Native Method)

at java.lang.Class.privateGetDeclaredFields(Class.java:2583)

at java.lang.Class.getDeclaredFields(Class.java:1916)

at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:110)

at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:269)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:137)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:69)

at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:330)

at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:778)

at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)

at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5051)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

... 44 more

Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)

... 57 more

09-Sep-2019 15:02:03.258 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception invoking method [createStandardContext]

javax.management.RuntimeOperationsException: Exception invoking method [manageApp]

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:298)

at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:457)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:406)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289)

at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)

at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)

at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)

at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)

at java.security.AccessController.doPrivileged(Native Method)

at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)

at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)

at sun.rmi.transport.Transport$1.run(Transport.java:200)

at sun.rmi.transport.Transport$1.run(Transport.java:197)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:196)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

[2019-09-09 03:02:03,285] Artifact cake:war exploded: Error during artifact deployment. See server log for details.

at java.lang.Thread.run(Thread.java:748)

Caused by: java.lang.IllegalStateException: Error starting child

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)

at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1728)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289)

... 35 more

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cake]]

at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)

... 43 more

Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext

at java.lang.Class.getDeclaredFields0(Native Method)

at java.lang.Class.privateGetDeclaredFields(Class.java:2583)

at java.lang.Class.getDeclaredFields(Class.java:1916)

at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:110)

at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:269)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:137)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:69)

at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:330)

at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:778)

at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)

at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5051)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

... 44 more

Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)

... 57 more

09-Sep-2019 15:02:12.695 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\apache-tomcat-9.0.24\webapps\manager]

09-Sep-2019 15:02:12.789 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\apache-tomcat-9.0.24\webapps\manager] has finished in [94] ms


写回答

3回答

好帮手慕柯南

2019-09-10

同学你好!

同学可能并没有将jar包添加到项目中

1.建议同学在自己本地的maven仓库中找到该jar的文件夹,将.lastUpdated文件删除,比如:

http://img.mukewang.com/climg/5d770df00001fd1707580380.jpg

刷新一下maven,然后rebuild一下项目。测试一下

2.如果以上方案没有解决,同学更改一下引入的spring-context的版本,重新导入maven,测试一下

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


0

好帮手慕柯南

2019-09-09

同学,你好~

  1. 检查一下是否引入了多个版本的Spring版本的依赖,如果有只保留一个即可

  2. 清除一下idea的缓存,

    http://img.mukewang.com/climg/5d76193900013e1d02820408.jpg

祝学习愉快~

0
hOEY_dun
h 还是不可以
h019-09-09
共1条回复

好帮手慕柯南

2019-09-09

同学你好!
1.同学在pom文件中是否添加了一下依赖:

http://img.mukewang.com/climg/5d760c0600017db506280241.jpg

2.在以下位置是否能够看到添加的依赖下载的jar包

http://img.mukewang.com/climg/5d760c4a0001193c04370560.jpg

祝学习愉快~

0
hOEY_dun
h 添加了依赖并且有jar包,也删除过target文件和out文件重启过,但是还是404
h019-09-09
共1条回复

0 学习 · 8263 问题

查看课程