Warum jsp-Dateien innerhalb des WEB-INF-Ordner arbeitet , sondern unter einem Ordner unter WEB-INF nicht?
Wenn meine jsp-Dateien sind innerhalb von WEB-INF-Ordner (/WEB-INF/die Datei.jsp) , ich kann auf localhost: 8080/ProjectCtxtRoot/, aber ich kann nicht darauf zugreifen, wenn Sie Sie in /WEB-INF/jsp/Datei.jsp?
Änderte ich den Pfad in der willkommen-Liste-tag web.xml wie folgt
<welcome-file-list>
<welcome-file>/JSP/fileName.jsp</welcome-file>
</welcome-file-list>
Ich auch geändert dispatcher-servlet.xml wie folgt
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
Trotzdem funktioniert es nicht. Die Url für den oben genannten Fall sind
localhost:8080/ContextRoot/jsp/
localhost:8080/ContextRoot/jsp/fileName.jsp
localhost:8080/ContextRoot/jsp/fileName
aber es funktioniert nicht für eine der oben genannten urls.
Aber es war zu arbeiten, wenn
<welcome-file-list>
<welcome-file>/fileName.jsp</welcome-file>
</welcome-file-list>
dispatcher-servlet.xml wie folgt
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/"
p:suffix=".jsp" />
Url für die oben genannten Fall ist:localhost: 8080/ContextRoot/und es funktioniert.
Ich verwende tomcat-v-7.0-server. Ich aktualisieren mein Projekt in Eclipse IDE, dann reinigen Sie, bauen Sie, bauen Sie Krieg mit mvn clean install und wählen Sie dann den Krieg von tomcat-manager-homepage und installieren Sie es. Ich mache das jedes mal.
Dies ist, wie die diapatcher-servlet.xml sieht durch den Prozess. Ich habe gerade bestimmten Abschnitt wie oben gesagt
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.projectName.www" />
<!-- Factory bean that creates the Mongo instance -->
<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
<property name="host" value="localhost" />
</bean>
<!-- MongoTemplate for connecting and quering the documents in the database -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo" />
<constructor-arg name="databaseName" value="tableName" />
</bean>
<!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<!-- <bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"/>
<bean class=
"org.springframework.web.servlet.view.tiles2.TilesConfigurer"> -->
<!-- <property name="definitions">
<list>
<value>/WEB-INF/views/views.xml</value>
</list>
</property>
</bean> -->
</beans>
Dies ist, wie mein web.xml sieht aus wie
<web-app>
<!-- <display-name>Archetype Created Web Application</display-name> -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- <init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/src/main/webapp/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</context-param>
<!-- <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> -->
<welcome-file-list>
<welcome-file>/fileName.jsp</welcome-file>
</welcome-file-list>
</web-app>
Ok. Es funktioniert, wenn ich zog die gesamte jsp-Ordner aus /webapp/WEB-INF/jsp/Dateiname.jsp-zu /webapp/jsp/Dateiname.jsp. Ich würde gerne wissen,
1. warum funktioniert es jetzt?
2. Ist das der richtige Weg, Dinge zu tun?
3. Es funktioniert, wenn die url localhost:8080/CtxtRoot/jsp/oder localhost:8080/CtxtRoot/jsp/Suche.jsp, aber es funktioniert nicht für localhost:8080/AnnaUnivResults/jsp/Suche. Warum ist es so?
- Ich denke, dass die groß-und Kleinschreibung könnte tatsächlich einen Unterschied machen hier seit dem Frühjahr ist die Interpretation, die Dinge in eine Datei Weg.
- hinterlassen Sie bitte einen Kommentar zu sagen, wenn das erste Beispiel funktioniert, wenn die welcome-Datei hat eine geringere Falle jsp.
- Ein
<welcome-file>
wird vollständig nichts mit einer FederViewResolver
. Ihre Frage, die derzeit alle über dem Platz. Sie müssen klären, Ihre Kontext-Pfad und die genaue HTTP-request senden Sie in jedem Szenario. Wenn die Anforderung bearbeitet wird FrühlingDispatcherServlet
werden Sie brauchen, um die Prozedur als gut. - Machen "jsp" als Kleinbuchstaben funktioniert nicht.
- Ich glaube, Sie brauchen, um zu erklären, wie Sie die app, die config-Dateien für Ihre web-app-server beziehen sich möglicherweise auf einige der Fragen, die in der Nähe der Unterseite der post.
- - post-die web-xml-filter ein oder servlet xml.
- Was meinst du, meine Frage ist ganz über dem Platz?
- Sie veröffentlicht die app-Kontext, nicht den web-xml, fragte ich nach.
- die url, die Sie eingeben, sollte keine 'jsp', es sei denn, die url-Muster in Ihrem web-xml hat auch, die. Ich denke, das ist dein Fehler. Versuchen Sie, die jsp zurück in WEB-INF/jsp und ändern der view-resolver für die Benutzer /WEB-INF/jsp wieder an, und fordern localhost:8080/CtxtRoot/Dateiname.jsp
- Du meinst jsp sollten nicht enthalten sein, wie dies localhsot:8080/CtxtRoot/'jsp'/ oder localhost:8080/CtxtRoot/jsp/fileName.'jsp'
- Sollte der view-resolver werden /WEB-INF/jsp oder /WEB-INF/jsp/ ?
- Ich denke /WEB-INF/jsp/ aber ich kann mich nicht erinnern, versuchen Sie beide.
- Nein, beide werden /WEB-INF/jsp sowie /WEB-INF/jsp/ hat nicht funktioniert. Bitte upvote die Frage (und nicht downvote es), wie es anderen helfen würde, und verhindert, dass mein account blockiert wird.
- oh, ich glaube, ich sagte Sie die falsche Sache, die Anforderung, die Sie machen, sollten Sie nicht am Ende mit jsp entweder, so versuchen localhost:8080/CtxtRoot/fileName weil das servlet wird automatisch fügen Sie die Datei mit der Dateinamenerweiterung", wie Sie es konfiguriert.
- NÖ. Es hat nicht funktioniert.
- Ich muss wirklich schlafen gehen, sorry. Ich fühle, du bist nah dran, aber vielleicht müssen Sie hinzufügen/entfernen ein slash irgendwo, oder fix groß - / Kleinschreibung oder so etwas.
- Wenn möglich bitte beantworten Sie die Fragen 1, 2 und 3.
- sorry, ich Stand einfach auf und nahm einen genaueren Blick auf Ihre web-xml, sehe ich mehrere Fehler drin. Sie haben gesagt, wesentliche Teile da, wo es hingehört initialisieren Frühjahr. Sie müssen den Kontext loader Hörer, müssen Sie den dispatcher-servlet, um seine init params, und Ihr Muster passen sollte '/*', nicht '/'. Ich werde versuchen, schreiben Sie eine formelle Antwort, wenn ich nach Hause komme von der Arbeit heute Abend, in der Zwischenzeit, ich schlage vor, Sie suchen spring-Dokumentation für den richtigen Weg, um die Konfiguration Ihrer web-xml.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es gibt ein paar Probleme hier:
Leider kann ich nicht auf alle Einzelheiten für Sie, eine Menge von Frühling ist konfigurierbar, so dass meine Erklärung ist einfach decken die meisten Basis-Szenario. Wenn jemand findet einen Fehler, bitte sagen und ich werde es fix.
Für die Wege, es könnte helfen, zu denken, Dinge Schritt für Schritt.
localhost:8080/CtxtRoot/jsp/
haben, könnte eine web-Anwendung auf dem server, dessen context-root ist "CtxtRoot", und es behandelt diese Anfrage. Alternativ können Sie eine Anwendung haben, die hat "" für einen Kontext, und es könnte damit umgehen Anfrage. Es hängt davon ab, wie Sie den server konfigurieren, standardmäßig von Tomcat verwenden, wird der Krieg, der als Namen einen Kontext root.localhost:8080/CtxtRoot/jsp/
die web-Anwendung eine route Dinge, die auf der Grundlage der " jsp " als Pfad.localhost:8080/CtxtRoot/jsp/
, und der Kontext, in root war 'CtxtRoot', dann die web-Anwendung ist der Vergleich '/jsp/" alle von der servlet-mappings. Anfragen für statische Ressourcen in WEB-INF wird immer abgelehnt werden, aber servlets und filtern können und die Rückgabe von Daten aus WEB-INF.http://localhost:8080/app/mvc/sales
.Aus Ihrem Beispiel, das Sie angefordert wurden localhost:8080/ContextRoot/jsp/Dateinamen, so dass es aussieht wie 'CtxRoot' ist der Kontext, in root, Ihren servlet-Pfad ist '/', so ist es sollte passieren, was ist, nach, dass ein controller. Durch die Zeit, die das DispatcherServlet die Anforderung empfängt, ist auf der Suche nach einem controller verarbeitet 'jsp' als Pfad. Da Sie keine hatte, Sie beschlossen, Sie zu behandeln, die als resource-Pfad. Es verwendet die view-resolver und bildeten den Pfad " /WEB-INF/jsp/jsp/Dateiname.jsp, die offensichtlich nicht vorhanden ist.
Nehmen wir an, Sie hatte stattdessen beantragt localhost:8080/ContextRoot/mit dem Namen, der Antrag würde erreichen das DispatcherServlet, es wäre kein Controller, Griffe, 'fileName' als einen Weg, und daher wäre es zu behandeln, als eine Ressource. Es würde den Pfad " /WEB-INF/jsp/Dateiname.jsp, und das würde das Ergebnis zurückgeben.
Jedoch, Ihre web-xml wurde nicht konfiguriert initialisiert Frühjahr. Damit Ihre web-Anwendung war eigentlich behandeln jede Ihrer Anfragen so, als wären Sie für eine Ressource, die relativ zum web-root der Anwendung. Ich glaube, dass, wenn Sie gemacht hatte, die Anfrage mit Feder richtig initialisiert, es könnte gearbeitet haben.
Ist hier ein gutes Beispiel, wie es zu tun:
http://www.mkyong.com/spring3/spring-3-mvc-hello-world-example/
bemerken, dass seine web-xml hat eine ContextLoaderListener, die auskommentiert ist in dir, und es ist unerlässlich, bei der Initialisierung von spring in eine web-app. Ich sehe auch den Kommentar in deinem dispatcher mit dem Pfad /src/main/resources, aber alle Pfade im web-xml-sollen in Bezug auf die web-root der Anwendung. Zur Laufzeit der web-server hat keine Kenntnis von Ihrem Projekt, und " src "ist nicht ein Verzeichnis in Ihrem web-app' s root. Beachten Sie auch, dass Sie können eine andere Anwendung, die den Kontext für Ihre MVC-Zeug als Ihre Haupt-spring-Kontext, und das ist üblich.
Ich denke, wenn Sie diese Dinge tun, es wird funktionieren:
stellen Sie eine Anfrage an
localhost:8080/CtxtRoot/fileName
Auch, Sie hielt reden über die welcome-Datei, aber Sie Gaben vollen Pfade zu den Ressourcen. Die welcome-Datei kommt nur ins Spiel, wenn der Benutzer eine Anfrage an den root eines Verzeichnisses wie dieses:
Die Anfrage würde an die welcome-Datei. Ich denke, die einzige Zeit, die Sie versucht haben, die jsp zufällig in Ihrer app root, und wurde so konfiguriert, wie die welcome-Datei, damit es funktioniert. Während es "funktioniert", ist es eigentlich gar NICHT verwenden Frühling zurückkehren.
Viel Glück für Sie.
Alles, was außerhalb von WEB-INF ist öffentlich verfügbar keine Authentifizierung angewendet wird, auf dass(wir anwenden können, indem Sie die Definition scurity-Einschränkung in web.xml ), aber alle Ressourcen in WEB-INF gesichert ist. Sie können halten Sie statische Seiten außerhalb von WEB-INF und dynamische Seiten wie profile, accounts innerhalb von WEB-INF.
Bitte cross-check, ich könnte falsch sein.
WEB-INF
.