# Servlet Datenbank



## legalizeSINCE88 (16. Mrz 2014)

Hallo

habe folgendes Problem.
Ich habe diesen Java Code(Abfrage.java)

```
package ab;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.naming.Context;
import javax.naming.InitialContext;
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;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import Login.Kunde;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.PdfStructTreeController.returnType;

@WebServlet("/Abfrage")
public class Abfrage extends HttpServlet {
	private static final long serialVersionUID = 1L;

	//Variablen initialisieren
	String nachname = null;
	String vorname = null;
	String datum = null;
	Date date = new Date();
	DateFormat df;
	Paragraph preface = new Paragraph();
	public static final Font BOLD_UNDERLINED = new Font(FontFamily.TIMES_ROMAN,18, Font.BOLD | Font.UNDERLINE);
	public static final Font cat = new Font(FontFamily.TIMES_ROMAN, 18,	Font.BOLD);
	private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.BOLD);
	private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12,Font.NORMAL, BaseColor.RED);
	
	//doPost Methode wird verwendet da in der URL nich die Übergabewerte angezeigt werden sollen
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		nachname = request.getParameter("nachname");
		vorname = request.getParameter("vorname");
		String benutzer = request.getParameter("hiddenBenutzer");
		
	
		df = DateFormat.getDateTimeInstance( /* Datumformatieren */ DateFormat.FULL,
                /* Zeit */ DateFormat.MEDIUM );
		
		Abfrage_Kunde abKunde = getData(nachname,vorname,benutzer);
		
		if(abKunde.getNachname()== null)
		{
		
			try{
				 response.setContentType("application/pdf");
				 Document document = new Document();	
				 PdfWriter.getInstance(document, response.getOutputStream());
			     document.open();	      
			     addContent(document);
			     document.close();
			     
				}catch(Exception e)
				{
					e.printStackTrace();
				}
	
		}else
		{
		HttpSession session = request.getSession();
		session.setAttribute("datum", df.format(date));
		session.setAttribute("UID", abKunde.getUID());
		session.setAttribute("Nachname", abKunde.getNachname());
		session.setAttribute("Vorname", abKunde.getVorname());
		session.setAttribute("Kategorie", abKunde.getKategorie());
		session.setAttribute("Unterkategorie", abKunde.getUnterkategorie());
		session.setAttribute("Geburtsdatum", abKunde.getGeburtsdatum());		
		RequestDispatcher dispatcher = request.getRequestDispatcher("abfrage.jsp");
		dispatcher.forward(request, response);
		}
		
	}


	private Abfrage_Kunde getData(String nachname, String vorname,String benutzer) {
		Abfrage_Kunde kunde = new Abfrage_Kunde();
		//Alles Groß schreiben
		String nachname_GROSS = nachname.toUpperCase();
		String vorname_GROSS = vorname.toUpperCase();
		
		String nachname_Umlaute = nachname_GROSS.replaceAll("['Ä','Ü','Ö','ß']", "['AE','UE','OE','SS']");
		String vorname_Umlaute = vorname_GROSS.replaceAll("['Ä','Ü','Ö','ß']", "['AE','UE','OE','SS']");
		
		if(nachname == null || nachname.length()< 1|| vorname == null || vorname.length()< 1){
			return kunde;
		}
		try{
			Context initCtx = new InitialContext();
			Context envCtx =(Context)initCtx.lookup("java:comp/env");
			DataSource dataSource = (DataSource)envCtx.lookup("jdbc/one");
			Connection connection = dataSource.getConnection();
			PreparedStatement statement = connection.prepareStatement(
					"select * from onecheck_daten where Nachname=? and Vorname=? OR AliasName=? AND ?");
			statement.setString(1, nachname);
			statement.setString(2, vorname);
			statement.setString(3, vorname);
			statement.setString(4, nachname);
			ResultSet resultSet = statement.executeQuery();
			
			if(resultSet.next())
			{
				kunde.setUID(resultSet.getString("UID"));
				kunde.setNachname(resultSet.getString("Nachname"));
				kunde.setVorname(resultSet.getString("Vorname"));
				kunde.setKategorie(resultSet.getString("Kategorie"));
				kunde.setUnterkategorie(resultSet.getString("Unterkategorie"));
				kunde.setGeburtsdatum(resultSet.getString("Geburtsdatum"));
				
			}
			
			
			PreparedStatement eintragen = connection.prepareStatement(
					"Insert into abfragen(KUNDEN_NAME,Nachname_Abfrage,Vorname_Abfrage,Datum_Uhrzeit)VALUES(?,?,?,?)");
			eintragen.setString(1, benutzer);
			eintragen.setString(2, nachname);
			eintragen.setString(3, vorname);
			eintragen.setString(4, df.format(date));
			eintragen.executeUpdate();
			
			eintragen.close();			
			statement.close();
			connection.close();
			
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		return kunde;
	}

	private void addContent(Document document) {
		df = DateFormat.getDateTimeInstance( /* Datumformatieren */ DateFormat.FULL,
                /* Zeit */ DateFormat.MEDIUM );
		try{
		preface.add(new Paragraph("Abfrage vom: " + df.format(date), cat));
		addEmptyLine(preface, 1);
		preface.add(new Paragraph("Übersicht", BOLD_UNDERLINED));
		addEmptyLine(preface, 1);
		preface.add(new Paragraph("Keine Daten zu " + nachname + " " + vorname + " gefunden",  redFont));
		document.add(preface);
		
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	private void addEmptyLine(Paragraph paragraph, int number) {
		for (int i = 0; i < number; i++) {
		      paragraph.add(new Paragraph(" "));
		    }
		
	}
}
```

