2012-03-28 6 views
0

Ich habe das folgende Setup. Der Ordner itext ist in der obersten Ebene in Webapps:Servlet-Mapping-Attribut in web.xml für ein Projekt nicht in der obersten Ebene in Webapps

├───itext 
│ └───WEB-INF 
│  ├───classes 
│  │ └───com 
│  │  └───imparator 
│  │   └───ist 
│  └───lib 

Im web-inf Ordner ich eine web.xml-Datei, wo ich die Servletzuordnung tun:

<servlet> 
    <servlet-name>Itext Servlet</servlet-name> 
    <servlet-class>com.imparator.ist.ItextServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Itext Servlet</servlet-name> 
    <url-pattern>/fincc-itext</url-pattern> 
</servlet-mapping> 

Nun, wenn ich möchten Sie etwas von diesem Servlet bedient werden, hier ist mein action-Attribut in einer Form:

<form method="POST" action="/itext/fincc-itext"> 

========================== ================================================= ============

Nehmen wir nun an, dass der itext Ordner nicht in der Top-Level-Ordner in Webapps war aber ein paar Stufen unter:

├───level1 
│ └───level2 
│  └───itext 
│   └───WEB-INF 
│    ├───classes 
│    │ └───com 
│    │  └───imparator 
│    │   └───ist 
│    └───lib 

Wie kann ich aktualisieren Das Servlet-Mapping und der Action-Attribut-Wert entsprechen dieser Verzeichnisstruktur?

+0

Beachten Sie, dass der Kontextpfad in URLs ist nicht unbedingt die Ordnernamen der Haupt-Webapp-Ordner, wie er bereitgestellt wurde. Es ist in der Serverkonfiguration konfigurierbar. Sie sollten es immer vorziehen, es dynamisch durch 'HttpServletRequest # getContextPath()' oder '$ {pageContext.request.contextPath}' zu spezifizieren, anstatt es in Ihrer HTML/JSP fest zu kodieren. Siehe auch http://stackoverflow.com/questions/4764405/how-to-use-relative-paths-without-the-context-root-name – BalusC

Antwort

1

Diese werden sich nur ändern, wenn sich der Kontext ändert. Der Kontext ist itext, da Sie dort WEB-INF sind.

+0

Bedeutung? Ich sende immer noch Anfragen an/itext/fincc-itext? – oneiros

+0

Auf diese Weise wird die Anfrage an http: // localhost: 8080/itext/fincc-itext gesendet, was eigentlich nicht der Ort des Servlets ist ... level1 und level2 müssen im Pfad enthalten sein? ja Nein? – oneiros

+0

Das wird sich in der Tat nicht ändern. Außerdem entspricht die vorgeschlagene Ordnerstruktur nicht der Servlet-Spezifikation und der Servletcontainer kann die Webanwendung nicht erfolgreich bereitstellen. – BalusC

1

Die Einstellung eines Web-App sein:

webapp 
    -somefolders (you can put text, js, css, image files here) 
    - WEB-INF 
     - classes 
     - lib (contains jars) 
     - web.xml 
     - xml or configuration files 
    - META-INF (if needed) 

Es ist der Standard, und Sie haben zu folgen. Wenn Sie den Servlet-Pfad ändern möchten, müssen Sie ihn in web.xml ändern. In Ihrer Situation:

+---itext (web app name) 
¦ +---somefolders (you can put text, js, css, image files here) 
¦ ¦ 
¦ +---META-INF (if needed) 
¦ ¦ 
¦ +---WEB-INF 
¦  +---classes 
¦  ¦ +---com 
¦  ¦  +---imparator 
¦  ¦   +---ist 
¦  +---lib 
¦ ¦ 
¦ +---web.xml 
¦ ¦ 
¦ +---xml or configuration files 

Sie immer noch Ihre App Struktur behalten müssen und die den Servlet-Pfad in web.xml ändern:

<servlet-mapping> 
    <servlet-name>Itext Servlet</servlet-name> 
    <url-pattern>/itext/fincc-itext</url-pattern> 
</servlet-mapping> 
+0

und diese bestimmte Webapp muss direkt unter Webapps Ordner rechts sein? – oneiros

Verwandte Themen