問題タブ [servlet-dispatching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - URIを使用したHTTPリクエストのマッピングが見つかりません[/WEB-INF/pages/apiForm.jsp]
ハンドラーはinternalresourceview'apiForm'に転送しますが、エラー404 RequestURI = / WEB-INF / pages/apiForm.jspが発生します。apiForm.jspは/WEB-INF/pages/にあると思います
13:45:02,034 DEBUG [org.springframework.web.servlet.view.JstlView]-InternalResourceView'apiForm'のリソース[/WEB-INF/pages/apiForm.jsp]に転送
13:45:02,035 DEBUG [org.springframework .web.servlet.DispatcherServlet]-[/WEB-INF/pages/apiForm.jsp]の最終変更値を決定する「testapp2」という名前のDispatcherServlet13
:45:02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet]- getLastModified
13:45:02,038にハンドラーが見つかりませんDEBUG [org.springframework.web.servlet.DispatcherServlet]-[/WEB-INF/pages/apiForm.jsp]
13:45:02,038のリクエストを処理する「testapp2」という名前のDispatcherServlet警告[org.springframework.web.servlet.PageNotFound]-名前が'testapp2'のDispatcherServletにURI[/WEB-INF/pages/apiForm.jsp]のHTTPリクエストのマッピングが見つかりません
13:45:02,045 DEBUG [org.springframework .web.servlet.DispatcherServlet]-リクエストを正常に完了しました
13:45:02,048DEBUG [org.springframework.web.servlet.DispatcherServlet]-リクエストを正常に完了しました
これが私のdispatcher.xmlの外観です。
jax-rs - JAX-RS でディスパッチはどのように制御されますか?
RESTeasy を使用して RESTful Web サービスを作成しています。これは JAX-RS の実装です。単一の @Path アノテーションでクラスまたはメソッドにアノテーションを付けます。正規表現は、パス パラメータを取得するために使用されます。例えば
「/foo」で始まり、「/bar」で終わり、その間にあるすべてのパターンに一致します。間にあるものはすべて、varname という名前のパラメーターに割り当てられます。
一部のフレームワーク (Django など) には、順番に試行される正規表現とメソッドのリストがあります。たとえば、/john/q/smith、/john/{.*}/smith、/john/{.*}/{.*} などです。「/john/henry/smith」は 2 番目と 3 番目に一致しますが、最初に見つかった一致であるため、2 番目がディスパッチされます。
これは JAX-RS で可能ですか、それともクラスとメソッドに固有の順序はありませんか? /john/{.*}/{.*} の場合、/john/anything/anythingbutsmith を意味する正規表現を作成する必要がありますか? 他のものを変更するたびに、それを変更する必要があります。
java - 異なるサーブレットを一緒にリンクする方法は?
まず、Spring MVC を使用していません。:) :) 最初にそれを取り出したいだけです。今私が持っているのは、さまざまなサーブレットを呼び出すさまざまな JSP ページです。すべてのピースは個別にうまく機能しますが、それらをリンクする必要があります。すべてのjspページがGET
リクエストを行う場合、Webアドレスを介して渡すだけなので簡単です。type
サーブレット側では、すべてのパラメーターを列挙し、どれtype
がそれであるかを判断し、適切なサーブレットに委任します. ただし、すべての jsp ページがGET
リクエストを行うわけではありません。一部のページはPOST
フォーム経由でリクエストを行います。例を見てみましょう
しかし、B.jsp
私はこのようなものを持っているでしょう
GenericServlet.java
これを行う必要があるという点で、私が判断するのはちょっと難しいですservletB
java - Spring の Dispatcher Servlet とは?
この画像 (ここから取得したもの) では、HTTP要求がDispatcher Servlet に何かを送信します。
私の質問は、Dispatcher Servletは何をするのですか?
Webページからスローされた情報を取得してコントローラーにスローするようなものですか?
jsp - JSF のマッピングで FORWARD を使用すると、Servlet Filter が無限ループに入る
次のような web.xml で定義されたフィルターがあります。
そしてフィルターには次のコードがあります:-
問題は、Topic.jsp でアプリを呼び出すと、次のようにループすることです:-
問題はマッピングの FORWARD であることがわかりました。このエントリを削除すると、機能します
.jsp と .jsfを交互に繰り返すこの無限ループのパズルを解くのを手伝ってください:)
annotations - サーブレット: web.xml の代わりに注釈を使用する場合、その名前でサーブレットにリクエストを転送しますか?
構成パラメータに応じて、/* で受信したすべての GET および POST 要求を他のサーブレットにリダイレクトするエントリ サーブレット (DispatcherServlet と呼ばれる) があります。リクエストを他のサーブレットにディスパッチするために、パスの代わりにそれらの名前を使用します。
「古い」方法は、サーブレットに web.xml 記述子で名前を付けることでした。
その後、たとえばRequestDispatcher
. 私の DispatcherServlet のコードは次のようになります。
RequestDispatcher ディスパッチャ = getServletContext().getNamedDispatcher("MyServlet"); dispatcher.forward(リクエスト、レスポンス);
これは完全に機能します。しかし、web.xml なしで「新しい」サーブレット 3 アノテーションを使用したいので、次のようにします。
しかし今、私の DispatcherServlet 内では、適切なディスパッチャーの代わりにnullgetServletContext().getNamedDispatcher("MyServlet")
を返しますが、同じように動作すると予想されますMyServlet
@WebServlet(name="MyServlet")
<servlet-name>MyServlet</servlet-name>
Tomcat 7 でこれをテストしました。これは、DispatcherServlet が呼び出されるまでに MyServlet がまだロードされておらず、MyServlet の名前がわからないためですか? @WebServlet(name="...")
もしそうなら、注釈はどのような意味を持ちますか ;)
「なぜフィルタを使わないのですか?」などと答えないでください。など。これは、注釈と web.xml の背景に関する詳細です。
前もって感謝します!
(ps. より適切なタイトルが見つかった場合は、タイトルを変更してください ;))
spring - spring mvc アノテーションの多くのサーブレットディスパッチャー
こんにちは、Spring MVC の学習を始めたばかりです。Spring MVC @annotation を使用し、3 つのサーブレット ディスパッチャー (appservlet、admin、student) を使用しています。
web.xml
メソッドでのテストの後、.admin または .student のいずれかの別のサーブレット ディスパッチャーにリダイレクトしたいと考えています。どうすればそれができますか?
@コントローラ
問題は、ModelAndView
(.jsp) が返されることですが、別のサーブレット ディスパッチャーへのリダイレクトが必要です !!
java - 2 つの異なる dispatcherServlet に対する 2 つの異なる authenticationManagers
私の web.xml には 2 つの異なるディスパッチャ サーブレットがあり、そのうちの 1 つはルート コンテキストからのすべての Bean を持ち、2 番目のディスパッチャ サーブレットには別の authenticationManager があります。言ったように:
Web MVC フレームワークでは、各 DispatcherServlet に独自の WebApplicationContext があり、ルート WebApplicationContext で既に定義されているすべての Bean を継承します。ルート WebApplicationContext には、他のコンテキストとサーブレット インスタンス間で共有する必要があるすべてのインフラストラクチャ Bean が含まれている必要があります。これらの継承された Bean は、サーブレット固有のスコープでオーバーライドでき、特定のサーブレット インスタンスに対してローカルな新しいスコープ固有の Bean を定義できます。
したがって、私の新しい authenticationManager は、ルート コンテキストから同じ Bean をオーバーライドする必要があります。この authenticationManager には、別の userDetailsService を持つ別の daoAuthenticationProvider があります。しかし、2 番目の dispathcer サーブレットのパスからシステムにログインする場合、Spring はルート コンテキストから authenticationManager を使用します。
それはweb.xmlです:
それは AdminConfig.class です:
これは WebSecurityConfigurerAdapter 実装であり、ua.admin パッケージにあり、新しい authenticationManager があります。
このクラスは、ルート コンテキストでの WebSecurityConfigurer 実装であり、別の 2 つのクラスの基本クラスです。
ルート コンテキストにある 2 つのサブクラスがあります。
}
そのため、adminDispatcher サーブレットは ua.admin.AdminConfig を使用し、ua.admin パッケージをスキャンして、2 番目の authenticationManager 実装を持つ WebSecurityConfigurerAdapter 実装を見つけます。
/bulbular/ - これは、この dispathcer サーブレットのパスであり、WebSecurityConfigurerAdapter 実装の http 構成のパスです。しかし、/bulbular/login ページからログインする場合、Spring は SecurityConfig.class (ルート コンテキストのクラス) からの実装を使用します。助けてください!!!!
spring - ドメイン名に基づく新しい Spring ServletDispatcher/ HandlerMapping リダイレクト リクエスト
Spring + Gradle + PostgreSQL を使用しており、新しい Spring ServletDispatcher または HandlerMapping を作成したいと考えています (どちらが最適な選択かわかりません)。
要件は次のとおりです。サブドメイン名に従って、HTTP 要求を別のコントローラーにリダイレクトします。
例えば:
HTTP リクエスト:
aaa.domain.com は、=> website/aaa/
bbb.domain.com => website/bbb/にリダイレクトされます。
どうすればそれを書くことができますか?
私のGradleの依存関係:
どうもありがとう!
最初の更新
Springについてもう少し深く調べてみました。そして今、新しい HandlerMapping がより良い選択かもしれないと思います。そこで、 DefaultAnnotationHandlerMappingを書き換えたいと思います。
これはパッケージspring-webmvcのクラスであり、 DispatcherServlet.propertiesで次のように定義されています。
DispatcherServlet.propertiesを直接変更できません。クラスを自分のクラスに置き換えたい場合、どうすればよいでしょうか?
プロジェクトを定義するために、XML の代わりに多くの spring-boot-starter を使用しました。
application.propertiesでorg.springframework.web.servlet.HandlerMappingを定義しようとしましたが失敗しました。