Spring MVC部署WebSphere Liberty时所有Spring URL均返回404问题
排查Spring MVC在WebSphere Liberty上的404及JSP访问问题
结合你给出的环境配置(Eclipse Oxygen+WDT、Spring MVC 4.3.14、Java 8、WebSphere Liberty Core 18.0.0.1,启用webProfile-6.0等特性),针对部署后Spring URL全404、JSP访问不完整的问题,给你梳理几个关键排查步骤:
1. 先确认DispatcherServlet的核心配置是否正确
DispatcherServlet是Spring MVC的入口,配置错误直接导致所有Spring URL无法映射:
- 检查
web.xml里的DispatcherServlet映射规则,确保它能覆盖你需要的URL路径,比如最常用的映射到根路径/:<servlet> <servlet-name>springMvcDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMvcDispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> - 如果你用的是注解驱动(比如
@EnableWebMvc),一定要确保DispatcherServlet的上下文配置扫描到了你的Controller类(比如@ComponentScan指定了Controller所在的包)。
2. 查看Liberty日志,确认Spring是否完成初始化
很多时候404是因为Spring上下文根本没启动:
- 打开Liberty服务器的
server/logs/messages.log,搜索关键词:Initializing Spring FrameworkServlet:确认DispatcherServlet是否启动Mapped "{[/your-url],methods=[GET]}":确认Controller的方法是否被正确映射
如果找不到这些日志,要么是web.xml配置有误,要么是Spring依赖缺失,导致初始化失败。
3. 排查Liberty特性与Spring的兼容性冲突
你启用的webProfile-6.0对应Java EE 6(Servlet 3.0、JSP 2.2),和Spring MVC 4.3.14理论上兼容,但要注意几个点:
- jaxrs-1.1特性的影响:如果你的Controller包含REST接口(比如
@RestController),Liberty自带的JAX-RS 1.1可能会和Spring MVC的REST处理逻辑冲突。可以先临时移除jaxrs-1.1特性,重启服务器测试是否解决问题。 - 确认
webProfile-6.0的特性是否覆盖了你需要的功能,不需要的特性尽量关闭,减少冲突可能性。
4. 解决JSP访问不完整的问题
JSP能部分访问说明容器能处理JSP,但Spring的视图解析可能有问题:
- 检查Spring配置里的视图解析器,确保前缀、后缀和JSP文件路径匹配:
比如Controller返回<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean>"home",对应的JSP必须放在/WEB-INF/views/home.jsp位置。 - 避免在JSP中使用JSP 2.2不支持的语法(比如某些EL表达式的新特性),否则会导致页面渲染不完整。
5. 检查依赖是否完整且无冲突
- 确认
WEB-INF/lib下包含所有Spring MVC必需的依赖:spring-webmvc、spring-web、spring-context等,且版本统一为4.3.14,不要混入其他版本的Spring jar包(比如旧版本的spring-core)。 - 用Eclipse WDT的Dependency Explorer查看项目依赖,排查并排除冲突的jar包。
6. 验证web.xml的版本兼容性
确保web.xml的版本和webProfile-6.0匹配(对应Servlet 3.0),根元素配置如下:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
如果web.xml版本是2.5,Servlet 3.0的注解特性(比如@WebServlet)会失效,如果你是用注解注册DispatcherServlet的话,就会导致无法启动。
内容的提问来源于stack exchange,提问作者Doug Breaux
相关产品推荐
相关产品推荐

