如何在httpsession中存储多个会话数据?还有其他存储方式吗?

时间:2015-08-30 06:26:27

标签: java jsp servlets

var obj = JSON.parse(number);
alert(obj.number); // will alert number 15

这里我创建了保存数据的会话。但只有最后一个数据传递给jsp做什么

servlet code
for (int i=0;i<StudentValues.studentmap.size();i++){
            System.out.println("size"+i);
            HttpSession session= request.getSession();
            session.setAttribute("id", std.getStudentId());

            session.setAttribute("fname", std.getFirstName());
            session.setAttribute("mname", std.getMiddleName());
            session.setAttribute("lname", std.getLastName());
            session.setAttribute("faname", std.getFatherName());
            session.setAttribute("maname", std.getMotherName());
            session.setAttribute("address", std.getAddressDetails());
            session.setAttribute("total", std.getTotalMarks());
            session.setAttribute("grade", std.getGrade());



        }

我使用动态表概念来保存这些数据,但只保留了我在表中获得的最后一个数据。如何获得我多次输入的所有数据

5 个答案:

答案 0 :(得分:2)

您应该使用JSTL执行此操作。在JSP中使用scriplets是bad practice

在servelt中,只需将整个学生地图设置为属性:

session.setAttribute("students", studentMap);

在jsp中:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<table>
    <c:forEach var="student" items="${students}">
         <tr>
             <td>${student.mname}</td>
             <td>${student.address}</td>
             <td>${student.grade}</td>
         </tr>       
    </c:forEach>
</table>

答案 1 :(得分:1)

您只会获得最后一个值,因为这些名称“id”“fname”“mname”“lname “下,的” faname “下,的” maname “下,的” 地址 “下,的” 总“下, “成绩”必须是唯一的,因此当您进行迭代时,您将覆盖之前的值,因此您只能获取列表中的最后一个值

你实际做的是x=5然后x=7然后x=9,所以你只得到最后一个值

你可以在会话中存储你的数组并使用JSTL标签在jsp中迭代

在servlet中:

session.setAttribute("myList", studentList);

在jsp中:

<c:forEach items="${myList}" var="element"> 
<tr>
     <td>${element.id}</td>
     <td>${element.fname}</td>
     <td>${element.mname}</td>
     <td>${element.lname}</td>
  </tr>
</c:forEach>

答案 2 :(得分:0)

会话的属性基本上是一个地图。

你可能想做的只是有一个属性&#34;学生&#34;并在那里存储学生名单。然后迭代事物以创建你的表。

答案 3 :(得分:0)

将会话值存储到会话对象

session.setAttribute("ref-name", Session value);

而不是使用

获取jsp中的值
Scriptlet Tag
(<% 
       //Java code 
%>)

使用像这样的JSTL标记库,

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

您可以在jsp页面的任何位置访问会话值。

<!-- Session Values-->
<c:set var="userId" value="${sessionScope['fname']}"></c:set>

第二种方式,

session.setAttribute("students", studentList);

在JSP中使用Expression Langauage(EL - $)

<table>
    <c:forEach var="student" items="${studentList}">
         <tr>
             <td>${student.fname}</td>
             <td>${student.userid}</td>
         </tr>       
    </c:forEach>
</table>

答案 4 :(得分:0)

您可以从servlet将std对象添加到会话中,并从jsp页面获取它。

添加到servlet中的会话

  session.setAttribute("std",std);

从jsp

中获取会话
Student std=(Student)session.getAttribute("std");

out.println(std.getFirstName());