Jan Roeper - Informatiktipps

Anzeige www.rotturm.com

java, windows, software-engineering

Tomcat und Servlets im Server2Go 14.12.2015

Mit Server2Go wird auf http://www.server2go-web.de/ für Windows ein portabler Apache mit PHP, SQLite, MySQL und Perl zur Verfügung gestellt (WAMP-Stack).
Für die Projekte in SE ist die Integration von Servlets oder JavaServerPages nötig.
Der übliche Weg ist ein dem Apache nachgeschalteter Tomcat als Container für Servlets/JSP.
Somit liefert der Apache html, Grafiken etc. aus, welche mit php oder perl generiert werden können und der Tomcat bearbeitet Anfragen an Servlets oder jsp.
Dabei werden diese Anfragen vom Apache über einen sogenannten Connector zum Tomcat weitergeleitet.

Wichtige Hinweise

server2go.exe 127.0.0.1:4001/
phpMyAdmin: Benutzername:root, ohne Kennwort.
Tomcatmanager: http://127.0.0.1:8080/ , Benutzername: root, ohne Kennwort.

16+8 Schritte, um Servlets/JSP in Server2Go zu integrieren und ein Servlet mit Datenbankabfrage zu entwickeln :O

1) Download server2go
Datei: server2go_a22_psmp.zip
Quelle: http://www.server2go-web.de/download/download.html

Versionshinweis:Apache 2.2.15, PHP 5.3.2, SQLite, MySQL 5.1.46, Perl 5.8

2) Download tomcat
Datei: apache-tomcat-8.0.21-windows-x64.zip
Quelle: http://tomcat.apache.org/download-80.cgi

Versionshinweis:Servlet/JSP Spec: 3.0/2.2, Apache Tomcat version: 8.0.x

3) Download Connector-Modul mod_jk
Datei: mod_jk-1.2.31-httpd-2.2.3.so
Quelle: http://apache.copahost.com//tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/

Versionshinweis:mod_jk-1.2.31-httpd-2.2.3.so is for Apache 2.2.x. It has been build against version 2.2.3, but should work with Apache 2.2.0 and later.

4) Server2go.zip entpacken, tomcat.zip verschieben nach server2go/server/ und dort entpacken. Verzeichnis umbenennen in apache-tomcat.

Hinweis: Bei Server2Go befinden sich die einzelnen Applikationen (mysql,php,perl) ebenfalls in diesem Verzeichnis.

5) Verzeichnis server2go/server/apache-tomcat/webapps verschieben[!] nach server2go/htdocs/webapps.

Hinweis: Servlets und Javaserverpages werden vom Tomcat aus dem webapps-Verzeichnis geladen, dieses befindet sich direkt im Tomcatordner. Um die Verzeichnisstruktur von Server2go weiterzuverwenden, wird das webapp-Verzeichnis verschoben.

6) Datei mod_jk-1.2.31-httpd-2.2.3.so verschieben nach server2go/server/Apache/modules und in mod_jk.so umbennen.

Hinweis: Das Connector-Modul mod_jk leitet die jsp/Servlet-Anfragen vom Apache zum Tomcat weiter.

7) Datei server2go/server/apache-tomcat/conf/server.xml editieren:
7.1)Angabe, wo das webapps Verzeichnis liegt:
alt:
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
neu:
<Host name="localhost"  appBase="../../htdocs/webapps" unpackWARs="true" autoDeploy="true">
7.2) Definieren, daß der Tomcat vom Apache weitergeleitete Anfragen per Connectorport annehmen soll:

Hinweis: in der Version apache-tomcat-xxx.zip meist schon vorhanden [falls nicht vorhanden - einfügen/anpassen]

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
8) Datei server2go/server/apache-tomcat/conf/workers.properties erstellen und mit folgendem Inhalt speichern:
worker.list=myWorker
worker.myWorker.port=8009
worker.myWorker.host=localhost
worker.myWorker.type=ajp13

Hinweis: Die Angaben müssen mit den obigen Connectorattributen [in server.xml] übereinstimmen.

