2010-08-08 2 views
1

Я пытаюсь подключить JSP с MYSQL Server 5.1.49 с использованием TOMCAT 6.0. Я могу подключить JAVA с MYSQL, но не смог настроить MySQL с tomcate и получать ниже ошибкиНевозможно скомпилировать класс для JSP: nme не может быть разрешен

 
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) 

Может кто-нибудь любезно объяснить, что я делаю неправильно.


Update: Вот мой код: 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"); 
     } 
%> 

Спасибо за ваше дальнейшее объяснений, чтобы решить эту проблему.

ответ

2

Может кто-нибудь любезно объяснить, что я делаю неправильно

Написание сырец кода Java в файле JSP. Вам должно быть 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;)


Update: согласно вашему обновление: вы объявляя nme внутри while блока, но вы пытаетесь доступ к нему за пределами блока while.

Существуют и другие серьезные проблемы с кодом. Прежде всего, вы не пользуетесь полномочиями в отношении предложения WHERE, но выполняете задачу БД внутри Java и перетаскиваете всю таблицу базы данных в память Java и проверяете каждую строку внутри цикла. Learn the WHERE clause. Далее код также утечки ресурсов БД. Вам нужно close() их всех в блоке finally.

Предлагаю бросить книги/учебники, которые вы читаете как можно дальше. Они до сих пор только учили плохие практики.Вот некоторые ссылки на лучшие учебники:

Примечание: не узнать его перед тем Вы узнали Basic Java!

Смежные вопросы