私はEclipse IDEでSpringを使用したアプリケーションを構築しています。Eclipse IDEからプロジェクトを起動すると、すべてうまくいきますが、Mavenプロジェクトをwarファイルとしてパッケージングし、別のtomcatにデプロイすると、次のような問題が発生します。
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
これは、私のxmlファイルからの設定スニペットです。
<!-- View Resolver -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/pages/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
このコントローラにアクセスしようとしている
@RequestMapping(value = {"/welcome", "/"})
public String defaultPage() {
return "Web Service data successfuly consumed";
}
tomcatへのデプロイに失敗する理由をご存知の方はいらっしゃいますか?
私はこの問題に何度も苦労しました。
私が現在使用している解決策は、webapp(またはjspのようなビューを保持しているフォルダー)がデプロイメントアセンブリの下にあることを天気予報することです。
これを行うには、 プロジェクトを右クリック>パスを構築>ビルドパスの構成>展開アセンブリ>追加(右側)>フォルダ> (jsp
フォルダを追加します。 デフォルトの場合は「src / main / webapp」です)。
すべて修正した後もこのエラーが発生する可能性がありますが、JSPにアンカータグを古いファッションに配置します(同じ問題を持つ他の誰かを助ける場合は、これを追加します)。
jspで次の構文がありました。 < a href = "/ mappedpath"> TakeMeToTheController< / a>
そして、私は質問で言及されたエラーを見続けました。 ただし、< a>を変更します。以下に示すタグにタグを付けると、問題が解決します。
<a href=" <spring:url value="/mappedpath" /> ">TakeMeToTheController</a>
スプリングブートアプリケーションを開発している場合は、次のコードに示すように、「SpringBootServletInitializer」をメインファイルに追加します。 SpringBootServletInitializerがないと、Tomcatはそれを通常のアプリケーションと見なすため、Springブートアプリケーションとは見なされません。
@SpringBootApplication
public class DemoApplication extends *SpringBootServletInitializer*{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication .class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication .class, args);
}
}
Eclipseでサーブレットを実行しようとすると(右クリック+ "サーバーで実行")、全く同じ問題に遭遇しました。 HTTP Status:404 / Description:HTTP Status: 404 / Description: オリジン・サーバーがターゲット・リソースの現在の表現を見つけられなかったか、またはその表現を公開する意志がありません。 tomcatの設定をいろいろ変えても、index.htmlを追加しても、うまくいきません。
最後に、思いがけないところに問題があることを発見しました。EclipseのOption "Build automatically"が設定されていないのだ。したがって、サーブレットはコンパイルされず、ファイル "myServlet.class" はサーバーに配備されませんでした (私の場合、パス
私の環境Eclipse Neon.3 Release 4.6.3, Tomcat-Version 8.5.14., OS Linux Mint 18.1.
ソリューション1: apache tomcatのバージョンを変更します(最新のものが推奨されます)(手動プロセス)。
ソリューション2:最新のeclipse IDEをインストールし、apache tomcatサーバーを構成します(内部自動プロセス、つまりeclipseが構成部分を処理します)。
自動プロセスの手順が成功した後、手動プロセスは正常に動作します。
/ opt / apache-tomcat-8.5.37 / conf / Catalina / localhostにgeoexplorer.xmlファイルを作成することで、ほぼ同じ問題が解決します。 geoexplorer.xmlファイルの内容です。
<Context displayName="geoexplorer" docBase="/usr/share/opengeo/geoexplorer" path="/geoexplorer"/>
私は同じ問題に直面しており、@ tadtabの回答からのヒントで、プロジェクトで同じ問題の解決策を理解することができました。
ステップ:
1-> @tadtabの回答に記載されている手順に従ってください。
2->右プロジェクトをクリックします-> [プロパティ]をクリックします-> [展開アセンブリを検索]をクリックします。
3->フォルダが画面に存在するかどうかを検索します。 (そうでない場合は、追加します)。
4->画面には、ソースフォルダーに対応する「デプロイパス」列があります。 そのパスをコピーします。 私の場合、それは/ビューでした。
。。
5->したがって、基本的には、 setPrefix()メソッドでは、展開時にパスを持つ必要があります。
以前は setPrefix()メソッドで/ viewsを使用していたので、同じエラーが発生していました。 しかし、その後はうまくいきました。
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/classes/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
同じことがXML構成にも適用できるはずです。
ディスパッチャーサーブレットは、リクエストをどこに発送するかはわかりません。 問題は、コントローラービーンが作成/機能していないことです。
私も同じ問題に直面しました。 次に、mvc-config.xmlの下に以下を追加しました。
<mvc:annotation-driven/>
<context:component-scan base-package="com.nsv.jsmbaba.teamapp.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"><value>/WEB-INF/view/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
これが役立つことを願っています。