私は自分自身をjavaに教えることを試みている長い時間ASP.NET開発者です。私はJettyをダウンロードし、基本的なWebアプリケーションのセットアップを取得しました。 Head First ServletsとJSPのチュートリアルでは、コンパイル時にコンテナのservlet-api.jar(またはJettyの場合はservlet-api-3.0.jar)ファイルを参照するように指示しています。サーブレットクラスを拡張しているので、これはアプリケーションを特定のコンテナのサーブレット実装に結びつけませんか?私がJettyに対して自分のアプリをコンパイルすると、TomcatやEEサーバー(glassfish、jbossなど)の下にアプリを展開できますか?特定のサーブレットコンテナに対してJava Webアプリケーションクラスをコンパイルする必要がありますか?
1
A
答えて
2
サーブレット固有のクラスを参照していないため、これは問題ではありません。 servlet-api.jar
は、いくつかのインタフェースと抽象クラスの形式で十分に文書化された仕様です。
すべてのコンテナには、このJARのコピーが必要です(異なるJavaバージョンまたはコンパイラを使用してコンパイルされる可能性があります)。仕様を実装しているため、API自体は変更されません。ただし、コンテナ提供のJARを参照する必要はありません。あなたは安全にmavenのバージョンや他のものを見つけることができます。それらはすべて互換性があります。さまざまなライセンスの非互換性のためにバンドルされていないことがあります。
言い換えれば、は一度だけ書き込まれ、どこでも実行されます。もここで適用されます。
1
あなたはjarにコーディングしていないので、jarに含まれるような仕様にコーディングしています。 Webコンテナを提供するサーバはすべてこの仕様の実装を持ちますが、含まれているjarはまったく無関係です。
仕様にのみコーディングすれば、サーバーの実装に縛られることはありません。
jarは、必要なクラス依存関係を解決するために、コンパイル時および実行時に使用されます。コンパイル時に必要なAPI依存関係を提供する任意のjarを使用できますが、実行時に暗黙的に特定のサーバーによって提供される実装を使用します。スタンドアロンのアプリケーションとは異なり、標準のAPIまたは実装を含めるために独自のwebappの特定の設定を行う必要がないため、暗黙のうちにサーバーはすでにそれを提供します。
関連する問題
- 1. typescriptをes6にコンパイルする必要がありますか?es5にコンパイルする必要があります
- 2. 特定の数のホストに対してネットワークのサブネット化を手助けする必要がありますか?
- 3. Java Webアプリケーションで特殊文字をエスケープする必要があります
- 4. 特定のユースケースに対してデータソースコントロールを実装する必要がありますか?
- 5. Azure Web Appは、ASP.NET Webフォームに対してARR Affinityをオンにする必要がありますか?
- 6. 特定の年にJava Enumを使用してユーザーを取得する必要がありますか?
- 7. Java Webアプリケーションをリフレッシュしてリソースファイルを参照する必要があります
- 8. 特定のコミットに戻る必要があります
- 9. 特定のコンテンツを取得しているWebページのスクラップを手助けする必要があります...
- 10. SQL Server - テーブルの特定の列のエントリに対してLIKEの一致を返す必要があります
- 11. AngularJS:特定のリクエストに対してのみCookieを渡す必要があります
- 12. タイムゾーンをWebアプリケーションのユーザー設定にする必要がありますか?
- 13. Java WebアプリケーションでSecurity Managerを使用する必要がありますか?
- 14. Webサービスをトランザクションにする必要がありますか?
- 15. 特定のブランチでコミットを探す必要があります
- 16. javascriptプログラムの特定の部分にリンクする必要がありますか?
- 17. サイトはJavaを使用していますか? (Web用の3Dを開発する必要があります)
- 18. XML宣言は特定のエンコーディングにする必要がありますか?
- 19. elasticsearchと対話するJavaクライアントを作成する必要があります
- 20. ボタンをクリックして特定のアコーディオングループを開く必要があります
- 21. Regex(Java) - 特定のパターン文字列を定式化するのに役立つ必要があります
- 22. Webクライアントをリセットする必要がありますか?
- 23. Java enumsにnull/unknown値を定義する必要がありますか?
- 24. Java - ログメッセージに定数を使用する必要がありますか?
- 25. 特定のユーザーのためにSidekiqプロWeb UIをREADONLYにする必要があります
- 26. 異なるクエリタイプに対して別々のSQLアカウントを設定する必要がありますか?
- 27. JavaScriptにコンパイルする必要はありますか?
- 28. ポケットベルアダプターから現在のビューフラグメントを特定する必要があります
- 29. asp.net mvc appsをあらかじめコンパイルする必要がありますか?
- 30. 公開するMQTTクライアントに対してcleanSessionパラメーター(永続セッション)を設定する必要がありますか?
あなたはHttpServletを拡張していると仮定しますか? Jettyには、このクラスやhttpサーブレットのフレームワークに関する一般的なことはありません。特定のコンテナ実装に縛られることはありません。 – skiller3
なぜ各コンテナには独自のサーブレット実装が付属しているのですか?なぜサーブレットAPIはJavaコアライブラリの一部ではなく、スタンドアロンパッケージのどこかにありますか? – Chris
私が知っている限り、コンテナは独自のサーブレット実装を持っていません。 Jettyの保守担当者は、サーブレット-api-3.0.jarをあなたの便宜のためにダウンロードしてバンドルしました。Jetty(すべてのコンテナと同じように)は実行時にクラスを必要とするためです。クラスは非常に特殊なコンテキストに対応しているため、コアJavaの一部ではありません(世界中で多くのプロダクションサーブレットコードが与えられています) – skiller3