Archive for the ‘Datenbank’ Category

Case Study: MVC Web App mit JDBC

Eine einfache Web App nach dem MVC Architekturmuster gebaut.

Was sagt Wikipedia über MVC:

Model-View-Controller (englisch “model view controller” (MVC), deutsch auch: Modell-Präsentation-Steuerung) ist ein Architekturmuster zur Strukturierung von Software-Entwicklung in die drei Einheiten Datenmodell (engl. model), Präsentation (engl. view) und Programmsteuerung (engl. controller). Ziel des Musters ist ein flexibler Programmentwurf, der eine spätere Änderung oder Erweiterung erleichtert und eine Wiederverwendbarkeit der einzelnen Komponenten ermöglicht.

Es wird eine einfache Web App, mit der wir prüfen, ob der User ein Passwort eingegeben hat (es prüft ob Login und Pass etwas etchalten).

Erstmall das Formular:

 

Login: Password


 

Hier der Controller, also unser Servlet:

 

package de.worldling;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Login", urlPatterns = {"/Login"})
public class Login extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse
response)
            throws ServletException, IOException {
        String userID, password;

        userID = request.getParameter("userID");
        password = request.getParameter("password");

        Service service = new Service(); // ein neues Objekt der Klasse Service.java
        boolean result = service.authenticate(userID, password); // aus Service.java

        if(result){
            User user = service.getUserDetails(userID);

            request.setAttribute("user", user);

            RequestDispatcher dispatcher = request.getRequestDispatcher("succes.jsp");
            dispatcher.forward(request, response);
            return;
        }else{
            response.sendRedirect("index.jsp");
            return;
        }
    }
}

 

Unser Service.java:

package de.worldling;

import java.util.HashMap;

public class Service {

    HashMap<String, String> users = new HashMap<String, String>();

    public Service() {
        DBclass.selectAllFromdb(users); // hier das JDBC von DBclass.java
    }

    public boolean authenticate(String userID, String password) {
        if (password == null || password.trim() == "") {
            return false;
        } else {
            return true;
        }
    }

    public User getUserDetails(String userID) {
        User user = new User();
        user.setUserName(users.get(userID));
        user.setUserID(userID);
        return user;
    }
}

 

Unser Model im MVC: User.java:

package de.worldling;

public class User {
    private String userName;
    private String userID;

    public String getUserID() {
        return userID;
    }

    public void setUserID(String userID) {
        this.userID = userID;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

}

 

Unsere JDBC Classe: DBclass.java
Wir benutzen hier PostgreSQL


package de.worldling;

import java.sql.*;
import java.util.HashMap;

public class DBclass {
    public static void selectAllFromdb(HashMap<String, String> users){
        Connection dbcon = null;
        try {
            Class.forName("org.postgresql.Driver").newInstance();
            dbcon = DriverManager.getConnection("jdbc:postgresql://localhost:5432/dbname", "user", "pass");
            Statement st = dbcon.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM table1");

            while (rs.next()) {
                String id = rs.getString("userID");
                String name= rs.getString("name");

                users.put(id, name);
            }

            rs.close();
            dbcon.close();
        } catch (Exception e) {
            System.out.println("DB Error.\n" + e + "\n");
            System.exit(-1);
        }
    }
}

Und am ende die succes.jsp Datei:

Succes!

<% User user = (User) request.getAttribute("user"); %> <%= user.getUserName() %>!

Eine kleine alternative Lösung mit getSession() in Login.java:

            request.getSession().setAttribute("user", user);

            response.sendRedirect("succes.jsp");
        <%
        User user = (User) session.getAttribute("user");
        %>
        <%= user.getUserName() %>!
Suchen
Kategorien
Archiv

You are currently browsing the archives for the Datenbank category.