# Servlet mit einem Link aufrufen?



## eddy (12. Jan 2010)

Hallo Community,

ich stehe sowas von auf dem schlauch... nach 4Wochen mal wieder arbeiten 

Bis jetzt habe ich immer nur Formulare _<form action="testkauf" method="post">_ verwendet um dann mein Servlet aufzurufen.
Nun möchte ich das ganze auch mit einem Link _<a href="xxx">_ machen, geht das? Kann ich mittels eines
Links auch mein Servlet ansprechen zwischen den Seitenaufrufen?

Wenn ja wie? :rtfm:


----------



## maki (12. Jan 2010)

Ja, das geht, ist dann allerdings ein GET Request.


----------



## eddy (12. Jan 2010)

@maki

okay, wenn es geht, warum kommt er dann bei mir im GET nicht an?
Muss ich was beachten?


```
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { xxx }
```

da sollte er doch durchlaufen... oder ?
Wie sage ich dem link denn welches Servlet er aufrufen soll? :bahnhof:


----------



## maki (12. Jan 2010)

> okay, wenn es geht, warum kommt er dann bei mir im GET nicht an?


Weil du etwas falsch machst 



> Muss ich was beachten?


Die richtige URL wäre gut.



> Wie sage ich dem link denn welches Servlet er aufrufen soll?


Wie gesagt, die URL muss stimmen...


----------



## eddy (12. Jan 2010)

das ich was falsch mache war mir klar :lol:

der Link ist richtig, ich komme auf der JSP seite an wo ich hin will, nur das er vorher nicht den Java Code durchläuft... Muss ich noch Code in der JSP ändern?


----------



## byte (12. Jan 2010)

Du musst natürlich die URL aufrufen, die Du im ServletMapping für das Servlet in der web.xml definiert hast und nicht die URL der JSP.

Im übrigen gehören JSPs in ein Unterverzeichnis von WEB-INF, damit sie nicht direkt von aussen aufrufbar sind.


----------



## eddy (12. Jan 2010)

alles klar... das ick das nich selber gemerkt habe....

Allerdings liegen meine JSP nicht unter WEB-INF sondern auf gleicher ebene in einem anderen Verzeichnis!
Stellt das jetzt ein Problem da?

Sonst erstmal vielen Dank an euch zwei! :toll:


----------



## Geeeee (12. Jan 2010)

Das ist natürlich kein Problem.
Bsp:

```
web-app
- WEB-INF/web.xml
- jsp/entry.jsp
```
In der web.xml steht irgendetwas wie 
[XML]
...
<servlet-mapping>
 <servlet-name>startServlet</servlet-name>
 <url-pattern>/start.blubb</url-pattern>
</servlet-mapping>
...
[/XML]
Dann ist dein Link einfach 
	
	
	
	





```
<a href="/start.blubb">Klick</a>
```
Dein Servlet sagt dann ja: "nehm die jsp/entry.jsp Datei zum Anzeigen".

Der Hinweis von byte geht auf den Sicherheitsaspekt zurück, dass alles was im WEB-INF Ordner liegt nicht mit einem Request vom Browser erreicht werden kann. Somit kannst du ungewollte / unberechtigte Zugriffe  auf deine jsps verhindern.


----------



## mvitz (12. Jan 2010)

Afaik muss man bei dem Beispiel von Geeeee aber darauf achten, dass /start.blubb unter umständen nicht funktioniert, da sich ein / auf das oberste Verzeichnis bezieht. Ist die Applikation unter http://localhost:8080/test/ erreichbar, so zeigt /start.blubb auf http://localhost:8080/start.blubb und funktioniert dann nicht.


----------



## Geeeee (12. Jan 2010)

> ...da sich ein / auf das oberste Verzeichnis bezieht. Ist die Applikation unter http://localhost:8080/test/...


Im Tomcat (und wohl auch Jetty) jedenfalls nicht. Es ist noch immer dann der Root meiner Web-App, wenn ich sie unter test/ deploye.


----------



## maki (12. Jan 2010)

Geeeee hat gesagt.:


> Im Tomcat (und wohl auch Jetty) jedenfalls nicht. Es ist noch immer dann der Root meiner Web-App, wenn ich sie unter test/ deploye.


Dann fehlt dir der Context-Name, ohne sieht emist in der Entwicklung alles gut aus, aber in der Produktion ist ein context normalerweise pflicht.


----------



## byte (12. Jan 2010)

Ist 
	
	
	
	





```
test
```
nicht in diesem Fall der Context-Root?


----------



## mvitz (12. Jan 2010)

doch, aber ein <a href> link kennt nunmal nichts von einem Context. Aus diesem Grunde benutzt man meiner Meinung nach am besten die Core TagLib und da <c:url> in dem Beispiel:


```
<a href="<c:url value="/start.blubb" />">Start</a>
```

Edit: Jetzt verstehe ich  Klar, wenn sein Context der Root-Context ist, geht natürlich auch direkt /start.blubb ABER idr. ist bei Neulingen ihre WebApp NICHT der Root-Context.


----------



## Geeeee (12. Jan 2010)

nun hat's bei mir *Klick* gemacht:
Ihr meint den Link... nicht das Mapping. Klar der Link war "unrealistisch" bzw. war auch nicht so gewollt. Aus Gründen der Diskussion werde ich ihn aber mal so stehen lassen


----------

