問題タブ [requestdispatcher]
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.
jsp - リクエストディスパッチャを使用せずにjsp要素にコンテンツを追加する方法は?
式言語とリクエスト ディスパッチャを使用しないと、コンテンツを JSP 要素に送信する方法がわかりませんでした。問題は、forward メソッドを使用してブラウザーの URL を変更できないことです。これにより、アプリケーションがユーザーにとって奇妙に見えます。<div>
では、EL やリクエスト ディスパッチャーを使用せずに、JSP ページのタグにメッセージを追加するにはどうすればよいでしょうか。
ここに私のlogin.jspページがあります:
これが私のログイン サーブレットで、web.xml ファイルの principal.jsp というページにマップされています。
java - LEGO を構築するように JSP ページを集約する最良の方法
XML/XSLT ベースの開発を長年行った後、私は Java の世界に来ましたが、次第に疑わしくなってきました。Java Web アプリケーション構築のイデオロギーにおいて本当に重要な何かが欠けているようです。
これは、xslt の考え方でレイアウトを構築する方法です。必要なすべてのデータを 1 つの XML ファイルに集約し、それを html レイアウトに変換できます。
実例となる疑似 XML ベースの言語では、次のようになります。
アイデアを説明するのに十分だと思います。それが、私がサーブレット/jsp の世界で常に実装しようとしてきたアプローチでした。驚くことではありませんが、この問題は、「jsp ページにサーブレット出力を含めるにはどうすればよいですか?」という古典的な jsp 初心者の質問に要約されると思います。
正解は (間違っていたら訂正してください) - そうすべきではありません。リクエストチェーンを使用する必要があります。私が理解している限り (もう一度、事実を混同している場合は訂正してください)、それは servletA を呼び出す必要があることを意味します。これは、適切なデータを現在の要求に入れ、それを servletB などに転送します。最後に、すべての属性が入力されたページにリダイレクトされます。
私としては、このアプローチの主な問題点を少なくとも 2 つ挙げることができます。
- リダイレクトの順序をどこかに保つ必要があります。servletA が servletB にリダイレクトする必要があるかどうか、監視オブジェクトがジョブを実行する必要があるかどうかはわかりません。
- リクエスト属性にすべてを文字列として保存している場合、servletA で取得したデータに関して servletB 呼び出しをパラメータ化する必要がある場合、退屈なシリアライズ/デシリアライズ作業を提供する必要があります。
だから、私の質問は -いくつかの異なるソースから JSP ページにデータを追加するための最良の方法は何ですか.
これらの質問が経験豊富な JSP 開発者にとってばかげているように聞こえる場合は、すみません。実際、Java の世界は非常に巨大で成熟しているため、真実を見つけるのは必ずしも容易ではありません。
java - Javaフィルタを通過した後、RequestDispatcherで転送する
まず、私がやろうとしていることを説明しましょう。これは非常に簡単だと思います。ユーザーがいるWebサイトがあり、view_profile.jspページへのアクセスをログに記録されたユーザーのみに制限したいと考えています。私は次のようにマップされたフィルターを持っています:
このように見えます
このフィルターは、index.jspページでユーザーがリンクをクリックしたときに実行されます。
これは、次の場所にマップされたViewProfileServletにマップされたサーブレットにユーザーを誘導すると想定されています。
そのように見えます:
これにより、ユーザーは/view_profile.jsp(/ authではなくルートコンテキスト内)に移動して機能するはずですが、機能しません。何が起こるかというと、ViewProfileServletが実行され、view_profile.jspが表示されますが、view_profile.jsp上のすべてのリンクがlocalhost:8080 / auth / some-page.jspを指しているため、コンテキストはまだ/authであるように見えます。また、cssファイルはロードされておらず、要求されていません(少なくともfirebugによると)。ページのソースには、cssが想定している404GlassfishErrorが表示されます。
助けていただければ幸いです。jspで何かをするのは初めてで、ここで完全に迷子になっています。
java - RequestDispatcher から転送されたページをフィルタから判断する方法は?
リクエストをログに記録するためにリクエストを処理するフィルターがあるので、どのセッションがどのリクエスト パラメータでいつページにヒットしたかを追跡できます。うまく機能します... jspからjspへの投稿、またはjspへの直接呼び出しを行います。ただし、そのリクエストを新しい JSP に転送するサーブレットにフォームがポストされると、リクエストがどの JSP に転送されたかを確認できません。
たとえば、LoginServlet に投稿するログイン ページがあり、その後、リクエストを index.jsp または index1.jsp に転送するとします。LoginServlet が index.jsp または index1.jsp を返すかどうかをリクエストから判断するにはどうすればよいですか?
これは、2.3 サーブレット仕様を使用する Java 1.5 環境にあります。
java - RequestDispatcher.forward 呼び出しから転送された jsp をフィルターから判別する方法は?
リクエストをログに記録するためにリクエストを処理するフィルターがあるので、どのセッションがどのリクエスト パラメータでいつページにヒットしたかを追跡できます。うまく機能します... jspからjspへの投稿、またはjspへの直接呼び出しを行います。ただし、そのリクエストを新しい JSP に転送するサーブレットにフォームがポストされると、リクエストがどの JSP に転送されたかを確認できません。
たとえば、LoginServlet に投稿するログイン ページがあり、その後、リクエストを index.jsp または index1.jsp に転送するとします。LoginServlet が index.jsp または index1.jsp を返すかどうかをリクエストから判断するにはどうすればよいですか?
これは、2.3 サーブレット仕様を使用する Java 1.5 環境にあります。
jsp - Wicket1.5とJSP/サーブレットのラッピング
私が取り組んでいるプロジェクトでは、Wicket1.4から1.5にアップグレードしたいと考えています。いくつかの作業の後、ほとんどのことが正常に機能するようになりました。
ただし、1つの主要なことがまだ機能していません。古いJSP/サーブレットを新しいWicketベースのアプリケーションにラップする必要があり、古い1.4アプローチは機能しなくなりました。
1.4での簡略化されたhtml出力
1.5での簡略化されたhtml出力
したがって、すべてのJSPコンテンツは、ラップしたいタグの外側にレンダリングされます。
ラッピングの魔法は、内部AbstractServletWrapperPanel
とWebMarkupContainer.onRender(MarkupStream markupStream)
オーバーライドで発生します。ただし、Wicket 1.5では、提供されなくなったため、呼び出すことができませmarkupStream.next()
ん。私はまだこれを回避する方法を見つけていません。
参照としてサンプルパネル実装を使用した1.4の作業コード:
(HttpServletRequest)RequestCycle.get().getRequest().getContainerRequest()
1.5バージョンでは、とを介してリクエストとレスポンスを取得しています(HttpServletResponse)RequestCycle.get().getResponse().getContainerResponse()
それから私はしようとしました:
- onRender()を使用する-1.5では
markupStream.next()
提供されなくなった 魔法 - に移動します
onComponentTagBody(MarkupStream markupStream, ComponentTag tag)
- 注:onComponentTagBody()を呼び出すには、wicket:containerタグを開く必要がありました
<wicket:container wicket:id="wrappedContentId"></wicket:container>
。また、呼び出される直前にmarkupStream.next()
そのステップが実行されるため、呼び出さずに試しました。Component.internalRenderComponent()
onComponentTagBody
- 注:onComponentTagBody()を呼び出すには、wicket:containerタグを開く必要がありました
- に移動します
onComponentTag(ComponentTag tag)
- 上記の設定と組み合わせ
setRenderBodyOnly(true)
てWebMarkupContatiner.onInitialize()
<div>
の代わりにタグを使用するwicket:container
- 1.5のレンダリングプロセスを追跡するには、デバッグモードを使用します。しかし、それでも、コンポーネントをレンダリングする新しい1.5の方法の重要な部分を見逃していると思います。
すぐにすべてのJSP機能をWicketに移行するオプションはないので、これは現時点で私たちにとって一種の目玉です。
参考までに、これを行う1.4の方法は、記事jsp-and-wicket-sitting-in-a-treeおよびWicketwikiで見つけたアプローチとよく似ています。
この問題を解決するための助けをいただければ幸いです。
[編集]
TheStijnからの提案の後、私も呼び出しを試みましgetAssociatedMarkupStream()
たonRender()
が、次のエラーが発生します。org.apache.wicket.markup.MarkupNotFoundException: Markup of type 'html' for component '... AbstractServletWrapperPanel$1' not found.
jsp - フォームで Dispatcher をリクエストする
ユーザーの詳細を取得するために使用したjspファイルにフォームがあります。送信ボタンをクリックすると、フォーム アクションが別の jsp ファイルに設定され、詳細がデータベースに挿入されます。ただし、その前に、ユーザーがユーザー ID を入力するとすぐに、利用可能かどうかを確認するボタンが表示されます。ボタンをクリックすると、ユーザー名をパラメーターとしてコントロールを別のjspページに移動させます。そこで空き状況の確認をしています。レスポンスを前のjspファイルに戻したい。これは、「リクエストディスパッチャー」を使用して実現できますか。はいの場合、誰かがリクエストディスパッチャーのインクルードおよび転送方法を説明できます。ネットで検索してみました。利用可能なコードのみがあります。このリクエスト ディスパッチャーとは何か、またどのように機能するのかを知りたいです。
java - フィルター Java EE での要求 URI の変更
フィルタで aを使用しRequest Dispatcher
てリクエスト URI を変更しましたが、このリクエスト ディスパッチャーの問題は、フィルタ チェーンを壊すことです。したがって、この Filter の後に呼び出される Filter は呼び出されません。
送信リダイレクトを使用すると、フィルターが呼び出されますが、URL はブラウザーに反映されます。
次に、HttpRequestWrapper
クラスでメソッドをオーバーライドして URI を変更しようとしgetRequestURI()
ました。URI を変更して返すロジック全体を記述しました。このメソッドが呼び出され、URL が実際に変更されます。
ただし、Tomcat は常に HTTP 404 エラーをスローします。GlassFishでも試しました。
何が問題なのかわからない。オーバーライドはgetRequestURI()
正しいことですか?
java - request.getRequestDispatcher() の .JSP ファイルへのパスを指定するにはどうすればよいですか?
request.getContextPath() の意味について混乱しています。私のファイルレイアウトは次のとおりです。
で、MyPage.jsp
JavaScriptと画像を見つけることができます
と
これから、「WebContent」フォルダーに動的に解決されると結論付け${pageContext.request.contextPath}
ました。これは、名前に関係なく、このフォルダーに解決されることを理解しています。それは働いています。
ただし、これらすべてから、私の .java コードrequest.getContextPath()
でも動的に "WebContent" に解決されると結論付けました。しかし、.java コードからMyPage.jsp
から形成された文字列を使用して転送しようとするrequest.getContextPath()+"/WEB-INF/JSP/MyPage.jsp"
と、JSP が見つかりません。これにより、404 エラー - 「要求されたリソース (/MyServer/WEB-INF/JSP/MyPage.jsp) は利用できません」が発生します。呼び出す"/WEB-INF/JSP/MyPage.jsp"
と、JSP ページが起動します。事前保留request.getContextPath()
が原因でこれが失敗する理由を誰かが説明できますか?.JSPへのパスが常に解決されるようにするために使用する必要があるものは他にありますか?
java - RequestDispatcherを使用してサーブレットのdoGet()メソッドを呼び出す
doGet()
からメソッドを呼び出すことはどのように可能RequestDispatcher
ですか?
RequestDispatcher rd = sc.getRequestDispatcher("/CartServlet");
rd.forward(request, response);
このコードはdoPost()
デフォルトのアクションとして呼び出されます。