所以我有一个从数据库中检索一些数据的Servlet。对于这些数据的每一行,我创建了一个对象,并将所有对象添加到该对象的ArrayList中。
现在,我需要Servlet将ArrayList传递回调用者JSP,并从ArrayList中的每个对象打印每个属性。
你们会建议最好的方法吗?我这样做的方式显然不起作用。
这是我的JSP:
<%--
Document : ChartData
Created on : Feb 11, 2014, 11:44:09 PM
Author : fabiolanza
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<script>
function myFunction() {
var request = new XMLHttpRequest();
request.open("GET", "http://localhost:8080/Test/Servlet2", true);
request.onreadystatechange = function() {
if (request.readyState === 4) {
<%
java.util.ArrayList<objects.Data> DataArray = (java.util.ArrayList<objects.Data>) request.getAttribute("DataArray");
for(objects.Data d: DataArray){
out.print(d.type);
out.print(d.value);
out.print(d.month);
}
%>
}
};
request.send(null);
}
</script>
<button onclick="myFunction()">Try it</button>
<br><a href="/Test/index.html">Home</a>
</body>
</html>
这是我的Servlet: 包servlet;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.util.ArrayList;
/**
*
* @author fabiolanza
*/
public class Servlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ArrayList<objects.Data> DataArray = new ArrayList<objects.Data>();
request.setAttribute("DataArray", DataArray);
// JDBC driver name and database URL
String JDBC_DRIVER = "com.mysql.jdbc.Driver";
String DB_URL = "jdbc:mysql://localhost:3306/Tests";
// Database credentials
String USER = "fabio";
String PASS = "hacking";
Connection conn = null;
Statement stmt = null;
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Register JDBC driver
Class.forName(JDBC_DRIVER);
// Open a connection
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// Execute SQL query
stmt = conn.createStatement();
String sql;
sql = "SELECT * FROM data";
ResultSet rs = stmt.executeQuery(sql);
out.println("<html><body>");
// Extract data from result set
while (rs.next()) {
objects.Data d = new objects.Data(rs.getString("Type"), rs.getInt("Value"), rs.getString("Month"));
DataArray.add(d);
}
String link = "/Test/Database.html";
out.println("<a href="+link+">Database</a>");
out.println("</body></html>");
// request.getRequestDispatcher("ChartData.jsp").forward(request, response);
// Clean-up environment
out.close();
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
System.out.println(e);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
谢谢!
答案 0 :(得分:0)
顺便说一下,在获取表数据后没有设置任何Attrubute(request.setAttribute("<somename>",DataArray)
)而不是从servlet转发到correspoting页面[
RequestDispatcher view = request.getRequestDispatcher(“ChartData.jsp”) view.forward(请求,响应)
]。
你在jsp页面中通过Ajax方法做了这个stuf。 (很抱歉,我不知道是否有可能,我没有看到任何jsp pgmr这样做)
function myFunction(){ ------
----
-----
if (request.readyState === 4) { // ?--- what is meant by '===' (or) you mean '==' instead
-----
----
}
任何方式..
你可以通过两种方式做到这一点: 1.使用jstl 2.在jsp中使用scriptlet(现在折旧或不是标准)
- 使用Jstl(如果不提及下面提到的代码,请在 Google 中查询更多关于 Jstl 的信息)
1. In servlet
request.setAttribute("dataArray",DataArray); // set array list
RequestDispatcher view=request.getRequestDispatcher("ChartData.jsp"");
view.forward(request, response);
2. In Jsp page
<c:forEach items="${dataArray}" var="item">
<tr>
<td><c:out value="${item.type}" /></td> //
----
---
</c:forEach>
在jsp中使用Scriptlet(同样,我说它不是标准版或已弃用。请参阅此链接why JSTL, by BalusC (stackoverflow)):
1&lt;%查询数据库,如此之后在Servlet页面中提到的那样 下面提到的代码来自你的servlet页面,只需将它应用到你的Jsp页面,如图所示:
while (rs.next()) { %>
<tr>
<td> <%= rs.getString("Type") %> </td> (or) u could do column number of needed 'field' in u database ie: if "Type" is at 3rd column <%= rs.getString(3) )
<br> <td> <%= rs.getString("Value") %> </td>
<br> <td> <%= rs.getString("Month") %> </td>
%< } %>
2然后在服务器的ur Jsp页面中运行你的jsp。它完成了。
希望这可以帮助你。