创建SpringMVC项目(xml带web.xml方式)
好久没碰过SpringMVC的项目了,都是SpringBoot。
打开个SpringMVC的demo项目,怎么也跑不起来。。。搞了半天,这里记录一下。防止下次犯同样的错误。
Servlet容器
下个apache-tomcat,解压到特定目录即可。
注意,java环境是java8以及以下版本,servlet对应的包名是javax.servlet,适配tomcat9以及以下版本。java9及以上,由于版权等原因,servlet对应的包名改为jakarta.servlet,适配tomcat10及以上版本。
对于idea ide环境,edit configurations -》 ”+“添加配置 -》”Tomcat Server“ -》local -》 找到下载的tomcat解压目录-》deployment -》”+“选择artifact 或另一个解压目录映射都可以”
SpringMVC项目
本来基本项目骨架是按这个demo项目来的: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-example/nacos-spring-config-example
结果有坑,index页面可以打开,但是访问接口报:HTTP状态 404 – 未找到 (描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。)
找了半天,要么是tomcat的问题,要么是Spring没扫描到。参考这个:https://cloud.tencent.com/developer/article/1407574 ,打断点org.springframework.web.servlet.handler.AbstractUrlHandlerMapping#lookupHandler,没执行到,最终定位倒是Spring没扫描到。
然后看控制台报错,提示WEB-INF/applicationContext.xml没找到. spring配置也不是这个啊。为什么调了默认的这个呢。
进一步定位问题,在webapp/WEB-INF/web.xml。
webapp/WEB-INF/web.xml要改为如下内容 (也可以参考这个的说明:https://blog.csdn.net/u010796790/article/details/52098258,需要补listener的配置,补context-param关于contextConfigLocation的配置。)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true" version="3.0">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- <param-value>classpath:spring/applicationContext.xml</param-value>-->
<param-value>WEB-INF/dispatcherServlet-servlet.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/dispatcherServlet-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
webapp/WEB-INF/ dispatcherServlet-servlet.xml倒是没啥问题
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"
default-autowire="byName">
<!-- Spring MVC Annotation-Driven -->
<mvc:annotation-driven/>
<!-- Spring Context Annotation-Driven -->
<context:annotation-config/>
<context:component-scan base-package="com.alibaba.nacos.example.spring"/>
</beans>
成功启动。
发表回复