无法为JSP编译类:无法解析nme

时间:2010-08-08 05:23:46

标签: java jsp

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

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 54 in the jsp file: /checlLogin.jsp
nme cannot be resolved
51:     String pwd = request.getParameter("password");
52:     String uName = request.getParameter("username");
53: 
54:      if(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");
      }
%>

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

1 个答案:

答案 0 :(得分:2)

  

任何人都可以解释我做错了什么

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


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

要解决此问题,您需要确保在正确的范围内声明了名为nme的变量。由于您没有发布相关的代码片段,因此无法告诉您这是如何修复的。因此,这是一个可能导致此类问题的基本示例:

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类中执行此操作时会遇到完全相同的问题;)


更新:根据您的更新:您在nme广告块中声明while,但是您尝试在while之外访问它块。

然而,代码存在另一个主要问题。首先,你没有利用WHERE子句的权限,而是接管Java内部的DB任务,并将整个数据库表拖入Java的内存并测试循环中的每一行。 Learn the WHERE clause。此外,代码也泄漏了DB资源。您需要在close()块中finally全部{。}}。

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

注意:不要在 之前学习 <* 3>}