You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC集成Jetty 8报错:无HTTP请求URI映射问题求助

这个问题我之前在Spring MVC搭配Jetty开发的时候也踩过坑!提示里说DispatcherServlet(名字是appServlet)找不到/testJetty/WEB-INF/views/index.jsp的请求映射,本质是视图解析后的路径和请求处理流程没对上,咱们一步步排查解决:

核心问题拆解

这个WARN的本质是:当你访问http://localhost:9090/testJetty/index时,Spring的Controller已经处理了请求并返回了视图名,但DispatcherServlet在尝试解析视图并转发请求时,找不到对应的处理规则——要么是视图解析器配置错了,要么是请求映射的范围出了问题。

排查&解决方案

1. 先检查Spring视图解析器的配置

打开你的Spring Servlet配置文件(比如appServlet-servlet.xml或者spring-mvc.xml),找InternalResourceViewResolver的配置,这是Spring用来解析JSP视图的核心Bean,正确的配置应该是这样的:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前缀必须以/开头,对应web应用根目录下的WEB-INF/views/ -->
    <property name="prefix" value="/WEB-INF/views/"/>
    <!-- 后缀指定视图文件的扩展名 -->
    <property name="suffix" value=".jsp"/>
</bean>

踩坑点:如果你的prefix没加开头的/,比如写成WEB-INF/views/,那解析后的路径会变成/testJetty/WEB-INF/views/WEB-INF/views/index.jsp,肯定找不到文件!

2. 确认Controller的请求映射是否正确

你的Controller类里处理/index请求的方法,返回的视图名要和配置匹配,比如:

@Controller
public class IndexController {
    // 映射到/testJetty/index请求(因为上下文路径是testJetty)
    @RequestMapping("/index")
    public String showIndexPage() {
        // 只需要返回视图名"index",视图解析器会自动拼接成/WEB-INF/views/index.jsp
        return "index";
    }
}

踩坑点:别在返回值里加.jsp或者完整路径,比如return "/WEB-INF/views/index.jsp",这样会绕开视图解析器,导致DispatcherServlet直接去处理这个JSP请求,而JSP是由Jetty的JspServlet负责的,自然会报找不到映射。

3. 检查web.xml里的DispatcherServlet映射

打开你的web.xml,确认appServlet的<url-pattern>配置正确,这是很多人容易搞错的地方:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <!-- 用/表示处理所有非JSP、非静态资源的请求 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

踩坑点:如果用了/*作为url-pattern,DispatcherServlet会处理所有请求,包括JSP,而Jetty本身的JspServlet就没法处理JSP文件了,就会出现找不到映射的错误。

4. 确认Jetty的上下文路径配置

你访问的是http://localhost:9090/testJetty/index,说明你的应用上下文路径是/testJetty,要确保:

  • 在RAD的Jetty服务器部署配置里,上下文路径设置的是/testJetty(别写成空或者其他路径)
  • 所有的请求映射、视图路径都是相对于这个上下文路径的,不要硬写绝对路径

5. 最后确认JSP文件的实际位置

检查你的index.jsp是不是真的放在WEB-INF/views/目录下,注意路径大小写(Jetty在Linux/macOS上是区分大小写的),比如别把views写成Views,index.jsp写成Index.jsp。

快速验证小技巧

如果上面的配置都没问题,你可以试试直接访问http://localhost:9090/testJetty/WEB-INF/views/index.jsp:

  • 如果返回403:说明文件存在,但WEB-INF目录下的文件不能直接访问,这时候问题肯定出在Spring的映射或视图解析配置上
  • 如果返回404:说明文件路径不对,先把JSP放到正确的位置

内容的提问来源于stack exchange,提问作者user2863754

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:18:35