9) Datei server2go/server/config_tpl/httpd.conf editieren:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile ../apache-tomcat/conf/workers.properties
JkLogFile ../apache-tomcat/logs/mod_jk.log 
JkLogLevel debug 
Alias /examples ../../htdocs/examples
JkMount /examples/* myWorker
JkMount /examples/*.jsp myWorker
Alias /mywebapp ../../htdocs/mywebapp
JkMount /mywebapp/* myWorker

Hinweis: Mit diesen Angaben werden die http-Anfragen mit der URI host/examples/* und host/mywebapp/* über den myWorker-Connector weitergeleitet.
"examples" enthält Beispiele für jsp/Servlets, "mywebapp" dient für obiges Beispiel eines ersten, eigenen Servlets.

10) Datei server2go/server/apache-tomcat/conf/tomcat-users.xml editieren:
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="root" password="" roles="manager-gui,admin-gui"/>

Hinweis: Um den Tomcat über das Webinterface administrieren zu können, müssen die Nutzer mit Rollen eingetragen werden. Login/Passwort wie bei phpMyAdmin gewählt.

11) Datei server2go/starttomcat.bat erstellen und mit folgendem Inhalt speichern:
@echo off
set PATH=%PATH%;C:\Windows\System32;
if not "%JAVA_HOME%" == "" goto gotJava
For /F "tokens=1" %%i in ('dir /AD /B C:\Programme\java\jdk*^|Find /i "jdk"') Do @set JAVA_HOME=C:\Programme\java\%%i
if not "%JAVA_HOME%" == "" goto gotJava
if not "%JRE_HOME%" == "" goto gotJava
For /F "tokens=1" %%i in ('dir /AD /B C:\Programme\java\jre*^|Find /i "jre"') Do @set JRE_HOME=C:\Programme\java\%%i
:gotJava
cd server/apache-tomcat/bin
startup.bat

Hinweis: Das Skript versucht, den Pfad zur Javainstallation zu ermitteln, hier sind evtl. Anpassungen nötig.

12) Datei server2go/shutdowntomcat.bat erstellen und mit folgendem Inhalt speichern:
@echo off
set PATH=%PATH%;C:\Windows\System32;
if not "%JAVA_HOME%" == "" goto gotJava
For /F "tokens=1" %%i in ('dir /AD /B C:\Programme\java\jdk*^|Find /i "jdk"') Do @set JAVA_HOME=C:\Programme\java\%%i
if not "%JAVA_HOME%" == "" goto gotJava
if not "%JRE_HOME%" == "" goto gotJava
For /F "tokens=1" %%i in ('dir /AD /B C:\Programme\java\jre*^|Find /i "jre"') Do @set JRE_HOME=C:\Programme\java\%%i
:gotJava
cd server/apache-tomcat/bin
shutdown.bat

Hinweis: siehe 11)

13) Datei server2go/pms_config.ini editieren:
Startup1=starttomcat.bat
und
Shutdown1=shutdowntomcat.bat

Hinweis: Somit wird der Tomcat automatisch mitgestartet und beendet. und

BrowserType=FIREFOX

Hinweis: In Win7/8 Probleme mit ie: schließt automatisch und somit wird server2go beendet.

14) Datei server2go/server/apache-tomcat/bin/startup.bat editieren:

alt:
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
neu:
call "%EXECUTABLE%" run %CMD_LINE_ARGS%

Hinweis: Somit wird kein Konsolenfenster für den Tomcat geöffnet.

15) Datei server2go/htdocs/index.php editieren:

An den entsprechenden Stellen auf die Tomcatintegration verweisen, Samples, Zugriff auf Tomcat etc.

[16) Datei server2go/pms_config.ini editieren:]

alt:
LocalMirror=1
neu:
LocalMirror=0

Hinweis: Somit können Daten in der Datenbank gespeichert werden. Nicht für Server2Go auf CD/DVD etc.

Beispielservlet mit Datenbankabfrage:

1) Download JDBC-Treiber

Datei: mysql-connector-java-5.1.15.zip
Quelle: http://www.mysql.com/downloads/connector/j/

2) Verzeichnisse erstellen: webapps/mywebapp/WEB-INF/ , webapps/mywebapp/WEB-INF/classes und webapps/mywebapp/WEB-INF/lib

3) JDBC-Treiber entpacken und die Datei mysql-connector-java-5.1.15-bin.jar im Verzeichnis webapps/mywebapp/WEB-INF/lib speichern.

4) Datei erstellen: webapps/mywebapp/WEB-INF/web.xml mit Inhalt:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">  
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>MyServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>
</web-app>

5) Datei erstellen: webapps/mywebapp/WEB-INF/classes/MyServlet.java mit Inhalt:
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

public class MyServlet extends HttpServlet {
	public static void main(String args[]) throws Exception {
		System.out.println("start");
		PrintWriter pw = new PrintWriter(System.out);
		doMysql(pw);
		pw.flush();
		pw.close();
		}

	protected static void doMysql(PrintWriter out) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {
		Class.forName("com.mysql.jdbc.Driver").newInstance(); 
		out.println("stelle Verbindung her...<br>");
		Connection con=null;
		con= DriverManager.getConnection("jdbc:mysql://localhost:7188/server2go","root","");
		Statement stmt = con.createStatement();
		ResultSet rs = stmt.executeQuery( "SELECT * FROM items" );
		while ( rs.next() )
			out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3)+"<br>");
		out.println("schließe Verbindung ...");
		con.close();
		}

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html><head><title>MyServlet</title></head><body>");
		out.println("MyServlet!<br>");
		try {
			doMysql(out);
			} catch(Exception ex) {out.println("Fehler bei doMysql: "+ex);};
		out.println("</body></html>");
		out.flush();
		out.close();
		}
	}
6) Datei MyServlet.java compilieren mit Verweis auf Servlet-api und JDBC:
C:\Dokumente und Einstellungen\roeper\Desktop\server2go\htdocs\webapps\mywebapp\WEB-INF\classes>javac -classpath "C:\Dokumente und Einstellungen\roeper\Desktop\server2go\server\apache-tomcat\lib\servlet-api.jar";../lib/mysql-connector-java-5.1.15-bin.jar MyServlet.java

Hinweis: Pfade anpassen!

7) Datei MyServlet.class in Konsole testen (server2go gestartet) mit Verweis auf Servlet-api und JDBC:
C:\Dokumente und Einstellungen\roeper\Desktop\server2go\htdocs\webapps\mywebapp\WEB-INF\classes>java -classpath .;"C:\Dokumente und Einstellungen\roeper\Desktop\server2go\server\apache-tomcat\lib\servlet-api.jar";../lib/mysql-connector-java-5.1.15-bin.jar MyServlet

Hinweis: Pfade anpassen!

8) MyServlet im Browser testen

URI:http://127.0.0.1:4001/mywebapp/MyServlet

Eventuell muß das Servlet neu geladen werden, d.h. unter Tomcatmanager einloggen und dort neu laden.

Quellen:
http://www.server2go-web.de
http://tomcat.apache.org/
http://www.apache.org/
http://tomcat.apache.org/connectors-doc/generic_howto/quick.html
http://onjava.com/pub/a/onjava/2002/11/20/tomcat.html
http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html
http://openbook.galileocomputing.de/javainsel/javainsel_23_012.htm