我将index.html
的值发送到ServletOne
。在指定的servlet上,我从index.html
获取的值将通过会话存储,我将传递给ServletTwo
,其中ServletOne
的会话值1}}将使用ArrayList存储。
因此,ServletTwo
被链接回index.html
以便另一个乘客申请,并且程序将重复,唯一的区别是第一个乘客应用程序的值应存储在ArrayList中
我对这个问题的猜测是,当我从ServletTwo
迭代回index.html
时,它实际上会实例化一个新的ArrayList。
以下是代码:
index.html
<html>
<head>
<title></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form action="ServletOne">
Choose your destination:
<input type="radio" name="destination" value="1"> STOP 1
<input type="radio" name="destination" value="2"> STOP 2
<input type="radio" name="destination" value="3"> STOP 3
<input type="radio" name="destination" value="4"> STOP 4
<input type="radio" name="destination" value="5"> STOP 5
<input type="radio" name="destination" value="6"> STOP 6
Enter Last Name : <input type="text" name="lastName"><br>
Enter First Name: <input type="text" name="firstName"><br>
<input type="submit" value="Enter">
</form>
</body>
</html>
这是ServletOne
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
int fare = 0;
String lName = request.getParameter("lastName");
String fName = request.getParameter("firstName");
String dest = request.getParameter("destination");
//acquiring the fare of the current passenger
if(dest.equals("1")){
fare = 1;
}else if(dest.equals("2")){
fare = 3;
}else if(dest.equals("3")){
fare = 5;
}else if(dest.equals("4")){
fare = 7;
}else if(dest.equals("5")){
fare = 9;
}else if(dest.equals("6")){
fare = 11;
}
//storing values into session
session.setAttribute("fName", fName);
session.setAttribute("lName", lName);
session.setAttribute("dest", dest);
session.setAttribute("fare", fare);
out.print("Name: "+lName+", "+fName+"<br>");
out.print("Destination: "+dest+"<br>");
out.print("P"+fare+".00<br>");
out.print("<a href=ServletTwo>go</a>");
}
这是ServletTwo
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(false);
ArrayList<String> lNames = new ArrayList<String>();
String lName = (String)session.getAttribute("lName");
//store an element into arraylist
lNames.add(lName);
//print the ArrayList
out.print(lNames);
//return to index.html to add a passenger
out.print("<a href=index.html>Again</a>");
}
如果我的术语不正确,我提出问题的方式以及其他任何内容,我感到非常抱歉。如果你有更好的解决方案来解决这个问题,请同时给它,这里唯一的静态是我必须使用一个ArrayList和两个servlet。我只使用互联网编写了这个(以及我们班级练习中的一些类似的东西,这些都是非常非常简单的程序)然后我们的教授给我们提供了一些复杂的问题让我们去做。我们唯一的来源是互联网,没有给出教授的任何内容。
答案 0 :(得分:0)
每次使用具有相同键的session属性时,它都会将旧值替换为新值。我想每次你只得到当前选定的值。 ArrayList仅在对象销毁之前保持不变。如果您希望将所有选定值存储在会话中,请使用jsonArray作为lName
答案 1 :(得分:0)
在类级别将数组列表对象声明为静态变量。 也就是说,不是在doPost方法中创建arraylist,而是在servlet类级别声明并创建它。 警告:在servlet中声明实例变量会导致许多多线程错误,但在您的情况下,它将满足您的项目需求。