Jspファイルが(/WEB-INF/file.jspとして)WEB-INFフォルダー内にある場合、ローカルホスト:8080/ProjectCtxtRoot /からアクセスできますが、/ WEB-に配置されている場合はアクセスできません。 INF/jsp/file.jsp?
Web.xmlのwelcome-listタグのパスを次のように変更しました
<welcome-file-list>
<welcome-file>/JSP/fileName.jsp</welcome-file>
</welcome-file-list>
また、dispatcher-servlet.xmlを次のように変更しました
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
それでも動作しません。上記の場合に使用されるURLは
localhost:8080/ContextRoot/jsp/
localhost:8080/ContextRoot/jsp/fileName.jsp
localhost:8080/ContextRoot/jsp/fileName
上記のURLでは機能しません。
しかし、それは
<welcome-file-list>
<welcome-file>/fileName.jsp</welcome-file>
</welcome-file-list>
次のようにdispatcher-servlet.xml
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/"
p:suffix=".jsp" />
上記の場合に使用されるURLはlocalhost:8080/ContextRoot /であり、機能します。
Tomcat v7.0サーバーを使用しています。プロジェクトをEclipseIDEで更新し、クリーンアップしてビルドし、mvn clean installを使用してwarをビルドし、Tomcatマネージャーのホームページからwarを選択してデプロイします。私は毎回これをします。
これは、diapatcher-servlet.xmlがプロセス全体でどのように見えるかを示しています。上記のように特定のセクションを変更するだけです
<?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>
これは私のweb.xmlがどのように見えるかです
<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。 jspフォルダー全体を/webapp/WEB-INF/jsp/fileName.jspから/webapp/jsp/fileName.jspに移動すると機能します。 1.なぜ今機能するのか知りたいのですが。 2.これは物事を行う正しい方法ですか? 3. URLがlocalhost:8080/CtxtRoot/jsp /またはlocalhost:8080/CtxtRoot/jsp/search.jspの場合は機能しますが、localhost:8080/AnnaUnivResults/jsp/searchの場合は機能しません。なぜそうなのですか?
ここにはいくつかの問題があると思います。
残念ながら、すべての詳細をカバーすることはできません。多くのスプリングは構成可能であるため、私の説明では最も基本的なシナリオについて説明します。誰かが間違いを見つけたら教えてください、そして私はそれを修正します。
パスについては、物事を段階的に考えることが役立つ場合があります。
localhost:8080/CtxtRoot/jsp/
をリクエストした場合、コンテキストルートが「CtxtRoot」であるサーバー上に1つのWebアプリケーションがあり、そのリクエストを処理します。または、コンテキストに「」が含まれるアプリケーションを作成して、その要求を処理することもできます。サーバーの構成方法によって異なりますが、デフォルトでは、Tomcatはwar名をコンテキストルートとして使用します。localhost:8080/CtxtRoot/jsp/
へのリクエストでは、Webアプリケーションはパスとして「jsp」に基づいて物事をルーティングします。localhost:8080/CtxtRoot/jsp/
に対するものであり、コンテキストルートが「CtxtRoot」である場合、Webアプリケーションは「/ jsp /」をすべてのサーブレットのマッピング。 WEB-INFでの静的リソースの要求は常に拒否されますが、サーブレットとフィルタはWEB-INFからデータを返すことができます。http://localhost:8080/app/mvc/sales
でそのコントローラーに到達します。あなたの例から、localhost:8080/ContextRoot/jsp/fileNameをリクエストしていたので、「CtxRoot」はコンテキストルート、サーブレットのパスは「/」のように見えるので、その後はすべてコントローラーに渡す必要があります。 DispatcherServletがリクエストを受信するまでに、「jsp」をパスとして処理するコントローラーを検索しています。何もなかったので、それをリソースパスとして扱うことにしました。ビューリゾルバーを使用して、パス/WEB-INF/jsp/jsp/fileName.jspを形成しましたが、これは明らかに存在しません。
代わりにlocalhost:8080/ContextRoot/fileNameをリクエストしたとすると、リクエストはDispatcherServletに到達し、「fileName」をパスとして処理するコントローラーが見つからないため、リソースとして扱われます。パス/WEB-INF/jsp/fileName.jspを形成し、結果を返します。
ただし、WebxmlはSpringを初期化するように構成されていません。したがって、Webアプリケーションは、実際には、Webアプリケーションのルートに関連するリソースに対するものであるかのように、すべての要求を処理していました。 Springを正しく初期化してリクエストを行っていれば、うまくいったのではないかと思います。
これを行う方法の良い例を次に示します。
http://www.mkyong.com/spring3/spring-3-mvc-hello-world-example/
彼のWebxmlにはContextLoaderListenerがあり、これはコメントアウトされていることに注意してください。これは、WebアプリでSpringを初期化するために不可欠です。ディスパッチャにパス/ src/main/resourcesのコメントも表示されますが、Web xmlのすべてのパスは、Webアプリケーションのルートからの相対パスであると想定されています。実行時には、Webサーバーはプロジェクトを認識しておらず、「src」はWebアプリのルート内のディレクトリではありません。また、MVCのものに対してメインのSpringコンテキストとは異なるアプリケーションコンテキストを持つことができ、これは一般的であることに注意してください。
あなたがこれらのことをすればそれはうまくいくと思います:
リクエストを行う
localhost:8080/CtxtRoot/fileName
また、ウェルカムファイルについて話し続けましたが、リソースへのフルパスを提供していました。ウェルカムファイルは、ユーザーが次のようにディレクトリのルートにリクエストを送信した場合にのみ機能します。
localhost:8080/CtxtRoot/
そのリクエストはウェルカムファイルに転送されます。それを試したのは、たまたまjspがアプリのルートにあり、ウェルカムファイルとして構成されていたため、機能したと思います。それは「機能」しましたが、実際にはそれを返すためにスプリングを使用していませんでした。
頑張って。