JSP中通过URL传递查询参数失败(HTTP 500内部服务器错误)
问题分析与解决方案
你的问题出在JSP表单的action属性拼接上,错误的引号闭合导致id参数没有被正确附加到URL中。
问题根源
你原来的表单代码里,action属性的写法存在语法错误:
<form method="get" action="<%=request.getContextPath()%>/downloadFileServlet?id="<%=rs.getInt("id") %> >
这里第二个双引号"会提前闭合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
相关产品推荐
相关产品推荐