Und diese JSP(abfrage.jsp)

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Abfrage</title>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">

function drucken(){		
	
	$('#formular1').fadeOut();
	$('#abmelden').fadeOut();
	$('#tabelle_pdf').fadeOut();
	$('#zurück').fadeIn(function(){		
		window.print();
	});
	
}
</script>

<style type="text/css">
body {
	color: #333333;	
}

#formular1 {
	background: #FFCC66;
	width: 180px;
	margin: 0 auto;
	padding: 5px 0px 15px 15px;

}
#header1
{
	width: 250px;
	margin: 0 auto;
}
#abmelden
{
	color:blue;
	width: 180px;
	margin: 0 auto;
}
#zurück
{
	color:blue;
	width: 180px;
	margin: 0 auto;
}
#tabelle_pdf
{
	color:blue;
	width: 180px;
	margin: 0 auto;
}
#zurück
{
display: none;
margin: -32px 1020px;
}
#tabelle_pdf
{
display: none;
}
table 
{
width: 600px;
margin: 0 auto;

}
td 
{
background-color: #def;
}

</style>
</head>
<body>	
<jsp:include page="logo.jsp"></jsp:include>
	<div id="header1">
	<h1>Abfrage/Übersicht</h1>
	</div>
	<form action="Abfrage" method="post" id="formular1">
		<input type="hidden" name="hiddenBenutzer" value="${user}"> <!-- Expression Language -->
		Vorname: <input type="text"  name="vorname" > 
		Nachname: <input type="text"  name="nachname"> 
		<input type="submit" value="suchen" onclick="javascript:anzeigen();">
	</form>
	<c:forEach var="abKunde" items="${UID}">
	<p>
		<table id="tabelle">
			<tr>
				<th colspan="5">Abfrage vom: ${datum}</th>
			</tr>
			<tr><th></th></tr>
			<tr>
				<th>Nachname</th>
				<th>Vorname</th>
				<th>Kategorie</th>
				<th>Unterkategorie</th>
				<th>Geburtsdatum</th>
				<th>PDF</th>
			</tr>
			<c:forEach var="Kunde" items="${abKunde}">
				<tr><td>${Nachname}</td><td>${Vorname}</td><td>${Kategorie}</td><td>${Unterkategorie}</td><td>${Geburtsdatum}</td><td><a href="http://localhost:8080/onecheck/Pdf_einzeln?uid=${UID}">PDF erstellen</a></td></tr>
			</c:forEach>
			<tr><th><a href="javascript:drucken();">Tabelle drucken</a></th></tr>
		</table> 	
	</c:forEach>	
	<div id="abmelden">
		<jsp:include page="data.jsp"></jsp:include><jsp:include page="Passwortändern.jsp"></jsp:include>
	</div>	
	<div id="zurück">
		<jsp:include page="data_zurück.jsp"></jsp:include>
	</div>
</body>
</html>
```

In der "abfrage.jsp" gibt der Benutzer einen Vor, sowie einen Nachnamen ein.
Daraufhin werden per POST die Zwei Eingaben an die "Abfrage.java" zur Auswertung geschickt.
Diese öffnet eine Datenbank, schaut ob beide Namen vertreten sind und gibt die Antwort in einer Tabelle aus. 
Soweit sogut, nur ist es jetzt so, das wenn man den Browser, egal welchen, schließt, sich einloggt(hier nicht vorhanden) die Tabelle bereits die selben Daten aus der vorherigen Abfrage enthält.

Könnt ihr mir sagen was falsch bzw. was zu tun/ändern ist.


Vielen Dank.


----------

