Java 在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

我正在用小程序练习JSP,遇到了一个小问题

我有了第一个jsp页面,其中包含一个表单和一个设置请求属性的代码

<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}