JDBC-Ressource über JNDI referenzieren und mit Tomcat verwenden

Nachdem ich in [post id=4681]JNDI Ressourcen anlegen und benutzen[/post] gezeigt habe, wie man eine Zeichenkette über das JNDI verfügbar machen kann, ist es an der Zeit, sich etwas interessanteren Dingen zu widmen.

Ich hatte bereits erwähnt, dass man Datenbankverbindungen über JDBC ebenfalls mit JNDI referenzieren kann. Wie das geht, möchte ich eben am Beispiel einer MySQL-Datenbank zeigen, welche über einen Apache Tomcat 7 Application-Server angesprochen werden soll.
JDBC-Ressource über JNDI referenzieren und mit Tomcat verwenden weiterlesen

Dynamically include files in JSP

This is a good example to dynamically include a header file in JavaServer Pages (JSP):

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JSP Page</title>
  </head>
  <body>        
  <c:set var="userAgent" scope="page" value="${header['User-Agent']}"/>
  <c:choose>
    <c:when test="${fn:contains(userAgent,'iPhone')}">
      <%@include file="header_iphone.jsp" %>
    </c:when>
    <c:when test="${fn:contains(userAgent,'iPad')}">
      <%@include file="header_ipad.jsp" %>
    </c:when>
    <c:when test="${fn:contains(userAgent,'Android')}">
      <%@include file="header_android.jsp" %>
    </c:when>
    <c:otherwise>
      <%@include file="header_other.jsp" %>
    </c:otherwise>
  </c:choose>
</body>
</html>

Get user agent in JSP

This is how you can show the user agent in JavaServer Pages (JSP):

Version 1

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JSP Page</title>
  </head>
  <body>
    <%
      String userAgent = request.getHeader("user-agent");
      out.print(userAgent);
    %>
  </body>
</html>

Version 2

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JSP Page</title>
  </head>
  <body>
    <%
      String userAgent = request.getHeader("user-agent");
    %>
    <%= userAgent %>
  </body>
</html>

Version 3

<%@taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JSP Page</title>
  </head>
  <body>
  <c:out value="${header['User-Agent']}" />
</body>
</html>

Version 4

<%@taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JSP Page</title>
  </head>
  <body>
  <c:set var="userAgent" scope="page" value="${header['User-Agent']}"/>
  <c:out value="${userAgent}" />
</body>
</html>

Version 5

<%@taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JSP Page</title>
  </head>
  <body>
  <c:set var="userAgent" scope="page" value="${header['User-Agent']}"/>
  <%=pageContext.getAttribute("userAgent")%>
</body>
</html>

Andere JSPs in Scriptlets einfügen

Wie man andere JavaServer Pages in einer JavaServer Page einfügen kann, zeigt das folgende Code-Stückchen. Es handelt sich dabei um ein Scriptlet, das bei Vorhandensein eines User-Objektes ein Logout-Formular anzeigt.

scriptlet.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@page import="util.SecurityUtil, persistence.User" %>
<%
	SecurityUtil security = SecurityUtil.getInstance();
	User user = security.getUser();
	if(user != null)
	{
%>
	<%@include file="form-logout.jsp" %>
<%
	}
	else
	{
%>
	<%@include file="form-login.jsp" %>
<%
	}
%>

JEE und AJAX

Exemplarischer Ablauf für die Verwendung von AJAX in JEE:

Servlet.java definiert die zulässigen Aktionen. Beim Auftreten einer Aktion im Servlet, wird die entsprechende ActionClass.java aufgerufen. Die ActionClass.java leitet dann über einen RequestDispatcher an die ajax.jsp weiter und definiert über Request Attributes (request.setAttribute(…)) die jeweiligen Template-Tags, die daraufhin in der ajax.jsp mit der Expression Language (@{…}) angezeigt werden können. Beim Aktivieren eines Links, der auf einen JavaScript-Befehl verweist, in der ajax.jsp, wird ein Request an das AjaxServlet.java gesendet. Das AjaxServlet.java generiert daraufhin aus den erhaltenen Daten einen neuen Output, der dann aktualisiert in der ajax.jsp dargestellt wird.

An dieser Stelle folgt ein Quelltext-Beispiel für ein AjaxServlet.java und eine ajax.jsp. Die ajax.jsp arbeitet mit MooTools 1.2.1 (mootools-1.2.1-core.js), welches als JavaScript eingebunden werden muss.

Quellcode:

ajax.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Title</title>
    <script type="text/javascript" src="mootools-1.2.1-core.js"></script>
    <script type="text/javascript">
    function getSongs(moovar)
    {
        var songRequest = new Request.HTML(
            {
                url: "ajaxservlet",
                update: $('targetBox')
            }).get({'variable': moovar});
    }
    </script>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
    <body>
        <a href="#" onclick="getSongs('BAM!!!')">Shoot!</a>
        <div id="targetBox">Target</div>
    </body>
</html>

AjaxServlet.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
package controller.web;
 
import java.io.IOException;
import java.io.PrintWriter;
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="AjaxServlet", urlPatterns={"/ajaxservlet"})
public class AjaxServlet extends HttpServlet
{
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try
        {
            out.println(request.getParameter("variable"));
        }
        finally
        {
            out.close();
        }
    }
 
    @Override
    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 "Short description";
    }
}