我一直在尝试使用表格格式的 scriplet 在我的 jsp 页面上打印 5 个数组列表,但我无法这样做。如果有人能建议我的代码有什么问题,我会很高兴。在我的输出页面中,我只是看到打印的标题。不打印数组列表中的数据。另外,我没有看到显示任何错误/异常信息。
1)查看.jsp(我的jsp页面)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.AppUtils.*"%>
<%@page import="java.util.ArrayList"%>
<%Utils utils = new Utils(); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>View Page</title>
</head>
<body>
<form action="registerForm.jsp">
<table border="1">
<tr><td>Cuid</td>
<td>First Name</td><td>Last Name</td>
<td>Mobile</td><td>Desk</td></tr>
<%for(int i=0; i<utils.getCount();i++){%>
<tr>
<td><%out.print(utils.getCuid().get(i));%></td>
<td><%out.print(utils.getFname().get(i));%></td>
<td><%out.print(utils.getLname().get(i));%></td>
<td><%out.print(utils.getMobile().get(i));%></td>
<td><%out.print(utils.getDesk().get(i));%></td>
</tr>
<%} %>
</table>
<input type="submit" value="Register"/>
</form>
</body>
</html>
2)Utils.java(My Java class)
package com.AppUtils;
import java.util.ArrayList;
public class Utils {
public ArrayList getCuid() {
return cuid;
}
public void setCuid(ArrayList cuid) {
this.cuid = cuid;
}
public ArrayList getFname() {
return fname;
}
public void setFname(ArrayList fname) {
this.fname = fname;
}
public ArrayList getLname() {
return lname;
}
public void setLname(ArrayList lname) {
this.lname = lname;
}
public ArrayList getMobile() {
return mobile;
}
public void setMobile(ArrayList mobile) {
this.mobile = mobile;
}
public ArrayList getDesk() {
return desk;
}
public void setDesk(ArrayList desk) {
this.desk = desk;
}
ArrayList cuid = new ArrayList();
ArrayList fname = new ArrayList();
ArrayList lname = new ArrayList();
ArrayList mobile = new ArrayList();
ArrayList desk = new ArrayList();
int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
3)ViewServlet.java(Servlet,我在其中将值添加到所有 5 个数组列表中)
import java.io.*;
import com.AppUtils.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
/**
* Servlet implementation class ViewServlet
*/
public class ViewServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
System.out.println("Logining in..");
// retrieving values entered in form
String uname = (String)request.getParameter("uname");
String pwd = (String) request.getParameter("pwd");
if (uname.equals("admin") && pwd.equals("admin")) {
try {
viewDetails();
System.out.println("Redirecting to view page..");
response.sendRedirect("view.jsp");
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void viewDetails() throws Exception{
System.out.println("Reading Data..");
BufferedReader input = new BufferedReader(new FileReader("H:/Workspace/teamRecordsApp/WebContent/records.txt"));
String record;
String[] split =new String[5];
ArrayList cuid = new ArrayList();
ArrayList fname = new ArrayList();
ArrayList lname = new ArrayList();
ArrayList mobile = new ArrayList();
ArrayList desk = new ArrayList();
int count = 0;
while((record=input.readLine()) != null){
split = record.split(",");
System.out.println("Record is : "+split[0]+","+split[1]+","+split[2]+","+split[3]+","+split[4]);
cuid.add(split[0]);
fname.add(split[1]);
lname.add(split[2]);
mobile.add(split[3]);
desk.add(split[4]);
count = count+1;
}
input.close();
System.out.println("Reading Done...");
Utils utils = new Utils();
utils.setCuid(cuid);
utils.setFname(fname);
utils.setLname(lname);
utils.setMobile(mobile);
utils.setDesk(desk);
utils.setCount(count);
System.out.println("Total records : "+count);
}
}
这有很多问题。
你的 servlet 实际上并没有向你的 JSP 传递任何东西。 您的viewDetails
方法正在构造Utils
对象的实例,但该实例在方法结束时消失。 不知何故,您需要将其粘贴在请求范围内(request.setAttribute("utils", utils)
)
即使这样做,JSP response.sendRedirect
也会生成一个全新的请求,从浏览器往返,这将丢失任何请求范围的属性。 您可能希望转发而不是重定向。
最后,您的 JSP 当前正在获取一个新的空 Utils
实例 - 该实例应替换为您从 servlet 中设置的request.getAttribute("utils")
。
有两个问题
- 您不是转发到 JSP,而是发送带有
response.sendRedirect("view.jsp")
的重定向。这将向 http 客户端(可能是浏览器)发送 302 响应,然后浏览器将向view.jsp
发送新的 http 请求。因此,您在请求中设置的任何属性在新请求中都不可用。 - 在你的
jsp
中,你声明<%Utils utils = new Utils(); %>
。然后,当您尝试使用utils.getCount()
进行迭代时,您引用的是这个新创建的对象,而不是您在viewDetails()
方法中本地声明的对象。因此,utils.getCount()
返回0
并且您的循环不执行任何操作。
查看HttpServletRequest#setAttribute(String, Object)
是否要使用RequestDispatcher#forward()
或HttpSession#setAttribute(String, Object)
是否要使用HttpServletResponse#sendRedirect(String)
。