带有数据库连接的简单jsp



我创建了一个简单的JSP,它显示从数据库中获取的浏览器信息。与数据库的连接我创建了一个在jsp中调用的简单类。它们引发了两个异常:JasperException和NullPointerException。我不明白我哪里错了。我请求你的帮助。

p.S.:对不起我的英语:)这是一个索引.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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>WORLD</title>
</head>
<body>
<%@ page language="java" import="java.sql.*" %>
<%@ page language="java" import="connessione.*" %>
<%
Connessione con = new Connessione();        
Connection cnn = con.connetti();
Statement st = null;
ResultSet rs = null;
try
{     
    st = cnn.createStatement();
    rs = st.executeQuery("SELECT code,name,continent FROM country");
    int code=0;
    String name="";
    String continent="";

    out.println("<h1>ELENCO STATI:</h1>");
    while(rs.next())
    {
        code = rs.getInt(1);
        name = rs.getString(2);
        continent = rs.getString(3);                
        out.println("<br><br><b>ID:</b> "+ code + " <br> " + "<b>COUNTRY:</b> "+name+" <br> " + "<b>CONTINENT</b> "+continent+" <br> ");
    }    
}
catch (SQLException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
finally 
{   
    try
    {           
        rs.close();           
        st.close();
        cnn.close();
    }
    catch(SQLException e)
    {
            out.println(e.getMessage());
        }       
    }
%>
</body>
</html>

这是一个类连接

package connessione;
import java.sql.*;
public class Connessione 
{
    protected String driver = "com.mysql.jdbc.Driver", url = "jdbc:mysql//localhost:3306/world ";
    protected String user = "root", psw = "informatica";
    public Connection connetti()
    {
        Connection dbConn = null;
        try
        {
            Class.forName(driver);
            dbConn = DriverManager.getConnection(url, user, psw);
        }
        catch(ClassNotFoundException ex)
        {
             ex.printStackTrace();
        }
        catch(SQLException ex)
        {
            ex.getMessage();
        }
        return dbConn;
    }
}

这是一个错误页面

type Exception report
 message An exception occurred processing JSP page /index.jsp at line 47
 description The server encountered an internal error that prevented it from     fulfilling this request.
 exception
 org.apache.jasper.JasperException: An exception occurred processing JSP    page /index.jsp at line 47
44:     }
45:     finally 
46:     {            
47:         rs.close();           
48:         st.close();
49:         cnn.close();     
50:     }

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWra pper.java:574)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:4 76)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause
java.lang.NullPointerException
org.apache.jsp.index_jsp._jspService(index_jsp.java:158)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:4 38)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

note The full stack trace of the root cause is available in the Apache  Tomcat/8.0.33 logs.

我使用eclipse jee-mars、tomcat v8.0.33和mySQL。在eclipse中,我使用在服务器上运行。在我导出保存在tomcat的webapps文件夹中的war文件之前。我添加了mysql连接器在tomcat的lib文件夹中,在我的项目中eclipse中有两个外部jar。

我已经解决了,正如他所说@Lawrence Tierney我检查了我的sql是否正常。。。我制作了一个简单的java应用程序,在控制台上显示查询结果。。。仍然可以看到引发的NullPointerException。。。我简直不敢相信自己的眼睛。。。。然后我说是DB,也是因为同一DBMS上的其他java应用程序工作正常。但后来我认为数据库不可能不对,我看不出原因。。。然后我尝试删除Connessione类,并在类的构造函数中连接到DB。。。。瞧,它很管用!!!!!我回到我的web项目,我删除了Connessione类,并直接在jsp中建立连接,它就工作了!!!!我甚至不知道为什么不把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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>WORLD</title>
</head>
<body>
<%@ page language="java" import="java.sql.*" %>
<%
String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
String DB_URL = "jdbc:mysql://localhost:3306/world";
String USER = "root";
String pass = "informatica";
Connection dbConn = null;
Statement st = null;
ResultSet rs = null;
try
{     
     //Registro il driver del database
    Class.forName(JDBC_DRIVER);
    // Connessione al db tramite il driver
    dbConn = DriverManager.getConnection(DB_URL, USER, pass);
    if(!dbConn.isClosed())
    {
        out.println("Connessione avvenuta con successo a mysql server. . .");
    }
    st = dbConn.createStatement();
    rs = st.executeQuery("SELECT Code,name,continent from country where name like 'i%';");
    String code="";
    String name="";
    String continent="";

    out.println("<h1>ELENCO STATI CON LA I:</h1>");
    while(rs.next())
    {   
        code = rs.getString(1);
        name = rs.getString(2);
        continent = rs.getString(3);                
        out.println("<br><br><b>ID:</b> "+ code + " <br> " + "<b>COUNTRY: </b> "+name+" <br> " + "<b>CONTINENT</b> "+continent+" <br> ");
    }    
}
catch (SQLException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
finally 
{   
    try
    {           
        rs.close();           
        st.close();
        dbConn.close();
    }
    catch(SQLException e)
    {
        out.println(e.getMessage());
    }       
}
%>
</body>
</html>

当你试图"关闭"rs、st或cnn(可能是rs)时,它们看起来都是null

先检查它们是否为空?

编辑:读取ResultSet的文档后,executeQuery似乎永远不会返回null。因此,我想知道您的SQL是否正常?

就像上面的人说的,完整的日志会很好。。。

最新更新