当用户填写注册表单(在页面Reg.jsp
上)数据成功转发到servlet(Regi.java
),当我在我的一个jsp页面(Imgu.jsp
-要求用户上传图像)上使用<%=request.getParameter("username")%>
时,它工作正常,但当在另一个servlet(imgup.java
)上请求相同的数据时参数username的值为null。
我不明白为什么会发生这种情况,我已经尝试创建一个会话,但它没有工作。
试试这个:
Regi.java
HttpSession session = request.getSession();
session.setAttribute("username", request.getParameter("username"));
Imgu.jsp
<form>
...
<input type="hidden" name="username" value="${username}"/>
</form>
或
Regi.java
HttpSession session = request.getSession();
session.setAttribute("username", request.getParameter("username"));
imgup.java
String username = (String)request.getSession().getAttribute("username");
正如文档中所说的request.getParameter()
以字符串形式返回请求参数的值,如果返回则返回null参数不存在。请求参数是额外的信息随请求一起发送。对于HTTP servlet,参数包含在查询字符串或提交的表单数据。
所以它与一个请求相关。除非您在请求的查询字符串或张贴表单中提供参数,否则其他servlet不会在那里。
对于应该在交叉请求中共享的数据,使用Arvind建议的会话范围
我怀疑您遇到的问题与您正在处理多部分请求的事实有关(因为您正在上传图像)。Tomcat 7有一个特性可以处理这个问题:
如何在Tomcat上运行的servlet过滤器中使用HttpServletRequest#getParts() ?
否则,您可能希望使用多部分库来提取参数。