# Servelt mit <form action=""> aufrufen (.jsp)



## Rouven50 (3. Jun 2012)

hey bin totaler neuling auf dem gebiet servlets und jsp - ich sitze vor folgendem problem: ich habe ein jsp datei (settings.jsp) im webcontent ordner - dort möchte ich daten aus einem html formular eingeben - code:

```
<jsp:directive.include file="header.jsp" />

	<div id="main">

		<h1>Settings &raquo; bearbeiten</h1>

<form action="Serlvets/datenbank.SaveSettings" method="post" enctype="multipart/form-data">

		<div id="logo_upload">
			<p>
				Logo ausw&auml;hlen:<br /> <input type="file" name="LOGO" size="45"
					value="" />
			</p>
			<p>
				<input class="checkbox" type="checkbox" name="STANDARDLOGO" value=""
					checked />Als Standardlogo f&uuml;r alle Infoscreens verwenden
			</p>


		</div>

		<div id="settings">
				<p>
					Unternehmen:<br />
					<input class="input_text" name="FIRMA" type="text" value="" />
				</p>
				<p>
					URL:<br />
					<input class="input_text" name="URL" type="text" value="" />
				</p>
				<p>
					Sprache:<br />
					<input class="input_text" name="SPRACHE" type="text" value="" />
				</p>

				<button type="submit" name="submit" type="button">Speichern</button>
				
				
			</form>

		</div>
		<jsp:directive.include file="footer.jsp" />
	</div>

</body>
</html>
```

und dann habe ich noch ein serlvet das die daten speichern soll: code:

```
package datenbank;

import java.io.IOException;
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 java.sql.*;

/**
 * Servlet implementation class SaveSettings
 */
@WebServlet("/SaveSettings")
public class SaveSettings extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SaveSettings() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO: Datenbank um das Feld ID erweitern
		
		System.out.println("Code wird ausgeführt!!");
		Connection conn = null;
		Statement query = null;
		String firma = request.getParameter("FIRMA");
		String url = request.getParameter("URL");
		String sprache = request.getParameter("SPRACHE");
		String logo = request.getParameter("LOGO");
		String standard_logo = request.getParameter("STANDARDLOGO");
		
		String database_scheme = "Settings";
		// TODO: Connect to database
		 
		System.out.println("<html><head><title>Login Test</title></head>");
		System.out.println("<body>");
		System.out.println("Username :");
		System.out.println(firma);
		System.out.println("Passwort :");
		System.out.println(url);
		System.out.println("</body>");
		System.out.println("</html>");
		
		/*
        if(conn != null) {
            // Anfrage-Statement erzeugen.
            try {
                query = conn.createStatement();
                
                String sql = "INSERT INTO " + database_scheme + "(FIRMA, URL, SRACHE, LOGO, STANDARDLOGO) VALUES('" + firma + "', '" + url +"', '" + sprache +"', '" + logo +"', '" + standard_logo +"') WHERE ID = 1";
               
                query.executeUpdate(sql);

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
```
welches sich im package datenbank befindet - nun weiß ich einfach nicht wie ich dem form aus der jsp sage - welchem servlet die input werte übergeben werden sollen - kann mir da jemand weiterhelfen? finde auch nicht bei google - bzw das was ich probiert habe ging nicht.. später soll in dem serlvet eine datenbank connection aufgebaut werden und dann die werte eingeschrieben werden.. nun habe ich im servlet erstmal nur system.out.println damit ich gucken kann ob es geht

oder mache ich das komplett falsch?

bin über jede antwort sehr dankbar


----------



## Fant (3. Jun 2012)

Ist dir bewusst, dass du da im form-Tag "Serlvets" geschrieben hast?

Was passiert denn momentan, wenn du auf den Speicher-Button klickst? Wird das Servlet nicht aufgerufen oder klappt nur das Auslesen der Formulardaten nicht?

Du kannst auch mal hier: Servlet Tutorial: Handling Form Data nachschauen.

Gruß Fant


----------



## Rouven50 (3. Jun 2012)

hey - war vorher auch schon auf der seite und habe mir das durchgelesen, hat aber irgendwie nicht geklappt - habe schon alles mögliche im form tag action geschrieben - mit oder ohne servlet mit s und ohne - diverse pfade aber jedes mal kommt der 404 error das die seite nicht gefunden werden kann - ich weiß echt nicht was ich dort eingeben muss damit er die seite findet - mfg


----------



## Fant (4. Jun 2012)

Ich meinte eigentlich den Buchstabendreher...

Klappt es denn, wenn du das Servlet direkt aufrufst? Oder kommt da auch ein 404-Error?
Ich sehe gerade auch deine @WebServlet-Annotation. Im Form-Tag sollte es daher eigentlich 
	
	
	
	





```
action=SaveSettings
```
 heißen.


----------



## Rouven50 (4. Jun 2012)

habe alle möglich varianten ausprobiert - aber nichts funktioniert - und auch schon versucht die servlets direkt im browser auszurufen - aber auch ohne erfolg (kam immer ein 404 error)... ich verarbeite jetzt einfach alles direkt in der jsp datei - sprich das verbinden mit der datenbank und das einlesen der werte (meines wissens ist das auch okay?) 

dank dir trotzdem=)


----------



## Fant (4. Jun 2012)

Wenn du das Servlet auch nicht direkt aufrufen kannst, dann liegt das Problem aber ganz wo anders.

Gibt es vielleicht Einträge in der web.xml, mit denen deine @WebServlet-Annotation kollidieren könnte?
Und ganz blöd nachgefragt: Kann dein Server überhaupt Servlets verwalten? Was für einen Server benutzt du?
Wo liegt dein Servlet innerhalb der Web-App?


----------



## HimBromBeere (4. Jun 2012)

Wie sieht denn deine web.xml aus? Da solltest du meines Wissens nach einen Alias für dein Servlet angeben können, den du dann in der URL verwenden kannst.

Das sollte so aussehen:
[XML]<servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>MyPackage.MyClass</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>MyTestClass</url-pattern>
</servlet-mapping>

[/XML]

Aufruf geht dann wie folgt:

```
http://host:port/MyTestClass?param1=1&param2=2
```



> ich verarbeite jetzt einfach alles direkt in der jsp datei - sprich das verbinden mit der datenbank und das einlesen der werte (meines wissens ist das auch okay?)


Nö, is es nicht 
Sowas geht natürlich, ist aber nicht wirklich gut. Die JSP ist eigtl. nur für die Darstellung der Seite zuständig und holt sich ihre Daten aus diversen Servlets. Alles in einer Datei zu machen ist auch bei GUI-Programmierung nicht schlau, weil das einfach schnell extrem unübersichtlich wird.


----------



## Rouven50 (4. Jun 2012)

aah danke es geht nun - lag wohl an der web.xml - auch mit dem form tag - werte werden übergeben - aber was ich nun an der variante nicht schön finde, dass man auf eine neue seite weitergeleitet wird - kann man das nicht umgehen? also das das servlet sozusagen im background arbeitet und man auf der seite bleibt  - durch das action="SaveSettings" wird man ja auf die servlet seite weiter geleitet und die ist total nackt ? oder geht das nicht 


vielen dank schonmal im voraus=)


----------

