Serveranwendung mit Java

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Falls Du Dich dafür entscheidest, eine Java-Web-Applikation zu bauen,
    könnte diese Sache von mir eine Vorlage sein:

    heinerkuecker.de/JspSpread.html

    Das Beispiel hat keine Persistenz,
    das sollte aber leicht nachzurüsten sein.

    Du müsstest noch eine Benutzerverwaltung dazubauen,
    in welcher Du Deine Spieler mit ID und Passwort pflegst.

    Ich gehe davon aus, dass die Spieler sich mit einem
    Passwort anmelden müssen, weil sonst jeder jeden
    Spielstand bearbeiten könnte.
  • also ich hab mir zumindest schon mal dein JspSpread angeschaut ;)

    aber wie meinst dudas jetzt
    Ich gehe davon aus, dass die Spieler sich mit einem
    Passwort anmelden müssen, weil sonst jeder jeden
    Spielstand bearbeiten könnte.


    der spielstand soll ja vom programm erstellt werden.
    also wenn man das spiel beendet hat, soll das programm der highscore liste
    den spielstand mit namen hinzufügen.
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • Wie ich schon sagte. Ich an deiner Stelle würde JSPs nicht verwenden (und ich wüßte sogar wie ich es tun müßte) . Wenn ich die Taglibs schon wieder sehe... *würg*

    Zur Info: In JSPs kann man ganz normalen Java-Code schreiben. Allerdings hat man irgendwann festgestellt, dass manche Leute Dinge in JSPs gemacht haben, die man dort aus designtechnischen Gründen nicht tun sollte. Nun könnte man zum Schluss kommen, dass dann JSPs die falsche Technologie sind und andere Lösungen suchen (siehe Apache Wicket). Aber nein... stattdessen bedient man sich nun XML-Tags (deswegen Taglib) um das, was man in Java geschrieben hätte nun in XML zu schreiben. Alle Tags die beim obigen Link mit cnG (Präfix) anfangen, gehören z.B. zu einer solchen Taglib. Java-Code kannst du natürlich trotzdem in die JSPs schreiben und mit den Taglibs mischen, damit das Chaos perfekt ist.

    Da du nicht mal HTML benötigst, kann ich nur entschieden von JSPs abraten.
    Verwende einfach statt

    Source Code

    1. <servlet>
    2. <servlet-name>cncaction</servlet-name>
    3. <servlet-class>de.jspspread.servlet.JspSpreadsheetServlet</servlet-class>

    dein eigenes Servlet:

    Source Code

    1. <servlet>
    2. <servlet-name>myname</servlet-name>
    3. <servlet-class>my.package.MyServlet</servlet-class>

    Wie du das baust, steht direkt unter Kapittel 17.1.1 von "Java ist auch eine Insel ":
    boscheri.ch/computer/java/java…java170000400068E1F02F107
  • Widersprüchliche Aussagen

    Leider widersprichst Du Dir in Deinen Aussageb

    ich hatte das jetzt so gedacht, dass ich halt einen server habe, auf dem eine .txt liegt. auf dem server läuft ein programm, dass darauf wartet, dass der benutzer eine verbindung aufbaut.
    wenn dann eine verbindung aufgebaut wird, wird zuerst etwas in die txt geschrieben. (der benutzer trägt sich in die bestenliste ein)
    danach soll die serveranwendung den inhalt der .txt an die clientanwendung schicken, die diesen dann irgendwie dem benutzer sichtbar macht.


    Also Aktivität des Benutzers.

    der spielstand soll ja vom programm erstellt werden.
    also wenn man das spiel beendet hat, soll das programm der highscore liste
    den spielstand mit namen hinzufügen


    Nun dagegen Aktivität des Programmes.

    Falls es sich um eine Programm-Aktivität handelt,
    kannst Du den Spielstand per HTTP-Request an
    ein Servlet senden.
  • tut mir leid, wenn ich mi nicht klar ausdrücke, aber ich bin komplett neu auf dem gebiet, und versuch mich grad ein wenig zurechtzufinden.

    ich glaube das was du zuletzt gesagt hast, ist das was ich eigentlich meine:
    das programm teilt dem server den spielstand mit
    dieser ergänzt eine vorhandene "liste" mit dem neuen spielstand
    zum schluss wird die neue liste vom server an das programm gesendet, und dieses zeigt das an.

    wäre das sowas, wie hafner sagte, mit den servlets?


    nochmals sry, wenn ich hier irgendwie für verwirrung sorge, aber das ist keine absicht ;9
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • Du kannst die "Aktivität des Benutzers" sowie die "Aktivität des Programmes" sowohl nur mit Servlets als auch mit JSPs und Servlet (denn die JSPs brauchen auch ein Servlet) realisieren.
    Aber wie ich schon sagte, sind JSPs dafür da, dass man Java in HTML oder XML-Code schreiben kann.

    Wenn du also kein HTML oder XML verwendest, warum solltest du JSPs verwenden?

    Wenn du XML verwenden willst, dann solltest du vernünftig abwegen ob die Menge des XML es lohnend macht extra JSPs zu verwenden. Bei der Darstellung einer einzelnen Liste ist das sicherlich nicht notwendig.
  • ok also werd ich nur servlets verwenden.
    brauch ich denn dann gar kein jsp mehr? weil die bei "java ist auch eine insel" gleich im ersten beispiel schon jsp verwenden.
    oder ist das nur ne einfache möglichkeit, um das servlet irgendwo einzubinden?

    ein tomcat server hab ich auch schon, der läuft ;)

    dann noch mal danke an alle für die hilfe.

    mfg
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • Das liegt daran, dass mit dem ersten Beispiel für Servlets schon alles gesagt ist:

    Source Code

    1. import java.io.*;
    2. import javax.servlet.*;
    3. public class FirstServlet extends GenericServlet
    4. {
    5. public void service( ServletRequest request, ServletResponse response )
    6. throws ServletException, IOException
    7. {
    8. PrintWriter out = response.getWriter();
    9. out.println( "’Chr! Schnarch! Razong! Chr! Chr! Rapüh!’"+
    10. " (Disneys beste Comics, Band 5, S. 218)");
    11. }
    12. }
    13. // Quele: Java ist auch eine Insel von Christian Ullenboom
    Display All

    Einfach per out.println() das ausgeben, was dann beim Browserzugriff (vergiss nicht, dass du mit deinem Browser die Serveranwendung testen kannst, bevor du das Spiel darauf anpasst) oder beim Zugriff deines Programms auf die URL sichtbar sein soll.

    Source Code

    1. public class TestServlet extends GenericServlet
    2. {
    3. @Override
    4. public void service(ServletRequest request, ServletResponse response)
    5. throws ServletException, IOException
    6. {
    7. String name = request.getParameter("name");
    8. Integer points = new Integer(request.getParameter("points"));
    9. // Aktuallisiere deine Bestenliste mit den Daten
    10. String list = ""; // Hole dir die aktuelle Bestenliste
    11. response.getWriter().println(list);
    12. }
    13. }
    Display All
  • Die web.xml musst du dann natürlich noch anpassen (ungetestet):

    Source Code

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    5. <display-name>Servlet 2.4 application</display-name>
    6. <servlet>
    7. <servlet-name>testServlet</servlet-name>
    8. <servlet-class>my.package.TestServlet</servlet-class>
    9. </servlet>
    10. <servlet-mapping>
    11. <servlet-name>testServlet</servlet-name>
    12. <url-pattern>/test</url-pattern>
    13. </servlet-mapping>
    14. </web-app>
    Display All


    Wenn dann dein Server gestartet ist kannst du so darauf zugreifen:
    localhost:8080/test?name=Max&points=12345

    localhost adressiert den Rechner auf dem du gerade bist. Hier muss dann später natürlich die richtige Domain oder IP des Servers hin.
    Achtung! Der Port 8080 ist von mir geraten! Beim Start deines Servers steht dort welcher Port offen ist. Wenn du in der URL keinen Port angibst wird Port 80 (Standard für HTTP) verwendet (easy-coding.de/ und easy-coding.de:80/ sind z.B. das Selbe).
    test ist das url-pattern von der web.xml
    name und points die zu übergebenden Parameter und die zugehörigen Werte.
  • huhu

    thema is doch noch net erledigt :/
    ich hab eigentlich en ganz simple frage:
    in "java ist auch eine insel steht folgendes:

    Beispiel Wer die Beispiele des Buches ausprobieren möchte, der kann für sie einen Kontext einrichten.

    Source Code

    1. <Context path="/jt"
    2. docBase="C:/JavaBook/programme/17_ServletsJSP"
    3. reloadable="true" />

    Nach der Änderung muss Tomcat neu gestartet werden; am einfachten über die Tray mittels Configure | Stop und Start. Nach dem Start ist unter localhost:8080/manager/html unsere Applikation aufgeführt. Das erste JSP datum lässt sich dann unter localhost:8080/jt/datum.jsp ausprobieren. Tomcat hat gelegentlich Probleme mit Verzeichnissen auf Shared-Laufwerken."


    meine frage: wo genau muss ich das darein schreiben?!? ich hab gegooelt, in der dokumentation nachgeschaut, aber ich werd daraus nicht schlau.
    und ich welches verzeichnis muss ich dann die datein packen?

    hier mal die xml:

    Source Code

    1. <?xml version='1.0' encoding='utf-8'?>
    2. <!--
    3. Licensed to the Apache Software Foundation (ASF) under one or more
    4. contributor license agreements. See the NOTICE file distributed with
    5. this work for additional information regarding copyright ownership.
    6. The ASF licenses this file to You under the Apache License, Version 2.0
    7. (the "License"); you may not use this file except in compliance with
    8. the License. You may obtain a copy of the License at
    9. http://www.apache.org/licenses/LICENSE-2.0
    10. Unless required by applicable law or agreed to in writing, software
    11. distributed under the License is distributed on an "AS IS" BASIS,
    12. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13. See the License for the specific language governing permissions and
    14. limitations under the License.
    15. -->
    16. <!-- Note: A "Server" is not itself a "Container", so you may not
    17. define subcomponents such as "Valves" at this level.
    18. Documentation at /docs/config/server.html
    19. -->
    20. <Server port="8005" shutdown="SHUTDOWN">
    21. <!--APR library loader. Documentation at /docs/apr.html -->
    22. <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    23. <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
    24. <Listener className="org.apache.catalina.core.JasperListener" />
    25. <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->
    26. <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
    27. <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    28. <!-- Global JNDI resources
    29. Documentation at /docs/jndi-resources-howto.html
    30. -->
    31. <GlobalNamingResources>
    32. <!-- Editable user database that can also be used by
    33. UserDatabaseRealm to authenticate users
    34. -->
    35. <Resource name="UserDatabase" auth="Container"
    36. type="org.apache.catalina.UserDatabase"
    37. description="User database that can be updated and saved"
    38. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
    39. pathname="conf/tomcat-users.xml" />
    40. </GlobalNamingResources>
    41. <!-- A "Service" is a collection of one or more "Connectors" that share
    42. a single "Container" Note: A "Service" is not itself a "Container",
    43. so you may not define subcomponents such as "Valves" at this level.
    44. Documentation at /docs/config/service.html
    45. -->
    46. <Service name="Catalina">
    47. <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    48. <!--
    49. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    50. maxThreads="150" minSpareThreads="4"/>
    51. -->
    52. <!-- A "Connector" represents an endpoint by which requests are received
    53. and responses are returned. Documentation at :
    54. Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
    55. Java AJP Connector: /docs/config/ajp.html
    56. APR (HTTP/AJP) Connector: /docs/apr.html
    57. Define a non-SSL HTTP/1.1 Connector on port 8080
    58. -->
    59. <Connector port="8080" protocol="HTTP/1.1"
    60. connectionTimeout="20000"
    61. redirectPort="8443" />
    62. <!-- A "Connector" using the shared thread pool-->
    63. <!--
    64. <Connector executor="tomcatThreadPool"
    65. port="8080" protocol="HTTP/1.1"
    66. connectionTimeout="20000"
    67. redirectPort="8443" />
    68. -->
    69. <!-- Define a SSL HTTP/1.1 Connector on port 8443
    70. This connector uses the JSSE configuration, when using APR, the
    71. connector should be using the OpenSSL style configuration
    72. described in the APR documentation -->
    73. <!--
    74. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    75. maxThreads="150" scheme="https" secure="true"
    76. clientAuth="false" sslProtocol="TLS" />
    77. -->
    78. <!-- Define an AJP 1.3 Connector on port 8009 -->
    79. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    80. <!-- An Engine represents the entry point (within Catalina) that processes
    81. every request. The Engine implementation for Tomcat stand alone
    82. analyzes the HTTP headers included with the request, and passes them
    83. on to the appropriate Host (virtual host).
    84. Documentation at /docs/config/engine.html -->
    85. <!-- You should set jvmRoute to support load-balancing via AJP ie :
    86. <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">
    87. -->
    88. <Engine name="Catalina" defaultHost="localhost">
    89. <!--For clustering, please take a look at documentation at:
    90. /docs/cluster-howto.html (simple how to)
    91. /docs/config/cluster.html (reference documentation) -->
    92. <!--
    93. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    94. -->
    95. <!-- The request dumper valve dumps useful debugging information about
    96. the request and response data received and sent by Tomcat.
    97. Documentation at: /docs/config/valve.html -->
    98. <!--
    99. <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
    100. -->
    101. <!-- This Realm uses the UserDatabase configured in the global JNDI
    102. resources under the key "UserDatabase". Any edits
    103. that are performed against this UserDatabase are immediately
    104. available for use by the Realm. -->
    105. <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    106. resourceName="UserDatabase"/>
    107. <!-- Define the default virtual host
    108. Note: XML Schema validation will not work with Xerces 2.2.
    109. -->
    110. <Host name="localhost" appBase="webapps"
    111. unpackWARs="true" autoDeploy="true"
    112. xmlValidation="false" xmlNamespaceAware="false">
    113. <!-- SingleSignOn valve, share authentication between web applications
    114. Documentation at: /docs/config/valve.html -->
    115. <!--
    116. <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    117. -->
    118. <!-- Access log processes all example.
    119. Documentation at: /docs/config/valve.html -->
    120. <!--
    121. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    122. prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
    123. -->
    124. </Host>
    125. </Engine>
    126. </Service>
    127. </Server>
    Display All
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • Ich weiß nicht wie es im konkreten Fall ist, aber generell findest du im Tomcat Handbuch dazu folgende Hinweise: tomcat.apache.org/tomcat-6.0-doc/config/context.html

    For Tomcat 6, unlike Tomcat 4.x, it is NOT recommended to place <Context> elements directly in the server.xml file. This is because it makes modifing the Context configuration more invasive since the main conf/server.xml file cannot be reloaded without restarting Tomcat.

    Context elements may be explicitly defined:

    * In the $CATALINA_BASE/conf/context.xml file: the Context element information will be loaded by all webapps.
    * In the $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default file: the Context element information will be loaded by all webapps of that host.
    * In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. The name of the file (less the .xml extension) will be used as the context path. Multi-level context paths may be defined using #, e.g. foo#bar.xml for a context path of /foo/bar. The default web application may be defined by using a file called ROOT.xml.
    * Only if a context file does not exist for the application in the $CATALINA_BASE/conf/[enginename]/[hostname]/, in an individual file at /META-INF/context.xml inside the application files. If the web application is packaged as a WAR then /META-INF/context.xml will be copied to $CATALINA_BASE/conf/[enginename]/[hostname]/ and renamed to match the application's context path. Once this file exists, it will not be replaced if a new WAR with a newer /META-INF/context.xml is placed in the host's appBase.
    * Inside a Host element in the main conf/server.xml.


    Je nach Gelteungsbereich verwendest du also eine andere Datei.
    Entgegen den Empfehlungen ist die server.xml für eine Entwicklungsumgebung wohl am sichersten.

    Den Pfad "Docbase" hast du ja bestimmt auf dein System angepasst? Wird im Javabuch auch ein Windows Pfad verwendet? Kannst du die Stelle bitte verlinken?
  • also ich hab jetzt noch mal alles versicht, aber immer 404 error...
    docbase hab ich übrigens angepasst. bringt aber irgendwie nix. oder muss ich das jsp auch angeben. also sowas wie "/.../.../test.jsp"

    die anleitung steht in "java ist auch eine insel": boscheri.ch/computer/java/java…java17003040006AD1F0421C2
    vllt kann mir ja irgendjemand sagen, was ich machen muss...
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • Tomcat-Webapp

    Wenn Du einen Tomcat installierst hast, gibt es dort ein Verzeichnis

    webapps

    Darunter legst Du ein Verzeichnis an.
    Der Name des Verzeichisses entspricht dem Namen Deiner Web-Appliaktion.

    Darunter legst Du ein Verzeichnis

    WEB-INF

    an.
    Dieser Name ist bei Web-Apps festgelegt.

    In diesen Ordner packst Du eine Datei web.xml,
    mit den als Beispiel geposteten Angaben.

    Der Aufruf Deiner Web-App erfolgt dann im Browser bei local installiertem Tomcat

    localhost:8000/<Name_Deiner_Web-App>/test.jsp

    Der Port (also die Nummer nach dem Doppelpunkt) kann je nach Angabe des Ports
    bei der Installation oder nach Änderung in der server.xml differieren.

    Hier noch mal der Verzeichnis-Aufbau

    Source Code

    1. tomcat-Verzeichnis
    2. |
    3. +-- webapps
    4. |
    5. +-- test (Name Deiner web-App)
    6. |
    7. +-- test.jsp
    8. |
    9. +-- WEB-INF (festgelegter Verzeichnis-Name)
    10. |
    11. +-- web.xml
    Display All


    // Edit by Hafner
  • hiho

    also bei mir klappt das einfach nicht :(
    ich hab jetzt wie du gesagt hast, ein ordner "datum_jsp" angelegt.
    darin befinden sich eine java-datei "datum_jsp" und eine class-datei "datum_jsp".
    außerdem der ordner "WEB-INF". der wiederum enthält nun eine xml-datei "web".
    jetzt hab ich alle möglichen code-variationen dareingeschrieben, jedesmal neustart von tomcat, aber der 404 error bleibt.

    was GENAU soll ich da jetzt reinschreiben? ich hab leider keine ahnung von xml. ich find nirgendswo anleitungen dazu :(

    danke schon mal im vorraus
    mfg
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • hi

    ich hab mir da jetzt mal runtergeladen, und mir die web.xml angeschaut.
    ich weiß aber immer noch nicht, was ich davon übernehmen soll, was ich ändern muss und was weg soll.

    das wäre super toll, wenn du irgendwie mal ein beispiel posten könntest. pfadnamen stehen oben ja alle.
    dass ich malö sehe wie das ganz ewinfach aussehen würde. dann kann ich ja versuchen das zu rekonstruieren.

    mfg
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)