問題タブ [servletexception]
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.
java - HttpServlet によってスローされた ServletExceptions は、Tomcat によって「SEVERE」としてログに記録されますが、推奨される方法で処理されます。
問題の説明
web.xml で別の HttpServlet に適切にリダイレクトされますが、Tomcat は、HttpServlet が ServletException をスローしているときに、スタックトレースを含む SEVERE メッセージをログに記録しています。
Tomcat は、スタック トレースを使用して次のメッセージをログに記録します。
私は何をしましたか?
まず、MyHttpServlet は、その doGet() メソッドで CustomException (Exception のサブクラス) をラップする ServletException をスローします。
次に、スローされた CustomException が MyServletExceptionHandler にリダイレクトされます (場所 '/MyServletExceptionHandler' にマップされます)。このリダイレクトは、web.xml で次のように定義されます。
最後に、 MyServletExceptionHandler はスローされた例外を受け取り、それを出力します。
これにより、予想される 'MyServletExceptionHandler catch Throwable: CustomException' が出力されるため、これは機能しますが、どういうわけか、Tomcat はそのスタック トレースを含む上記の SEVERE メッセージもログに記録します。これは私のロギングを台無しにします。
なぜ私はこのようにしたいのですか?
Java Beat のOCEJWCD 6 Mock Exam – 4によると、上記の方法は、サーブレットで例外処理を処理する適切な方法です。質問 29 の状態 (ネタバレ注意: 太字は正解):
java.lang.Exception から拡張されたビジネス例外が発生した場合にクライアントにエラー ページを送信する賢明な方法は次のうちどれですか?
- 例外をキャッチし、RequestDispatcher を使用してリクエストをエラー ページに転送します。
- 例外をキャッチせず、web.xml で「エラー ページへの例外」マッピングを定義します。
- 例外をキャッチし、それを ServletException にラップし、web.xml で「エラー ページへのビジネス例外」マッピングを定義します。
- 例外をキャッチして ServletException にラップし、web.xml で「ServletException からエラーページへ」のマッピングを定義します。
- 何もしないでください。サーブレット コンテナは自動的にデフォルトのエラー ページを送信します。
3 番目の回答 (正しいとマークされています) は、例外をリダイレクトする私の方法が賢明な解決策であることを明確に示しています。
さらなる討論資料
このページで次の引用を見つけました(2012 年 10 月 2 日、Tom Holloway による CodeRanch.com から)
実際、Web アプリケーションでは ServletException は上り坂になる場所がないため、マスター コンソールに表示することはそれほど不合理ではありません。アプリケーション自体が問題を処理していないことを示しているからです。
実際、Javadoc は ServletException コンストラクターについて次のように述べています。
「指定されたメッセージで新しいサーブレット例外を構築します。メッセージはサーバー ログに書き込んだり、ユーザーに表示したりできます。」
サーバーログと明示的に記載されていることに注意してください。
サーバーは、ここでさまざまな方法で関与できます。まず、web.xml で一般的な例外ハンドラーを定義して、アプリが例外を処理できるようにする必要があります。このハンドラーは、アプリケーション ログにログを記録するだけでなく、回復アクションが必要な場合はそれを決定できます。 (より一般的なサーバー コードでは実行できないこと)。次に、カスタム エラー ページを定義できます。この場合、Tomcat は ServletException をキャッチし、そのページをディスパッチします。ただし、操作ワードはページであることに注意してください。ログイン画面と同様に、これらのページは Tomcat から直接呼び出されるため、サーブレットを介してルーティングすることはできません。つまり、Struts や JSF ではなく、HTML または JSP を使用してください。
ただし、肝心なのは、ServletExceptions をスローすることは、アプリケーション設計が悪いことを示しているということです。これは、誰かが怠けすぎたり、急いで問題に適切に対処できなかったことを意味します。それに比べて、エラーがログに記録される場所は二次的な重要性です。
このステートメントは、Java Beat の OCEJWCD Mock Exam (前述) と、優れた実践としての私自身のソリューションに疑問を投げかけます。ビジネス例外は別のサーブレットで処理する必要があると思いますか? もしそうなら、サーブレット コンテナ (Tomcat) はこれらの例外のスタック トレースをログに記録する必要があると思いますか? そうでない場合、ベストプラクティスは何ですか?
最後に
- ServletExceptions の代わりに RuntimeExceptions をスローすると、同じ SEVERE ログが生成されます。
- 問題の実際の例は、この Bitbucket リポジトリで提供されています。
java - サーブレットを実行しようとするとサーブレット例外が発生する
私はサーブレットの初心者です。サーブレットの例外を下回っています。
私の web.xml コード。
このサーブレットを呼び出す HTML フォーム。
私が得ている例外。
根本的な原因。
昨日同様のコードが正常に動作しました。しかし、私はgit SVNも作業しており、同じコードで新しいプロジェクトを作成するセットアップを行いました。しかし、うまくいきません。いくつかのサンプルもダウンロードしましたが、どれもうまくいきません。
これは私の LoginServlet クラスです。JavaResources->src-mypackage にあります
jsp - renderURL が MVCPortlet jsp ページで機能しない
こんにちは、liferay で MVCPortlet を構築しています。renderURL を使用して他の 2 つの jsp ページを指す view.jsp を使用していますが、2 つのリンクのいずれかをクリックするたびに、Eclipse コンソールで例外が発生します。
これがポートレットのview.jspのコードです
ポートレット プロジェクトの同じディレクトリにある addNewSite.jsp と listWebSites.jsp の 2 つのファイルもあります。
ここにスタックトレースがあります。
java - Etat HTTP 500 - javax.servlet.ServletException: javax.servlet.jsp.JspException: ActionMappings または ActionFormBeans コレクションが見つかりません
私は Struts を初めて使用します。Struts Web アプリケーションの作成方法に関するチュートリアルに従います。ここに私が作成したファイルがあります。
web.xml
Struts-config.xml
index.jsp
LoginAction.java
ログインフォーム.java
しかし、実行すると、次のエラーが発生しました
Etat HTTP 500 - javax.servlet.ServletException: javax.servlet.jsp.JspException: ActionMappings または ActionFormBeans コレクションが見つかりません
EDIT : 完全なスタック トレース
私はグーグルで検索し、提案されたすべての解決策を試しましたが、エラーは解決しません。任意のアイデアください。
PS:Struts 1.1を使用しています
jakarta-ee - HTTP 500 javax.servlet.ServletException: ファイルが見つかりません
Eclipse から実行すると正常に動作する J2EE アプリケーションを開発していますが、Tomcat にデプロイすると次の例外が発生します。ページが表示されるまで何度か更新する必要がある原因がわかりません。
(戦争をエクスポートしようとすると、Eclipse は空のファイルを返すので、Tomcat/webapps/my プロジェクトの WebContent のすべてのファイルをコピーしてデプロイし、WEB-INF のクラスをコピーします)
menu_dashboard_top.jsp は WebContent にあります。これはサーブレットではなく、すべての Web ページに含めるメニューを含む JSP ページです。
すべてのサーブレットを web.xml にマップしました。ここに私の web.xml ファイルがあります
java - Apache Tomcat サーブレット - スレッド「メイン」の例外 java.lang.ClassFormatError
Apache Tomcat サーバーで java.class ファイルを実行しようとしています。Maven を使用してビルドします。
次のコマンドを使用します。
エラーは次のとおりです。
そして私のJavaバージョン:
このエラーに関するいくつかのスレッドを読みましたが、これまでのところ解決に成功していません。どんな助けでも大歓迎です!