• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java/My sql problem z połączeniem

+1 głos
415 wizyt
pytanie zadane 25 sierpnia 2015 w Java przez magdalenka120 Obywatel (1,520 p.)
zmienione kategorie 25 sierpnia 2015 przez Arkadiusz Waluk

Witam, 

mam problem z logowaniem na swojej stronie. Servlet nie łączy mi z bazą danych, aby sprawdzić poprawność danych wprowadzonych przez użytkownika, a w efekcie nie następuje przekierowanie na następną stronę. Proszę o pomoc, kod poniżej. 

____________________________________

package logowanie;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class logowanie extends HttpServlet {

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/sale_konf";
    static final String login = "root";
    static final String pass = "";
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        Connection conn = null;
        Statement stmt = null;
        String Login = req.getParameter("login");
        String Pass = req.getParameter("pass");
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(DB_URL, login, pass);
            stmt = conn.createStatement();
            String sql = "SELECT login, pass FROM users WHERE login='"+Login+"' and pass='"+Pass+"'";
            ResultSet rs = stmt.executeQuery(sql);

            try (PrintWriter pw = res.getWriter()) 
            {
                res.setContentType("text/html");
                
                
                if (Login!=null && Pass!=null)
                {
                req.getRequestDispatcher("http://localhost:8080/WebApplication1/faces/Przekierowanie1.jsp"); //po poprawnym zalogowaniu ma następić przekierowanie na Przekierowanie1
                }
                else
                {
                    pw.println("Login Failed...!");
                }
            }
            conn.close();
        } catch (ClassNotFoundException | SQLException e) {
        }

    }

}

______________________________________

2 odpowiedzi

+1 głos
odpowiedź 25 sierpnia 2015 przez Tomasz90 Nałogowiec (25,140 p.)
wybrane 25 sierpnia 2015 przez magdalenka120
 
Najlepsza
Pokaż jak plik web.xml wygląda u Ciebie. W ogóle to wykonujesz zapytanie i potem z tym co powinno Ci zwrócić nic nie robisz.tylko logujesz użytkownika na podstawie tego co jest w przekazywane w żądaniu, więc dziwne troche. Nazywaj klasy z dużych liter. No i w zapytaniach nie klej Stringów tylko używaj ?. Np. :

SELECT * FROM my_table WHERE my_table_id = ?
komentarz 25 sierpnia 2015 przez magdalenka120 Obywatel (1,520 p.)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>logowanie</servlet-name>
        <servlet-class>logowanie.logowanie</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>logowanie</servlet-name>
        <url-pattern>/logowanie</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/welcomeJSF.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 

komentarz 25 sierpnia 2015 przez magdalenka120 Obywatel (1,520 p.)

Kurczę, możliwe że już wszystko pomieszałam, nazwy klas zmieniłam już na drukowane. A mógłbyś przybliżyć mi jak ty byś napisał kod, aby wywołać te dane? Nie zależy mi na gotowym kodzie, lecz pomocy :) Już z jakąś podpowiedzią będę w stanie coś zrobić sama :) Na jednym z forum dostałam odpowiedź abym zrobiła osobną klase do połączenia z bazą danych (tzw. DAO), troszkę z tym roboty jest, pisałeś już może aplikację w taki sposób? :) Mam już jakąś część, ale jeśli ten kod, którym miałam jest okay, wymaga jakiejś mniejszej zmiany to wolałabym go jednak zostawić :)

komentarz 25 sierpnia 2015 przez Tomasz90 Nałogowiec (25,140 p.)

Jeżeli chodzi o to tylko, żeby działało to wystarczy jeden servlet. Ogólnie te klasy co dziedziczą po HttpServlet nazywaj sobie w konwencji NazwaServlet np. LoginServlet. Bo taka sama nazwa klasy jak i pakietu jednak troche zamieszania wprowadza. Te pola finalne z danymi do bazy lepiej prywatnymi zrobić. No i takie stałe najlepiej dużymi literami nazywać. Dobra a co do reszty to tak:

web.xml

http://www.mkyong.com/web-development/the-web-xml-deployment-descriptor-examples/

kopiujesz sobie tag web-app i w nim umieszczasz 1 servlet czyli np powinno to tak wyglądać:


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
		 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
 
<welcome-file-list>
       <welcome-file>views/index.jsp</welcome-file>
</welcome-file-list>
 
<servlet>
        <servlet-name>com.mydomain</servlet-name>
        <servlet-class>com.example.LoginServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>com.mydomain</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
</web-app>

 

No a w klasie LoginServlet w metodzie doPost to w najprostszej wersji gdy zapytanie zwroci Ci jakieś wyniki to wtedy przechodzisz dalej w innym wypadku nie.

