Java 在JSP中访问请求属性
我正在用小程序练习JSP,遇到了一个小问题 我有了第一个jsp页面,其中包含一个表单和一个设置请求属性的代码Java 在JSP中访问请求属性,java,jsp,Java,Jsp,我正在用小程序练习JSP,遇到了一个小问题 我有了第一个jsp页面,其中包含一个表单和一个设置请求属性的代码 <form action="process.jsp" method="post"> User: <input type="text" name="userName"> <br/><br/> <input type="submit" value="Submit"/> </form> &l
<form action="process.jsp" method="post">
User: <input type="text" name="userName">
<br/><br/>
<input type="submit" value="Submit"/>
</form>
<%request.setAttribute("sampleKey","myValue");%>
当我访问第一个页面并提交到process.jsp页面时,我希望request属性有它的值,但是我在这里得到了null
这只是一个学习的示例程序,我知道我们不应该使用scriplets
这里有什么问题,你能告诉我吗?问题是当你提交
时,它会向process.jsp发出一个新的POST
请求,因此以前设置的任何请求
属性都不再可用。您需要的是使用会话
作用域,它将在来自同一用户的多个请求中保留其属性
因此,在JSP表单中,会话属性设置为
<% session.setAttribute("sampleKey","myValue"); %>
然后可以在process.jsp中检索为
Welcome${param.userName}
属性为${sampleKey}
由于请求,此代码中存在问题。使用
而不是
然后,您可以通过这种类型进入process.jsp页面
session.getAttribute(“sampleKey”) 问题是您正在使用来自的html将请求提交到
process.jsp
。因此,您的请求属性将丢失
选项1,使用相同形式的hidden
字段,并使用req.getParameter()
获取它
选项2,使用
session
属性,而不是request
当您导航到一个新的JSP时,首先点击服务器。这不会破坏请求吗?您说的是“从请求中给我一些东西”,但您是在响应的内容中这样做的。两个JSP是否处理相同的请求
?你确定吗?我同意@takendark的观点。当您提交表单时,您创建了一个新的请求。当我们应该在两个jsp的请求之间进行通信时,范围将不可用?不,除非请求在服务器端包含/转发,例如
。无论何时,当您要求客户机发出请求(如重定向)时,它总是新的。这就是为什么我们将HTTP称为无状态协议,或者如果它只需要在请求期间存在,就将其作为隐藏表单字段包含。
<% session.setAttribute("sampleKey","myValue"); %>
Welcome ${param.userName}
<br/>
The attribute is ${sampleKey}