【问题标题】:Unable to compile class for JSP: nme cannot be resolved无法为 JSP 编译类:nme 无法解析
【发布时间】:2010-08-08 05:23:46
【问题描述】:

我正在尝试使用 TOMCAT 6.0 将 JSP 与 MYSQL Server 5.1.49 连接。 我能够将 JAVA 与 MYSQL 连接,但无法使用 tomcate 配置 mysql 并出现以下错误

org.apache.jasper.JasperException:无法为 JSP 编译类: 在 jsp 文件中的第 54 行发生错误:/checlLogin.jsp nme无法解析 51: 字符串密码 = request.getParameter("密码"); 52: 字符串 uName = request.getParameter("用户名"); 53: 54:如果(nme.equals(uName)) 55:{ 56: response.sendRedirect("index.jsp"); 57:}
Stacktrace:
 org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
 org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
 org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
 org.apache.jasper.compiler.Compiler.compile(Compiler.java:349)
 org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
 org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

谁能解释一下我做错了什么。


更新:这是我的代码:CheckLogin.jsp

<%@ page language="java" import="java.sql.*" errorPage=""%>
<%@ page import="java.util.*"%>


<%
   Connection con = null;
   try {
   Class.forName("com.mysql.jdbc.Driver").newInstance();
   con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "sohail");
   if(!con.isClosed())
   System.out.println("Successfully connected to MySQL server...");

//Step 5: create Statement
Statement st = con.createStatement();

//Step 6: preapare & execute the query
String sql = "SELECT * FROM login";
ResultSet rs = st.executeQuery(sql);

//Step 7: process the results
while(rs.next())
{
String nme = rs.getString("loginID");
String pwd = rs.getString("password");
System.out.println(nme + " " + pwd);
}
//Step 8: close the connection

con.close();

} 
catch(Exception e) 
{
System.err.println("Exception: " + e.getMessage());
} 
finally 
{

try 
{

if(con != null)

con.close();

} 
catch(SQLException e) 
{
} 
}

    String pwd = request.getParameter("password");
    String uName = request.getParameter("username");

     if(nme.equals(uName))
      {
        response.sendRedirect("index.jsp");
      }
      else{
     response.sendRedirect("index.jsp");
      }
%>

感谢您进一步解释以解决此问题。

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    谁能解释一下我做错了什么

    在 JSP 文件中编写原始 Java 代码。你应该avoid那个。


    回到你的实际问题:这只是一个编译错误。无法解析名称为 nme 的变量。它尚未在您尝试访问变量的范围内声明。

    要解决此问题,您需要确保名称为nme 的变量已在正确的范围内声明。由于您没有发布相关的代码 sn-p,因此无法告诉您如何解决此问题。所以这里有一个可能导致这种问题的基本示例:

    if (foo == null) {
        String bar = "value";
    }
    
    if ("foo".equals(bar)) { // Compile error! bar cannot be resolved.
        // ...
    }
    

    你应该像下面这样修复它:

    String bar = null;
    
    if (foo == null) {
        bar = "value";
    }
    
    if ("foo".equals(bar)) { // No compile error anymore, bar can be resolved.
        // ...
    }
    

    它至少与 JSP、MySQL 或 Tomcat 无关,而只是与基本 Java 相关。在普通的 Java 类中这样做时,您会遇到完全相同的问题;)


    更新:根据您的更新:您在 while 块内声明 nme,但您试图在 while 块外访问它。

    然而,代码还有另一个主要问题。首先,您没有利用WHERE 子句的强大功能,而是通过将整个数据库表拖入Java 内存并测试循环中的每一行来接管Java 内部的数据库任务。 Learn the WHERE clause。此外,代码还泄漏了数据库资源。您需要在finally 块中将它们全部close()

    我建议扔掉你正在阅读的书籍/教程。到目前为止,他们只教过不好的做法。以下是一些更好的教程的链接:

    注意:你已经学会了Basic Java

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 2014-10-01
      • 2017-05-12
      • 2017-12-13
      相关资源
      最近更新 更多