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

从JSP页面调用HttpServlet时出现404资源未找到问题

解决方案与排查思路

1. 解决Servlet注册失效问题

你当前使用@WebServlet注解注册Servlet,web.xml 3.1版本默认支持该注解,但如果没有显式开启注解扫描,或者注解被拦截,就会出现404。优先采用更稳妥的手动注册方式,在你的web.xml中新增以下配置:

<servlet>
    <servlet-name>DownloadServlet</servlet-name>
    <servlet-class>com.csx.cti.servlet.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>
    <url-pattern>/download</url-pattern>
</servlet-mapping>

如果仍想使用注解,只需修改web.xml根标签,开启注解扫描即可:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1"
         metadata-complete="false">

2. 修正前端跳转路径

你写的href='/download'是站点根路径绝对路径,会直接拼接在域名后,忽略项目上下文路径/cti_dwnld,直接改成动态获取上下文路径的写法即可,不需要硬编码项目名:

out.println("<a href='" + request.getContextPath() + "/download?file=sample.txt'>" + l_Files.elementAt(a).toString() + "</a><br>");

request.getContextPath()会自动返回当前项目的上下文路径,最终拼接出来的地址就是你预期的/cti_dwnld/download。

3. 额外排查点

  • 重启Tomcat后先直接访问http://你的服务地址:8080/cti_dwnld/download,如果可以正常下载,说明Servlet注册成功,仅需调整前端路径即可
  • 检查Tomcat启动日志,是否有DownloadServlet类加载失败的报错,排查是否存在jar包冲突、类路径写错的问题
  • 后续可以给InputStream is = ctx.getResourceAsStream("sample.txt")加非空判断,避免文件不存在时抛出空指针异常导致500错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:27:03