【问题标题】:servlet always showing null while execution [duplicate]servlet 在执行时始终显示 null [重复]
【发布时间】:2016-03-12 09:54:47
【问题描述】:

当我运行 search.html 文件时,它运行成功,但在输入值后,输出如图output 所示,请尽可能提供帮助。 odbc数据源名是base,表名是tab,我用Microsoft Access进行数据存储Access

数据库.java

import java.sql.*;
import javax.servlet.annotation.WebServlet;

public class database {

public Connection connect;
public Statement stat;
public String query;
public ResultSet result;

public database()
{
    try
    {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        connect = DriverManager.getConnection("jdbc:odbc:base","","");
        stat = connect.createStatement();
    }catch(Exception e){}
}

}

搜索.html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Search</title>
</head>
<body>
<form action="search" method="get">
    <input type="number" name="ref" placeholder="reference" />
    <input type="submit" value="search" />
</form>
</body>
</html>

搜索.java

import java.io.*;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/search")
public class search extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public search() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse   response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    database DB = new database();

    DB.query = "SELECT * FROM tab where ref="
            +request.getParameter("ref");
    out.println("<html><body><table border=\"2\">"
            +"<tr><th>ref</th><th>des</th><th>pri</th><th>cat</th>"
            +"</tr>");

    try
    {
        DB.result=DB.stat.executeQuery(DB.query);
        while(DB.result.next())
        {
            out.println("<tr>"
                    +DB.result.getInt("ref")
                    +DB.result.getString("des")
                    +DB.result.getDouble("pri")
                    +DB.result.getString("cat")
                    +"</tr>");

        }
        out.println("</table></body></html>");
    }catch(Exception e){
        out.println(e.getMessage());
    }
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
}

}

【问题讨论】:

  • 由于某些或其他原因,我无法查看您的输出图像。
  • 异常处理错误。您只是在打印恰好是"null" 的异常消息。将out.println(e.getMessage()) 替换为throw new ServletException(e)。您将在服务器日志中获得一个错误页面和完整的堆栈跟踪,这通常已经代表了它自己的整个答案。很可能DB.stat 返回了null,这会导致NullPointerException

标签: java html servlets


【解决方案1】:

虽然您的以下课程看起来不错,但请尝试以下更改:

database.java

public class database {

public Connection connect;
public String query;
public ResultSet result;

public Connection databaseConnect()
{
    try
    {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        connect = DriverManager.getConnection("jdbc:odbc:base","","");
        return connect;
    }catch(Exception e){}
}

}

search.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
try{
Connection con = database.databaseConnect();
Statement stat = con.createStatement();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//database DB = new database();

String query = "SELECT * FROM tab where ref="
        +request.getParameter("ref");
out.println("<html><body><table border=\"2\">"
        +"<tr><th>ref</th><th>des</th><th>pri</th><th>cat</th>"
        +"</tr>");

    result=stat.executeQuery(query);
    while(result.next())
    {
        out.println("<tr>"
                +result.getInt("ref")
                +result.getString("des")
                +result.getDouble("pri")
                +result.getString("cat")
                +"</tr>");

    }
    out.println("</table></body></html>");
}catch(Exception e){
    e.printStackTrace();
}
}

【讨论】:

  • 真的很抱歉我在上传时搞砸了,删除分号后仍然显示为空
  • 错误数据库无法解析。在 Connection con = Database.database();
  • 那是因为我错误地写了 Database 而不是 database ,如您的问题中所述。对我的答案进行了相应的更改以及其他更改。请检查一下。
  • 我有一个 64 位的办公室和 64 位的 jvm,所以我用不同的语法重写了代码
猜你喜欢
  • 1970-01-01
  • 2019-08-07
  • 2019-06-13
  • 1970-01-01
  • 2021-03-05
  • 2018-04-20
  • 2012-07-24
  • 1970-01-01
  • 2021-10-31
相关资源
最近更新 更多