【问题标题】:HTTP Status 500 - An exception occurred processing JSP page /home/index.jsp at line 54HTTP 状态 500 - 在第 54 行处理 JSP 页面 /home/index.jsp 时发生异常
【发布时间】:2014-07-09 07:11:16
【问题描述】:

我遇到了这个异常的问题:

type Exception report

message An exception occurred processing JSP page /home/index.jsp at line 54

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 /home/index.jsp at line 54

51:     <link rel="shortcut icon" href="../assets/ico/favicon.png"> 
52:     <style type="text/css"> 
53:     <%  
54:         HashMap<String,Object> background = com.controlj.green.definitions.Utilities.getBackground();
55:             String background_image = "";
56:             if(!background.isEmpty()){
57:                 background_image = "data:image/png;base64," + background.get("bytes").toString();


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
com.controlj.green.servlets.Index.doGet(Index.java:51)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

root cause

javax.servlet.ServletException: java.lang.IncompatibleClassChangeError: Found class   com.mysql.jdbc.Statement, but interface was expected
 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
 org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
 org.apache.jsp.home.index_jsp._jspService(index_jsp.java:83)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 com.controlj.green.servlets.Index.doGet(Index.java:51)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

 root cause

 java.lang.IncompatibleClassChangeError: Found class com.mysql.jdbc.Statement, but interface was expected
 com.controlj.green.definitions.Utilities.getBackground(Utilities.java:172)    org.apache.jsp.home.index_jsp._jspService(index_jsp.java:68)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 com.controlj.green.servlets.Index.doGet(Index.java:51)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

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

我真的不知道第 54 行出了什么问题。

显然是这样称呼的: com.controlj.green.definitions.Utilities.getBackground();

这是:

    import java.util.*;

    public static HashMap<String,Object> getBackground() throws SQLException, ClassNotFoundException, IOException {
    if(establishConnection()){

        Statement st = (Statement) con.createStatement();
        rs = st.executeQuery("select bytes from connection_string");

        ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
        int columns = md.getColumnCount();
        HashMap<String,Object> list = new HashMap<String,Object>();

        if (rs.next()) {
            for(int i=1; i<=columns; ++i){
                list.put(md.getColumnName(i),rs.getObject(i));
                }
            }    
        return list;
    }else{
        return null;
    }

}

这可能有什么问题?

谢谢。

【问题讨论】:

  • here也许这有帮助。

标签: java jsp


【解决方案1】:

从堆栈跟踪,

根本原因 javax.servlet.ServletException: java.lang.IncompatibleClassChangeError: 找到类
com.mysql.jdbc.Statement,但需要接口

你为什么要在这里投statement类,

Statement st = (Statement) con.createStatement();

需要,

Statement st =con.createStatement();

期望con 成为连接对象

更新:

根据您分享的错误导入,

错误的课程

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

应该是

import java.sql.Connection;
import java.sql.Statement;

希望对你有帮助

【讨论】:

  • 嗨,san krish,当我删除强制转换(语句)时,会出现一条通知:类型不匹配:无法从 java.sql.Statement 转换为 com.mysql.jdbc.Statement
  • 更新了我的答案。检查导入并让我知道任何问题
  • 这是我的导入:import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.mysql.jdbc.ResultSetMetaData;import com.mysql.jdbc.Statement;那么删除或使用哪一个?
【解决方案2】:

什么是骗局 Statement st = (Statement) con.createStatement();
是从哪里来的。无论如何,您不需要对 Statement 进行强制转换。

【讨论】:

  • 嗨 Darshan Lila,con 来自另一个类的公共属性:public static Connection con;仅供参考
  • Statement 调用应该来自 java.sql 包。检查您的导入。
【解决方案3】:

您从哪里获得连接?全局变量?,我会尝试将您准备好的语句更改为类似的内容。我不知道您是否在某些时候控制异常以顺便关闭连接。

PreparedStatement ps = null;

try{
    ps = conn.prepareStatement("select bytes from connection_string");
    ps.executeQuery();
} catch(Exception ex){
    System.out.println("");
} finally {
   try{
       if(ps!=null){
           ps.close();
       }
       if(conn!=null){
           conn.close();
       }
   } catch(Exception ex){
       System.out.println("");
   }
}

【讨论】:

  • 我真的不明白这段代码与 OP 的问题有什么关系
  • 查看堆栈跟踪,他的问题是当他创建 Statement Statement st = (Statement) con.createStatement();我相信尝试另一种方法来创建 PrepareStatement 来检索接口语句是值得的
【解决方案4】:

我认为我们不需要像你在这里所做的那样进行铸造

Statement st = (Statement) con.createStatement();

只要conjava.sql.Connection 类型的对象

或者您可能正在使用一些旧版本的 mysql-connector.jar 尝试用一些 newer version 替换它并再次导入连接语句

【讨论】:

  • 我会说“只要stjava.sql.Statement 类型的对象”。由于导入了错误的Statement,OP 可能正在投射
  • 这很可能是这里的原因错误的导入
  • 嗨 M.Sharma,我正在使用 mysql-connector-java-5.1.25.jar 仅供参考
  • 您尝试从 java.sql 包中重新导入语句吗?
猜你喜欢
  • 2013-02-18
  • 2014-04-22
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多