Не мог скомпилировать класс для JSP: nme не может быть разрешен

Я пытаюсь соединить JSP с Сервером MySQL 5.1.49 TOMCAT 6.0 использования. Я могу соединить JAVA с MySQL, но не могущий настроить mysql с tomcate и добирающимся ниже ошибки

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");
      }
%>

Спасибо за Ваш далее explaination для устранения этой проблемы.

1
задан BalusC 8 August 2010 в 06:05
поделиться

1 ответ

Кто-нибудь может любезно объяснить, что я делаю не так

Пишу сырой Java-код в JSP-файле. Вам следует избегать этого.


Вернемся к вашей реальной проблеме: это просто ошибка компиляции. Переменная с именем 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, перетаскивая всю таблицу БД в память Java и проверяя каждую строку внутри цикла. Изучите предложение WHERE. Далее код также утекает в ресурсы БД. Вам нужно закрыть() их все в блоке finally.

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

Примечание: не изучайте этодо изученияоснов Java!

2
ответ дан 2 September 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: