Java Enterprise Edition 6 – Servlet

Ein einfaches Code-Beispiel für ein Java Servlet nach JEE6-Konventionen. Voll kompatibel mit GlassFish v3.

Beispiel:
Ausführen mit: http://localhost:8080/Projektname/servletpower?power=1&name=Benny

controller.web.PowerServlet.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package controller.web;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
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="Power Servlet", urlPatterns={"/servletpower"})
public class PowerServlet extends HttpServlet
{
    // Die Request-Methode realisiert die Ausgabe an den Client (Web-Browser)
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        response.setContentType("text/html");
        Enumeration parameters = request.getParameterNames();
        String strParameter;
        String strValue;
 
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>PowerServlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>PowerServlet</h1>");
        out.println("Homepage: <a href=\"http://localhost" + request.getContextPath() + ">Weblink</a><br/>");
        if(parameters.hasMoreElements() == false)
        {
            out.println("Keine Parameter &uuml;bergeben.");
        }
        else
        {
            while(parameters.hasMoreElements())
            {
                strParameter    = parameters.nextElement().toString();
                strValue        = request.getParameter(strParameter);
                out.print(strParameter+": ");
                out.print(strValue);
                out.print("<br/>");
            }
        }
        out.println("</body>");
        out.println("</html>");
    }
 
    @Override
    // Die Methode doGet wird automatisch bei Eingabe
    // der Webseite in der Adresszeile des Browsers aufgerufen
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        processRequest(request, response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        processRequest(request, response);
    }
 
    @Override
    public String getServletInfo()
    {
        return "Kurze Beschreibung";
    }
}

SQL-Statements als Prepared Statements

Ein PreparedStatement besteht ist ein SQL-Statement mit Platzhaltern. Das Besondere daran ist, dass das Statement überprüft wird, bevor die Platzhalter gesetzt werden. Dadurch werden SQL-Injections verhindert. Eine SQL-Injection basiert darauf, dass ein „normales“ SQL-Statement verlängert wird. Zum Beispiel um ein „; DROP TABLE“. Durch das „;“ wird an das eigentliche SQL-Statement ein zweites Statement (nämlich DROP-Table) angehangen. Dadurch werden zwei SQL-Statements ausgeführt, was aber nicht im Sinne des Betreibers ist. Mit Prepared Statements kann dies nicht passieren, da hier das „;“ durch die vorherige Überprüfung schon missbilligt wird.

Beispiel für ein PreparedStatement:

repository.JdbcConnection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    public void findById(int nummer)
    {
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sqlStr = "SELECT * FROM cd WHERE id=?";
        LinkedList<cd_VO> voList = new LinkedList<cd_VO>();
        CD_VO vo;
 
        try
        {
            con = getConnection();
            ps = con.prepareStatement(sqlStr);
            ps.setInt(1, nummer);
            rs = ps.executeQuery();
 
            while(rs.next())
            {
                vo = new CD_VO();
                vo.setId( rs.getInt("id") );
                vo.setInterpret( rs.getString("interpret") );
                vo.setTitel( rs.getString("titel") );
                vo.setVeroeffentlichung( rs.getDate("veroeffentlichung") );
                vo.setCoverDatei( rs.getString("coverdatei") );
                voList.add(vo);
                // Testausgabe:
                System.out.println( vo.getId() );
                System.out.println( vo.getInterpret() );
                System.out.println( vo.getTitel() );
                System.out.println( vo.getVeroeffentlichung() );
                System.out.println( vo.getCoverDatei() );
            }
        }
        catch(SQLException sqlex)
        {
            sqlex.printStackTrace();
        }
        finally
        {
            try
            {
                if( ps != null )    ps.close();
                if( con != null )   con.close();
            }
            catch(SQLException excSQL)
            {
                System.out.println("Fehler beim Abbau der SQL-Verbindung:");
                excSQL.printStackTrace();
            }
        }
    }

JDBC Datenbankanbindung mit MySQL

MySQL-Datenbankabfrage mit der Java Database Connectivity aus der Java Enterprise Edition. Für die Verwendung wird die Bibliothek mysql-connector-java-5.1.5-bin.jar benötigt, damit der MySQL Driver für die JDBC zur Verfügung steht. Das Kürzel „VO“ bezeichnet die Value Objects, welche die Datensätze in der Datenbank sind.

data.CD_VO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package data;
 
import java.sql.Date;
import java.util.ArrayList;
 
public class CD_VO
{
    int id;
    String titel;
    String interpret;
    Date veroeffentlichung;
    String coverDatei;
    ArrayList<song_VO> songs;
 
    public CD_VO()
    {
        this.id = 0;
        this.titel = "";
        this.interpret = "";
        this.veroeffentlichung = new java.sql.Date(2010-10-10);
        this.coverDatei = "";
        songs = new ArrayList<song_VO>();
    }
 
    public CD_VO(String titel, String interpret, Date veroeffentlichung, String coverDatei)
    {
        setID();
        this.titel = titel;
        this.interpret = interpret;
        this.veroeffentlichung = veroeffentlichung;
        this.coverDatei = coverDatei;
        songs = new ArrayList<song_VO>();
    }
 
    private void setID()
    {
        this.id++;
    }
 
    public String getCoverDatei()
    {
        return coverDatei;
    }
 
    public void setCoverDatei(String coverDatei)
    {
        this.coverDatei = coverDatei;
    }
 
    public long getId()
    {
        return id;
    }
 
    public void setId(int id)
    {
        this.id = id;
    }
 
    public String getInterpret()
    {
        return interpret;
    }
 
    public void setInterpret(String interpret)
    {
        this.interpret = interpret;
    }
 
    public String getTitel()
    {
        return titel;
    }
 
    public void setTitel(String titel)
    {
        this.titel = titel;
    }
 
    public Date getVeroeffentlichung()
    {
        return veroeffentlichung;
    }
 
    public void setVeroeffentlichung(Date veroeffentlichung)
    {
        this.veroeffentlichung = veroeffentlichung;
    }

repository.JdbcConnection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package repository;
 
import data.CD_VO;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
 
public class JdbcConnection
{
    protected Connection getConnection()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://localhost/jee", "root", "password");
        }
        catch(SQLException excSQL)
        {
            System.out.println("Fehler beim Aufbau der SQL-Verbindung:");
            excSQL.printStackTrace();
            return null;
        }
        catch(ClassNotFoundException excCNF)
        {
            System.out.println("Treiber-Manager nicht gefunden.");
            excCNF.printStackTrace();
            return null;
        }
    }
 
    public void findAllTest()
    {
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sqlStr = "SELECT * FROM cd";
        LinkedList<cd_VO> voList = new LinkedList<cd_VO>();
        CD_VO vo;
 
        try
        {
            con = getConnection();
            ps = con.prepareStatement(sqlStr);
            rs = ps.executeQuery();
 
            while(rs.next())
            {
                vo = new CD_VO();
                vo.setId( rs.getInt("id") );
                vo.setInterpret( rs.getString("interpret") );
                vo.setTitel( rs.getString("titel") );
                vo.setVeroeffentlichung( rs.getDate("veroeffentlichung") );
                vo.setCoverDatei( rs.getString("coverdatei") );
                voList.add(vo);
                // Testausgabe:
                System.out.println( vo.getId() );
                System.out.println( vo.getInterpret() );
                System.out.println( vo.getTitel() );
                System.out.println( vo.getVeroeffentlichung() );
                System.out.println( vo.getCoverDatei() );
            }
        }
        catch(SQLException excSQL)
        {
            System.out.println("Fehler beim Abruf aus der SQL-Verbindung:");
            excSQL.printStackTrace();
        }
        finally
        {
            try
            {
                if( ps != null )    ps.close();
                if( con != null )   con.close();
            }
            catch(SQLException excSQL)
            {
                System.out.println("Fehler beim Abbau der SQL-Verbindung:");
                excSQL.printStackTrace();
            }
        }
    }
}

repository.Main

1
2
3
4
5
6
7
8
9
10
package repository;
 
public class Main
{
    public static void main(String args[])
    {
        JdbcConnection test = new JdbcConnection();
        test.findAllTest();
    }
}

Java Database Connectivity in Aktion mit phpMyAdmin und NetBeans