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:

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() %>!
