天天看点

java怎么获取jsp页面的数据_关于Java:如何将数据从Servlet获取到JSP页面?

我正在开发一个小型sql servlet应用程序,该应用程序从html页面的文本区域中接收一条SQL命令,将该命令发送到建立sql连接并将结果集放入arraylist的servlet中。我把所有这些都记下来了,我可以在Java servlet类中向浏览器打印列名。我需要做的一件事是使用JSP页面将结果打印到表中。 JSP页面的外观类似于我们最初使用的html页面。我不知道如何从servlet到要显示给用户的JSP页面获取arraylist。

这是HTML页面:

WebApp

Welcome to the Project 4 Remote Database Management System

You are connected to the Project4 database. Please enter any valid SQL query or update statement.

If no query/update command is given the Execute button will display all supplier information in the database. All execution results will appear below.

Execute Query

Clear Command

Database Results

这是servlet代码:

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.Vector;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.swing.JOptionPane;

public class NewServlet extends HttpServlet {

Connection connection;

Vector columnNames = new Vector();

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

try (PrintWriter out = response.getWriter()) {

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

out.println("");

out.println("");

sqlConnection(command);

//prints out column names into the browser.

out.println(columnNames);

}

}

public void sqlConnection(String command){

String driver ="com.mysql.jdbc.Driver";

String url ="jdbc:mysql://localhost:3306/project3";

String user ="root";

String pass ="Brandy?1994";

ResultSet rs;

try {

Class.forName(driver);

} catch (ClassNotFoundException ex) {

Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);

}

try {

connection = DriverManager.getConnection(url,user,pass);

} catch (SQLException ex) {

Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);

}

Statement stmt;

try {

stmt = connection.createStatement();

rs = stmt.executeQuery(command);

int colNum = rs.getMetaData().getColumnCount();

for (int i = 0; i < colNum; i++) {

columnNames.add(rs.getMetaData().getColumnLabel(i+1));

}

} catch (SQLException ex) {

Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);

}

}

//

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

@Override

public String getServletInfo() {

return"Short description";

}//

}

这是JSP页面的开始:

WebApp

Welcome to the Project 4 Remote Database Management System

You are connected to the Project4 database. Please enter any valid SQL query or update statement.

If no query/update command is given the Execute button will display all supplier information in the database. All execution results will appear below.

Execute Query

Clear Command

Database Results

DO TABLE STUFF HERE TO OUTPUT SQL RESULTS

%>

我想我将创建一个javaBean来存储数组,以便JSP页面可以访问列arraylist。然后使用for循环遍历数组列表,以便我可以创建表列。我如何将JSP页面链接到servlet,以便可以获取所需的信息?

我必须在servlet中执行sql连接,并且无法在JSP页面中进行连接。

您当前的代码有几个问题:

(1)一个Servlet实例将在所有请求线程之间共享,因此您不应为Servlet类创建实例变量,即,

Connection connection;

Vector columnNames = new Vector();

这两个变量应该在您的processRequest()方法中创建,以便它们在每个请求线程中都位于本地。

(2)您仅查询表的META DATA,因此您只能显示列名,但是如果您还想获取数据,则需要使用resultSetObj.hasNext()然后使用next()方法,如下所示:

while (rs.hasNext())

{

String X = rs.getString("empno");

//Retrieve all data

//add to a bean object

//add to list

}

//Now return the list which contains the data

您可以在这里查看一个很好的例子。

(3)使用request.setAttribute将结果设置为请求对象,然后可以检索到下一个JSP(结果)页面。

好点子! 我确实注意到,每次我重新加载页面时,我都会在向量后面附加相同的列名!

在您的servlet方法中,在页面上下文中设置属性,如下所示

HttpServletRequest req = (HttpServletRequest)request;

.... // find out what to put

req.getPageContext.setAttribute('some', objectYouFound);

在您的jsp中,使用el来访问变量:

${some}

在servlet中,将数据存储在request属性中:

request.setAttribute("rows", rows);

在JSP中,使用JSTL遍历行:

...

不要在JSP中使用Java脚本。