Я пытаюсь соединить 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 для устранения этой проблемы.
Кто-нибудь может любезно объяснить, что я делаю не так
Пишу сырой 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!