Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблеы с Servlet 
:(
    Опции темы
konvict
Дата 26.4.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



Привет всем! Итак, есть база данных на Access, которая подключена через JDBS-ODBC мост. Имеются классы для каждой таблицы БД и один класс - управляющий. Подключено к Tomcat. Написаны классы наследники от HttpServlet для каждой необходимой формы. Не пойму как обрабатывать кнопки. То есть с выводом содержания таблиц проблем нету, а занесение в БД не могу проверить(так как не работают кнопки). Реализация должна быть без JSP. 
PM MAIL   Вверх
v2v
Дата 26.4.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



нипанятно.
покажи хоть кусок кода.
где не работает и как должно быть?


--------------------
PM   Вверх
konvict
Дата 26.4.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



Предметная область - форум! Вот кусок кода, который выводит на экран темы. Все работает.

Код

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
    
    {
        resp.setContentType("text/html;charset=windows-1251");
        
          PrintWriter pw = resp.getWriter();
          pw.println("<b><h2>Список подфорумов</h2></b>");
          pw.println("<p>");
         
          try {
            List l = ManagementSystem.getInstance().getMThemes();
            for (Iterator it = l.iterator(); it.hasNext();) {
              MainThemes mth = (MainThemes) it.next();
                         
              pw.println("<a href='sf'><td>" + mth.getMainThemeName() + "</td></a>");
              pw.println("<p>");
             
            }
          } catch (SQLException e) {
            throw new ServletException(e);
          }
          
            
    }


А это страничка авторизации. Мне нужно обработать кнопки, которые я положил на форму.

Код

public class HelloWorld extends HttpServlet{
    
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
{
  resp.setContentType("text/html;charset=windows-1251");
  
  PrintWriter pw = resp.getWriter();
     
  pw.println("<p>");
  
    
  
  pw.println("<input type=text name='Login' size=10>");
  pw.println("<input type=text name='Password' size=10>");
  
  pw.println("<input type='submit' value='entrance'>");
  
  pw.println("<p>");
  pw.println("<input type='reset' value='registration'>");
  
  

  
}

PM MAIL   Вверх
v2v
Дата 26.4.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



Цитата(konvict @  26.4.2008,  17:29 Найти цитируемый пост)
Мне нужно обработать кнопки, которые я положил на форму.

а где ты видишь форму?
добавь теги <form> поля , кнопка </form>, 
а потом делаешь 
Код

request.getParameter("имя поля");

помоему так ...


--------------------
PM   Вверх
konvict
Дата 26.4.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



Сделал так:
Код

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
{
  resp.setContentType("text/html;charset=windows-1251");
  
  PrintWriter pw = resp.getWriter();
  
  pw.println("<form>");
  
  pw.println("<p>");
  
  pw.println("<p>");
  
  pw.println("<input type=text name='Login' size=10>");
  pw.println("<input type=text name='Password' size=10>");
  
  pw.println("<input type='submit' value='entrance'>");
  
  pw.println("<p>");
  pw.println("<input type='reset' value='registration'>");
  
  String Logx = req.getParameter("Login");
  String Pasx = req.getParameter("Password");
  
   try {
        ManagementSystem.getInstance().insertUser(Logx, Pasx);
    } catch (SQLException e) {
    
    e.printStackTrace();
    }
  
    pw.println("</form>");
    
}


вот insertUser
Код

public void insertUser (String log, String pass) throws SQLException
    {
        Statement stmt = con.createStatement();
        ResultSet rs = 
            stmt.executeQuery 
            ("INSERT INTO Users (Login, Password) VALUES ("+log+", "+pass+")");
        while (rs.next()) {
            Users user = new Users();
            user.setLogin(rs.getString(1));
            user.setPassword(rs.getString(2));
        }
        rs.close();
        stmt.close();
                
        
    }


Пишет: "Слишком мало параметров. Требуется 2" 

и еще: "Поле Users.Login не может быть NULL"



Это сообщение отредактировал(а) konvict - 26.4.2008, 18:59
PM MAIL   Вверх
v2v
Дата 26.4.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



посмотри что ты передаёшь в функцию insertUser 
и  в дальнейшем пиши на какой строчке вывалилась ошибка


зы1.
input type = password

ps2

лучше делать так: 
Код


PreparedStatement ps = null;
try {
  ps = c.prepareStatement("INSERT INTO таблица VALUES (?, ?, ?)");
  ps.setInt(1, значение_колонки_один);
  ps.setString(2, "хначение_колонки_2");
} catch (SQLException se) {




--------------------
PM   Вверх
konvict
Дата 26.4.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



ошибка на строчке stmt.executeQuery

PreparedStatement не могу использовать - Access не поддерживает.

Добавлено через 6 минут и 23 секунды
и еще я параллельно пытаюсь сделать авторизацию пользователя, вот так:

Код

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
{
  resp.setContentType("text/html;charset=windows-1251");
  
  PrintWriter pw = resp.getWriter();
  pw.println("<html>");
  
  pw.println("<title>");
  pw.println("Forum");
  pw.println("</title>");
  
  pw.println("<body>");
  pw.println("<form>");
  
  pw.println("<p>");
  
  pw.println("<p>");
  
  pw.println("<input type=text name='Login' size=10>");
  pw.println("<input type=text name='Password' size=10>");
  
  pw.println("<input type='submit' value='entrance'>");
  
  pw.println("<p>");
  pw.println("<input type='reset' value='registration'>");
  
  Enumeration en=req.getParameterNames();
  while (en.hasMoreElements()) {
      String a = (String) en.nextElement();
      System.out.print(a);
      System.out.print(", ");
  }
  System.out.print("\n");
  
  String log = req.getParameter("Login");
  String pass = req.getParameter("Password"); 
  
  
  
  
  System.out.print("checkpoint1");
  System.out.print("\n");
  
  try {
      List l=ManagementSystem.getInstance().getUsers();
      for (Iterator it = l.iterator(); it.hasNext();)
        {
          Users user1 = (Users) it.next();
          
          if ((user1.getLogin() == log)&(user1.getPassword() == pass))
                  System.out.print("nice");
          
          
        } 
      }
        catch (SQLException e) 
        {
           throw new ServletException(e);
        }
        
    
    System.out.print("checkpoint2");
    System.out.print("\n");  
  
    System.out.print(log);
    System.out.print(", ");
    System.out.print(pass);
    System.out.print("\n");
  

  
    
  pw.println("</form>");
  pw.println("</body>");
  
  pw.println("</html>");

    
}


после нажатия кнопки entrance(submit)

выдает названия, то бишь: Login, Password
затем: checkpoint1 и checkpoint2
введенные значения в форме: xxx, yyy

почему не выводит "nice"?

и еще как после нажатия этой кнопки при правильной проверке перейти по ссылке?!

PM MAIL   Вверх
v2v
Дата 26.4.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



ы?
"INSERT INTO Users (Login, Password) VALUES ( ' "+log+" ' , ' "+pass+" ' )"


--------------------
PM   Вверх
konvict
Дата 26.4.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



точно )) что-то я запарился - во вторник сдавать уже надо 

а по поводу предыдущего поста?!
и еще, авторизация у меня идет, кажется, после нажатия "entrance", а как сделать, чтобы добавление было по кнопке - "registration"?

Добавлено через 7 минут и 28 секунд
Цитата(v2v @ 26.4.2008,  22:29)
ы?
"INSERT INTO Users (Login, Password) VALUES ( ' "+log+" ' , ' "+pass+" ' )"

пишет "No ResultSet was produced"
но в БД заносит
PM MAIL   Вверх
konvict
Дата 27.4.2008, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



Пытался вот так написать сравнение:
Код

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
{
  resp.setContentType("text/html;charset=windows-1251");
  
  PrintWriter pw = resp.getWriter();
  pw.println("<html>");
  
  pw.println("<title>");
  pw.println("Good evening, infidel");
  pw.println("</title>");
  
  pw.println("<body>");
  pw.println("<form>");
  
  pw.println("<p>");
  

  
  pw.println("<p>");
  
  pw.println("<input type=text name='Login' size=10>");
  pw.println("<input type=text name='Password' size=10>");
  
  pw.println("<input type='submit' value='entrance'>");
  
  pw.println("<p>");
  
  pw.println("<a href='adduser'> Registration </a>");
  

  
  String log = req.getParameter("Login");
  String pass = req.getParameter("Password"); 
  
  boolean user_exist = false;
  boolean pass_correct = false;
  
  
  System.out.print("checkpoint1");
  System.out.print("\n");
  
  try {
      List l=ManagementSystem.getInstance().getUsers();
      for (Iterator it = l.iterator(); it.hasNext();)
        {
          Users user1 = (Users) it.next();
          
          if ((user1.getLogin().compareTo(log)) == 0) {
              user_exist = true;
              if ((user1.getPassword().compareTo(pass)) == 0) {
                  pass_correct = true;
                  break;
              }
          }
            
                  
            
          
          } 
      }
      
        catch (SQLException e) 
        {
           throw new ServletException(e);
        }
        
        
        if ((user_exist)&&(pass_correct)) {
              System.out.print("nice");
          }
          
          if ((user_exist)&&(!pass_correct)) {
              System.out.print("wrong password");
          }
          
          if (!user_exist) {
              System.out.print("now such user");
          }
          
          
          
    System.out.print("checkpoint2");
    System.out.print("\n");  
  
    System.out.print(log);
    System.out.print(", ");
    System.out.print(pass);
    System.out.print("\n");
  
        
  pw.println("</form>");
  pw.println("</body>");
  
  pw.println("</html>");
  
    
}


Не получается. Скажите, что не так?!
Пишет: "SEVERE: Servlet.service() for servlet hello threw exception"

И указывает на строчку: " if ((user1.getLogin().compareTo(log)) == 0) { "
PM MAIL   Вверх
v2v
Дата 27.4.2008, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



тебе надо использовать executeUpdate вместо executeQuery.
А затем делаешь с помощью executeQuery  SELECT и анализируешь его ResultSet.

Добавлено через 1 минуту и 15 секунд
я не понял что ты хочешь сделать в последнем посте , но попробуй вместо compareTo использовать equals


--------------------
PM   Вверх
konvict
Дата 27.4.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



Цитата(v2v @ 27.4.2008,  03:32)
тебе надо использовать executeUpdate вместо executeQuery.
А затем делаешь с помощью executeQuery  SELECT и анализируешь его ResultSet.

Добавлено @ 03:33
я не понял что ты хочешь сделать в последнем посте , но попробуй вместо compareTo использовать equals

Я Вас правильно понял: 

Код

public void insertUser (String log, String pass) throws SQLException
    {
        String sql="('INSERT INTO Users (Login, Password) VALUES ('"+log+"', '"+pass+"')')";
        Statement stmt = con.createStatement();
        stmt.executeUpdate(sql);
        
        ResultSet rs = stmt.executeQuery("SELECT Login, Password FROM Users WHERE (Login="+log+") AND    (Password="+pass+")");
        while (rs.next()) {
            Users user = new Users();
            user.setLogin(rs.getString(1));
            user.setPassword(rs.getString(2));
        }
        rs.close();
        stmt.close();
        
        
                
    }


А в последнем посте я пытаюсь пройти авторизацию на главной страничке будущего форума. И смотрю есть ли пользователь в БД. Разве нет? а equals не помогает (
PM MAIL   Вверх
v2v
Дата 27.4.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



Цитата(konvict @  27.4.2008,  11:32 Найти цитируемый пост)

Я Вас правильно понял: 

да, где то так. получилось?

Цитата(konvict @  27.4.2008,  11:32 Найти цитируемый пост)
А в последнем посте я пытаюсь пройти авторизацию на главной страничке будущего форума. И смотрю есть ли пользователь в БД. Разве нет? а equals не помогает ( 

а. тогда зачем вот этот цикл?
напиши функцию, которая будет делать селект из базы из заданным логином/паролем , если вернёт null : юзер не существует, иначе аутентификация пройдена.


--------------------
PM   Вверх
konvict
Дата 27.4.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.4.2008

Репутация: нет
Всего: нет



Цитата(v2v @ 27.4.2008,  11:48)
Цитата(konvict @  27.4.2008,  11:32 Найти цитируемый пост)

Я Вас правильно понял: 

да, где то так. получилось?

Цитата(konvict @  27.4.2008,  11:32 Найти цитируемый пост)
А в последнем посте я пытаюсь пройти авторизацию на главной страничке будущего форума. И смотрю есть ли пользователь в БД. Разве нет? а equals не помогает ( 

а. тогда зачем вот этот цикл?
напиши функцию, которая будет делать селект из базы из заданным логином/паролем , если вернёт null : юзер не существует, иначе аутентификация пройдена.

Не могу пока проверить (.  Как проверю, отпишусь.

Точно, спасибо, наверно так сейчас и сделаю (я про функцию селекта из бд пользователя)

И еще вопрос (надеюсь я не сильно надоел): у меня сервлет выполняется как только заходишь на страничку или же обновляешь ее, а как сделать, чтобы только на кнопку реагировал?!
PM MAIL   Вверх
v2v
Дата 27.4.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



кнопка у тебя шлёт :
req.getParameter("Login"); != null
вот и добавь условие: 
Код

if req.getParameter("Login") == null 
   // делать что то другое 
else
 // выполнять сервлет



--------------------
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0947 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.