問題タブ [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 - サーブレット - requestDispatcher.forward java.lang.NullPointerException
私はオンライン ショップ アプリケーションの一部として Web サーバーを実行しており、フォーム JSP ページを機能させようとしています。私はMavenでEclipse IDEを使用しており、Jettyプラグインを試しています。
こんなふうになります:
ユーザーは、index.jsp ウェルカム ページからボタンを押して、GET 要求を AddProductoServlet に送信します。これは、「tiendas」(ショップ) のリストをロードして jsp ページに貼り付けるために必要であり、ユーザーはドロップダウン リストから 1 つを選択できます (html 要素を選択)。
AddProductoServlet の GET メソッドは次のとおりです。
そしてここに jsp ページ AddProducto:
ここまでは、すべてが正常に機能し、ページが読み込まれ、ドロップダウン リストが正しく入力されています。今はショップ名をロードするためにモックを使用していることに注意してください。後で、Web サービスとデータベースの間でサービスへの呼び出しが行われますが、それは今は重要ではありません。
ここで、ユーザーがフォームの送信ボタンを押したときに次にしようとしているのは、AddProductoServlet の post メソッドを呼び出してフォーム フィールドをチェックすることです。エラーがなければ、成功ページにリダイレクトします。私はそれをテストしました、それは動作します、そしてデバッグから私はすべてのパラメータが正しくサーブレットに渡されることを知っています:
間違いがあり、この行が呼び出されると問題が発生します。
doPost メソッド全体を次に示します。
これらすべての目的は、エラーが発生した場合に AddProducto.jsp を再度ロードすることですが、今回は画面にエラーを表示し (問題を示すエラーのあるフィールドの横に赤いテキストが表示されます)、入力された内容も表示します。以前のテキスト フィールド。
これは、私が取得した NullPointerException エラーのスタックトレースです。言及されている AddProductoServlet の 85 行目は「requestDispatcher.forward(request, response);」に対応します。前に述べたように:
だから今私は立ち往生しています。そのエラーが発生する理由がわかりません。呼び出しは GET メソッドと同じで、問題なく動作します。
以前と同じように、デバッグしましたが、パスは正しいです。それにもかかわらず、/AddProducto.jsp などの何らかの理由で jsp ページが見つからないように思われるため、いくつかの組み合わせを試しましたが、役に立ちませんでした。
このページや他のページでも同様の質問について調査しましたが、何もしませんでした。他のすべてのサーブレットは正常に動作するため、構成は問題ないようです。
ここで何が欠けていますか?ありがとう。
java - RequestDispatcher.include は一度だけ機能します
次のメソッドで RequestDispatcher.include() を使用して、JSP ページのレンダリングを出力しようとしています。
このメソッドは、Tomcat8 で実行しているサーブレットの一部です。これは最初は完全に機能しますが、2 回目の実行でインクルード呼び出しでハングします (つまり、ブラウザーで更新をクリックした場合)。
ディスパッチャーが null でないことは既に確認済みです。
これは、catalina.log から確認できる内容です (レビュー用にクリーンアップされています)。
ファーストラン:
2 回目の実行 (応答が返されない、つまり、ブラウザーは常にページを読み込んでいます):
これは、Tomcat を再起動するまで変わりません。
誰かが私が間違っていること、または少なくともこれをデバッグする方法を説明できますか? ありがとう!
編集1:メソッドが静的であると言うのを忘れましたが、静的ではないものにしてみましたが、違いはありませんでした
java - Java サーブレット ディスパッチャーのライフサイクル
私は Java Web 開発に不慣れで、頭の中に多くの混乱があります。Java で小さなプロジェクトを開発しようとしていますが、MVC パターンのコンポーネントをどのように接続すればよいかわかりません。
DB と対話する DAO があり、通常の CRUD 操作をかなりうまく行うことができます。DAO は、DB 内のテーブルを反映するパッケージ モデルで動作します。O反対側には、WEB-INFフォルダー内にJSPページがあります。
サーブレットhttps://stackoverflow.com/tags/servlets/infoに関するこの情報タグを読みましたが、うまくいきません。ここで説明したように: MVC パターンを使用して JSP/サーブレット Web アプリを開発する方法は?
MVC パターンは、
- モデル(Java クラス / Bean): DB データを反映します (プロパティ、getter/setter メソッドを使用)。
- ここで (JSP ページ)、私の HTML、プレゼンテーション レベルを表示します。
- URL を JSP ページにマップするコントローラー(サーブレット) ですね。
では、モデルが機能し、ビューが機能し、コントローラーは何をすべきでしょうか? 実際に私はこのエラーが発生します:
HTTP ステータス 404 - /crm/hello.jsp タイプ。状況報告メッセージ。/crm/hello.jsp の説明。要求されたリソースは利用できません。
しかし、WEB-INF 内のリソース (hello.jsp ファイル) は存在します。コードのスニペットは次のとおりです。
@WebServlet 表記を使用していますが、これは web.xml を置き換えるものですよね? 私も答えを読みました: Design Patterns web based applicationsとそこで説明されているように:
リクエスト (アクション) ベースの MVC: これは実装が最も簡単です。(ビジネス) モデルは、HttpServletRequest および HttpServletResponse オブジェクトと直接連携します。リクエストパラメーターを(ほとんど)自分で収集、変換、および検証する必要があります。ビューはプレーンなバニラ HTML/CSS/JS で表すことができ、リクエスト間で状態を維持しません。これは、Spring MVC、Struts、および Stripes がどのように機能するかです。
各 URL を JSP ページとリクエスト/レスポンスを含むサーブレットにマップする必要がありますか、それともすべてのリクエスト/レスポンスを処理するサーブレットが 1 つ必要ですか セッションをどこでトレースすればよいですか? クッキーはどこに設定すればよいですか? 業務フローはどこにすればいいですか?たとえば、Web フォームからデータベースにデータを挿入したり、DB データを JSP ページに表示したりしますか?
点をつなげようとしていますが、誰かが欠けています。問題は、モデルとビューがコントローラーとどのように対話するかです。例を挙げていただけますか?
jsf - Deltaspike を追加すると、RequestDispatcher#forward が転送ではなくリダイレクトされる
JBoss EAP6 と Glassfish 4 に Web アプリケーションをデプロイしています。プロジェクトに deltaskpike jar を追加するまで、すべてが期待どおりに機能します。
deltaskpike を有効にすると、サーブレット内の次のコード:
サーバー側で転送する代わりに、ブラウザにリダイレクト応答 (HTTP: 302) を送信します。アプリケーションから deltaskpike jar を削除すると、ディスパッチャー転送は期待どおりに機能します。
FacesServlet 以外のものに転送すると、期待どおりに機能します。
Deltaspike は RequestDispatcher のデフォルトの動作を変更していますか?
java - GetRequestDispatcher.forward が doGet を介して再度送信しています
doGet
オーバーライドされたサーブレットがあります。関連する部分は次のとおりです。
現在、サービス メソッドに入る URL をログに記録しています。URL がserver:8080/context/app/mod/act?param=1
ログ メッセージである場合はapp='app' mod='mod' act='act'
、これがうまく機能していることを確認しました。
jsp にルーティングする必要があるものをヒットしようとすると、何らかのばかげた理由で doGet メソッドに戻されます。私のログは次のようになります。
しかし、私は自分の JSP を my 経由で送信したくありませんdoGet
- JSP に送信したいのです! なぜこれを行うのでしょうか?
私のサーブレットは をキャッチ"/*"
しています。しかし、それがjspsをキャッチするとは思っていませんでした。
ここで何が間違っていますか?
java - 入力フォームの RequestDispatcher
この検索フォームがあります。
ここでは、入力に入力した内容を取得し、それを Content にディスパッチします。私の入力はまったく反応ではありません。私のデバッガーは、私のプログラムが request.getParameter("search") 部分にさえ行かないことを示しています。どうしたの?