No i nie musisz też całej ścieżki podawać do wybranego widoku. Tylko jak masz katalog WEB-INF lub WebContent to tworzysz sobie w nim katalog np views lub jsp i do niego wrzucasz widoki. No i wtedy podajesz ścieżkę /jsp/myPage.jsp

Co do DAO to polega to na tym, że masz zwykłe klasy modelu np. User i on ma tam pola id, login, password itd. Osobne klasy do wykonywania operacji na bazie danych np UserDao i ona sobie definiuje różne metody dzięki której wykonujemy operacje na bazie danych. No i w praktyce to wygląda tak, że w tym servlecie byś robiła coś takiego:

UserDao userDao = new UserDao();

User user = userDao.getUser(String login, String password);

W skrócie do takiego programu co chcesz nie warto kombinować i najpierw napisać, żeby działało a potem się bawić.

Jakby coś było jeszcze niejasne to pytaj.

komentarz 25 sierpnia 2015 przez magdalenka120 Obywatel (1,520 p.)
Ooo dzięki bardzo! Wydaje mi się, że wykonałam wszystko wg Twoich wskazówek, skorzystałam nawet z pomocy klas modelu DAO dla porównania (http://krazytech.com/programs/a-login-application-in-java-using-model-view-controllermvc-design-pattern), zmieniłam kod do swoich potrzeb (nienawidzę tego bardzo), ale dalej nic nie działa więc podejrzewam, że błąd musi leżeć gdzieś indziej. Aplikacja jest dość skomplikowana, to co wysłałam to marny początek i wydaje mi się, że troszkę na zbyt głęboką wodę weszłam po pierwszym roku.
komentarz 25 sierpnia 2015 przez Tomasz90 Nałogowiec (25,140 p.)
Ogólnie to nie wiem co umiesz i w jakim stopniu ale ja proponuje zabrać się do tego w następujących krokach:

1. Stworzyć prosty serwlet + web.xml, który coś wypisze do konsoli ewentualnie w przeglądarce

2. Stworzyć 2 widoki jeden z formularzem a drugi to widok po zalogowaniu i na sztywno w kodzie zdefiniować sobie poprawne dane do logowania i jeżeli po wypełnieniu formularza dane są ok to przekierowuje do drugiego widoku (bez bazy wszystko)

3. Jak punkt 2 działa to dodać do tego serwletu jakieś pobieranie danych z bazy i na tej podstawie uwierzytelniać użytkownika

4. Dopiero jak to działa to zacząć się bawić w jakieś wzorce projektowe :D
komentarz 25 sierpnia 2015 przez magdalenka120 Obywatel (1,520 p.)
Od lipca przysiadłam porządnie do javy (wcześniej pisałam w innych językach), a na początku sierpnia dostałam projekt do stworzenia w firmie jako "zdobycie doświadczenia" i zgodziłam się. Mam 3 tygodnie, ale nie ma szans abym to zrobiła zwłaszcza, że nie dostałam nikogo do pomocy, wszystkiego uczę się na bieżąco, nikt nie programował w javie, tylko w PHP (a ja PHP zostawiłam na później) i .. widzisz efekty :) Porwałam się z motyką na słońce.

 

Dziękuję Ci bardzo za pomoc, za poświęcenie czasu na odpowiedzi i rzeczywiście, lepiej jak zacznę od początku, a nie od końca :)
+1 głos
odpowiedź 25 sierpnia 2015 przez Boshi VIP (100,240 p.)
Gdzie ty tu masz javescript?  polecam przeczytać czym się różni java od javascirpt, bo po za nazwą to one ze sobą mają tyle wspólnego co maluch z ferrari.
komentarz 25 sierpnia 2015 przez magdalenka120 Obywatel (1,520 p.)
Okay, z pośpiechu popełniłam gafę, ale najlepszym się zdarza :) Pytanie dotyczyło czegoś innego, więc zamiast wytykać błędy prosiłabym o pomoc :)
komentarz 25 sierpnia 2015 przez krecik1334 Maniak (58,390 p.)
Jeśli tak, to który to maluch, a który ferrari? :D
komentarz 25 sierpnia 2015 przez SebastianGomularz Dyskutant (9,370 p.)

Maluch i Ferrari maja ze sobą bardzo dużo wspólnego.Np to że włascicielem firmy Ferrari jest firma produkujaca Maluchy laugh

Podobne pytania

0 głosów
1 odpowiedź 242 wizyt
pytanie zadane 21 lutego 2020 w SQL, bazy danych przez Grzegorzko Obywatel (1,110 p.)
0 głosów
3 odpowiedzi 354 wizyt
pytanie zadane 18 marca 2019 w SQL, bazy danych przez aniawj Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 282 wizyt
pytanie zadane 18 kwietnia 2015 w C i C++ przez KapiziaK Użytkownik (900 p.)

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...