关于Tomcat一个疑问

我在用外置tomcat进行部署的时候有一个mapper文件出了错,但是由于这个文件不影响项目,我把这个文件删除掉了,但是我发现即使是删除了这个文件,tomcat运行时还是会报这个文件的错误,为什么呀?我已经删除的文件为什么在 war 包解压的 \WEB-INF\classes\com\YYY\XXX\Dao 里面还是会出现?

mapper文件出的什么错?你的删除文件操作,是删除的哪个位置的文件?
一般执行了删除文件后,需要重新打包,重新部署。

我是重新打包并且覆盖了之前的war包,mapper报错这个有点复杂,是这样的:原先是我想在mysql存json数据,mybatis存json数据要用一个typehandler,这个我加上后,发现用不着我之前的存储方式了,于是这个typehandler以及包含json的那个domain我就都没删,留着了,这时候还没什么问题,后来因为需求,我需要用2个数据源,我配置好两个数据源以后,这个就开始报错了,报我在代码里没用过的domain里json字段以及这个domain对应的mapper的错

13-May-2021 10:47:21.298 严重 [main] org.apache.catalina.startup.HostConfig.deployWAR 部署 Web 应用程序 archive [C:\Users\Administrator\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\business_bank.war] 时出错
	java.lang.IllegalStateException: 启动子级时出错
		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.deployWAR(HostConfig.java:978)
		at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848)
		at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
		at java.util.concurrent.FutureTask.run(FutureTask.java:266)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
		at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.util.concurrent.FutureTask.run(FutureTask.java:266)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		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.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
	Caused by: org.apache.catalina.LifecycleException: 无法启动组件[StandardEngine[Catalina2].StandardHost[localhost].StandardContext[/business_bank]]
		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)
		... 37 more
	Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authMenuMapper' defined in file [C:\Users\Administrator\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\business_bank\WEB-INF\classes\com\example\gas\Dao\AuthMenuMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'menus'. It was either not specified and/or could not be found for the javaType (com.alibaba.fastjson.JSONArray) : jdbcType (null) combination.
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
		at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
		at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
		at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
		at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
		at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:874)
		at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
		at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
		at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
		at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
		at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
		at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
		at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:173)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:153)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:95)
		at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5136)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		... 38 more
	Caused by: java.lang.IllegalArgumentException: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'menus'. It was either not specified and/or could not be found for the javaType (com.alibaba.fastjson.JSONArray) : jdbcType (null) combination.
		at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:83)
		at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792)
		... 58 more
	Caused by: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'menus'. It was either not specified and/or could not be found for the javaType (com.alibaba.fastjson.JSONArray) : jdbcType (null) combination.
		at org.apache.ibatis.mapping.ParameterMapping$Builder.validate(ParameterMapping.java:119)
		at org.apache.ibatis.mapping.ParameterMapping$Builder.build(ParameterMapping.java:104)
		at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.buildParameterMapping(SqlSourceBuilder.java:143)
		at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.handleToken(SqlSourceBuilder.java:87)
		at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:77)
		at org.apache.ibatis.builder.SqlSourceBuilder.parse(SqlSourceBuilder.java:50)
		at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:46)
		at org.apache.ibatis.scripting.xmltags.XMLLanguageDriver.createSqlSource(XMLLanguageDriver.java:60)
		at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.buildSqlSourceFromStrings(MapperAnnotationBuilder.java:635)
		at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.buildSqlSource(MapperAnnotationBuilder.java:624)
		at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.lambda$parseStatement$2(MapperAnnotationBuilder.java:301)
		at java.util.Optional.ifPresent(Optional.java:159)
		at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement(MapperAnnotationBuilder.java:300)
		at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:132)
		at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:72)
		at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:819)
		at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:80)
		... 61 more

你想通过TypeHandler实现JSON的自编解码。可以试试看这个方式。

大佬,我还有个问题,我使用外置tomcat部署项目,前后端分离开放在两个service里面了(tomcat的server.xml文件里写了两个service:Catalina1和Catalina2),现在前端文件访问后端的api所用的路径我试过localhost,127.0.0.1,在外网访问都不行,这是为啥?只有当服务器把一个端口开放给外网,然后访问api换成服务器外网地址+端口才能正常访问,有没有不开放后端端口的方法呀?

讲道理前后端都部署在同一个tomcat上的不同服务而已,都是在一个服务器上,前端文件里向后端发请求相当于是自己对自己发请求,为啥localhost和127.0.0.1行不通呢?