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

JSP中通过URL传递查询参数失败(HTTP 500内部服务器错误)

问题分析与解决方案

你的问题出在JSP表单的action属性拼接上,错误的引号闭合导致id参数没有被正确附加到URL中。

问题根源

你原来的表单代码里,action属性的写法存在语法错误:

<form method="get" action="<%=request.getContextPath()%>/downloadFileServlet?id="<%=rs.getInt("id") %&gt; >

这里第二个双引号"会提前闭合action属性,后面的<%=rs.getInt("id") %>被浏览器当成了表单标签的无效属性,根本不会被解析为URL的一部分,所以最终URL里只有?,没有id参数。

修复方案

方案1:正确拼接action属性

把id参数的JSP表达式放在action属性的引号内部,确保整个URL是一个完整的字符串:

<form method="get" action="<%=request.getContextPath()%>/downloadFileServlet?id=<%=rs.getInt("id")%>">
    <!-- 表单内容 -->
</form>

方案2:使用EL表达式(更简洁)

如果你的项目支持JSP 2.0+,可以用EL表达式替代脚本,代码更干净易读:

<form method="get" action="${pageContext.request.contextPath}/downloadFileServlet?id=${rs.id}">
    <!-- 表单内容 -->
</form>

注意:要确保rs对象在页面的作用域中(比如request或pageContext),EL才能正确获取id值。

方案3:使用隐藏域(推荐,更规范)

避免直接在action里拼接参数,改用隐藏表单字段传递id,这种方式更清晰,也适合多参数场景:

<form method="get" action="<%=request.getContextPath()%>/downloadFileServlet">
    <input type="hidden" name="id" value="<%=rs.getInt("id")%>">
    <!-- 其他表单元素,比如提交按钮 -->
    <button type="submit">下载文件</button>
</form>

当表单提交时,隐藏域的id参数会自动附加到URL中(因为是GET方法),和你期望的效果完全一致。

验证效果

修复后,提交表单时Chrome地址栏应该会显示类似:

http://localhost:8080/MajorProject/downloadFileServlet?id=123

这样你的Servlet就能通过request.getParameter("id")正确获取到参数值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:51