在 servlet 中使用 Jsp 变量



servlet1

request.getSession().setAttribute("user", user.getUid());
request.getRequestDispatcher("home.jsp").forward(request,response);

家。Jsp 代码

<h5>Servlet communicated message to JSP: ${user}
Please Select an image to upload</h5>   
<form action = "SaveInDBServlet" method = "GET"
enctype = "multipart/form-data">
<input type = "file" name = "filepath" size = "50" accept="image/*" />
<br />
<input type = "submit" value = "Submit" />
</form>

用户值从 servlet1 发送到 JSP 现在我需要将其从 JSP 传输到 servlet 2。 我需要访问 servlet 2 中用户的值 怎么做?

$user是由servlet 1$user发送的属性,在此网页上打印值 现在为了进一步处理,这个变量必须发送到servlet2

首先,让我从重载的getSession()方法开始解释。no-arggetSession()总是返回一个新的session对象,类似于getSession(true),但在getSession(false)的情况下,它会检查现有会话,如果存在则返回它或返回 null。

一旦你为session设置了一个属性,它就会对用户可用,直到他的会话可用(不为空(或不invalidated,所以你的数据user在你的JSP和servlet2中也可用。但是,您用于为会话设置属性的方法容易受到攻击,因为getSession()还可以返回一个不存在您的属性的新会话。

因此,安全的方法是将会话对象检索到引用,检查它是否为null或设置属性。

HttpSession session = request.getSession(false);
if(session != null) {
//  set/get data whatever you need. Avoids NullPointerException
}

第二种方法是在JSP中使用隐藏属性,像这样

<input type="hidden" name="user" value="<%=request.getAttribute("user") %>"/>

因此,您只需要设置要请求的属性并在jsp中获取其值,并为隐藏字段设置值。现在在第二个 servlet 中使用getParameter方法(返回字符串(来获取值。

String user = request.getParameter("user");

在你的 JSP 中这样做

<form action = "SaveInDBServlet" method = "GET"
enctype = "multipart/form-data">
<input type = "file" name = "filepath" size = "50" accept="image/*" />
<br />
<input type = "hidden" name= "user" value="${user}"/>
<input type = "submit" value = "Submit" />
</form>

在你的 servlet GET 方法中

String username = request.getParameter("user");

最新更新