国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&ベース Java Web プロジェクトの基本を図で詳しく説明

Java Web プロジェクトの基本を図で詳しく説明

Nov 27, 2019 pm 02:19 PM
java

Java Web プロジェクトの基本を図で詳しく説明

1. Java Web モジュールの構造

JSP ファイルは AXPX ファイルに似ており、パスと URL は対応しています。 1 対 1 で、別のクラスに動的にコンパイルされます。 Java Web と ASP.NET のコアはそれぞれ Servlet と IHttpHandler インターフェイスであるため、基本的なページ ファイル (JSP、ASPX) メソッドとその後開発される MVC メソッド (Spring MVC、ASP.NET MVC) はどちらもコアに基づいています?;镜膜摔膝抓互牖筏圃俣葤垙垽筏蓼?(DispatcherServlet、MvcHandler)。 (推奨: java ビデオ チュートリアル )

JSP ファイルを除き、他のすべてのファイルはアプリケーション ディレクトリの WEB-INF サブディレクトリにデプロイされます。WEB-INF ディレクトリは ASP と見なすことができます。 .NET App_ で始まる web.config ファイル、bin ディレクトリ、およびランタイム ディレクトリを統(tǒng)合ルート ディレクトリに保存します。

Java Web の構成ファイル web.xml も WEB-INF ディレクトリに格納されますが、ASP.NET の構成ファイル web.config は通常、アプリケーション ディレクトリに直接格納されます (他の ASP.NET ディレクトリにも web .config ファイル)。 ASP.NET はすべての參照とコード生成された DLL を bin に展開しますが、Java Web の參照 jar と生成されたクラスはそれぞれ WEB-INF のサブディレクトリ lib とクラスに保存されます (參考 1)。

要約すると、ASP.NET の web.config、bin、App_Data などと同様に、Java Web の WEB-INF、web.xml、lib、およびクラスを理解し、習得する必要があります。

|--Assembly Root
  |---WEB-INF/
    |--web.xml
    |--lib/
    |--classes/

1. WEB-INF ディレクトリ: Java Web ファイルのルート ディレクトリ。

2. web.xml ファイル: 構成ファイル (asp.net web.config)。

3. lib ディレクトリ: クラス ライブラリ ファイル (asp.net bin) を保存します。

4. Classes ディレクトリ: クラス ファイル (asp.net bin) を保存します。

2. Java Web プロジェクトの基本構造 [Eclipse Dynamic Web Project]

Eclipse Dynamic Web Project

( 1 ) コンパイルする必要があるソース コード ディレクトリと出力ディレクトリを設定できます。デフォルトでは、src ディレクトリ內のソース ファイルは build\classes ディレクトリにコンパイルされます。

(2) WEB-INF のルート ディレクトリを構成できます。デフォルトは WebContent です。

(3) デフォルトの web.xml ファイルを生成するかどうかを選択できます。

デフォルトで web.xml を生成する DynamicWP という名前の動的 Web プロジェクト プロジェクトを作成します。ファイル構造は次のとおりです:

|--DynamicWP
  |--.settings/
  |--build/
    |--classes/
  |--src/
  |--WebContent/
    |--META-INF/
      |--MANIFEST.MF
    |--WEB-INF/
      |--web.xml
      |--lib/

Eclipse プロジェクト エクスプローラーでの DyanmicWP プロジェクトの表示は次のとおりです:

|--DynamicWP
  |--Deployment Desciptor
  |--JAX-WS Web Services
  |--Java Resources
  |--JavaScript Resources
  |--build
  |--WebContent
    |--META-INF/
      |--MANIFEST.MF
    |--WEB-INF/
      |--web.xml
      |--lib/

1.settings は、さまざまな構成を保存する Eclipse プロジェクト フォルダーです。 Elipse プロジェクトの。 Eclipse プロジェクト ビューでは表示されません。

2. src ディレクトリにはソース コードが保存されます。 EclipseのプロジェクトビューのJava Resources/srcに相當します。

3. Build はコンパイルされたファイルを保存します。

4. ランタイム ファイル構造は、同様の \workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\DynamicWP ディレクトリで確認できます。

3. Maven Web プロジェクトの基本構造

多くの Java IDE があり、すべてに特定のサポーターが存在するという事実を考慮して, Eclipse の Java Web プロジェクト 移植性はありません。 Maven は、プロジェクト構造の仕様上の問題を解決するだけでなく、強力な參照処理などの強力な機能を提供し、プロジェクトのレイアウトなどにおいて、現在のデファクトスタンダードとなっています。 Maven プロジェクトの主な構造は次のとおりです (參考 2):

|--root
  |--pom.xml
  |--src/
    |--main/
      |--java/
      |--resources/
      |--webapp/
    |--test/
      |--java/
      |--resources
  |--target/

Eclipse で新しい Maven Web アプリ プロジェクトを作成します。ファイル構造は次のとおりです:

|--MavenWP
  |--pom.xml
  |--.project
  |--.classpath
  |--.settings/
  |--src/
  |--target/
    |--classes/
    |--m2e-wtp/

1. pom.xml: Maven プロジェクト構成ファイル。

2. .project ファイルと .classpath ファイル、および .settings ディレクトリと target/m2e-wtp ディレクトリ內のファイルは、Eclipse プロジェクト構成ファイルです。

3、src および target: Maven 標準プロジェクト ディレクトリ。

Eclipse4.5.1 の対応するプロジェクト リソース管理ビュー

|--MavenWP
  |--Deployment Desciptor/
  |--Java Resources/
  |--JavaScript Resources/
  |--Deployed Resources/
  |--src
  |--target
  |--pom.xml

1. 作成されたプロジェクトは、index.jsp を追加し、エラーを報告します: Maven を使用してサーブレットの依存関係を検索して追加し、その後、更新実行後は正常になります。

2. Java ビルド パスの問題の警告: Maven を使用してコンパイラー プラグインを検索して追加し、それを排除するように構成ノードの更新を構成します。

3. 壁の問題に対応する Maven イメージを構成するには、http://maven.oschina.net/content/groups/public/ を使用します。

4. デフォルトで作成される Maven Web アプリケーションに欠落している src/main/java、src/test/java、src/test/resources などのディレクトリは、手動で追加する必要があります。

5. .settings/org.eclipse.wst.common.project.facet.core.xml を変更し、 を更新します。

6. web.xml ルート ノードの先頭を次のように変更します:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

Maven の設定ファイル pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>me.test</groupId>
    <artifactId>MavenWP</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>MavenWP Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>MavenWP</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4.サーブレットの基本

ASP.NET のコアが IHttpHandler であるのと同じように、Java Web のコアは javax.servlet 名前空間にあるサーブレット インターフェイスです。フィルターの概念は ASP.NET の HttpModule を參照することができ、サーブレットのさまざまなリスナーは ASP.NET HttpApplicaiton の同様のイベントを參照することができます。

Java であっても .NET Web テクノロジであっても、それらはすべて HTTP プロトコルの特定の実裝に基づいています。 Java Web と ASP.NET の一部のコア項目は次のように対応します。

Java Web プロジェクトの基本を図で詳しく説明サーブレットと ASP.NET の簡略図:

Java Web プロジェクトの基本を図で詳しく説明

用于簡化web.xml配置的Servlet的注解(3.0開始支持,在ASP.NET中沒有對應項):

(1)WebServlet:作用在javax.servlet.http.HttpServlet的實現類上。

(2)WebFilter:作用在javax.servlet.Filter的實現類上。

(3)WebListener:作用在Listener的實現類上(javax.servlet.ServletContextListener、javax.servlet.ServletContextAttributeListener、javax.servlet.ServletRequestListener、javax.servlet.ServletRequestAttributeListener、javax.servlet.http.HttpSessionListener、javax.servlet.http.HttpSessionAttributeListener)。

(4)WebInitParam:結合WebServlet和WebFilter注解用來配置屬性。

(5)MultipartConfig:作用在javax.servlet.http.HttpServlet的實現類上。標注請求是mime/multipart類型。

用于Servlet容器初始化的ServletContainerInitializer(可實現無web.xml,3.0開始支持,可類比ASP.NET的Application_Start方法):

(1)Servlet容器啟動時查找ServletContainerInitializer的實例。

(2)ServletContainerInitializer實例使用HandlesTypes標注一個或多個類型,Servlet容器將在啟動時掃描classpath,獲取這些類型的實例。

(3)Servlet容器在啟動時調用ServletContainerInitializer實現類的onStartup方法,該方法可以獲取HandlesTypes標注的所有類型對象。

五、自定義Session

Session在存儲安全性要求較高的會話信息方面是必不可少的,Session當然絕對不是用來存儲用戶登錄狀態(tài)的,但類似驗證碼等敏感信息卻必須存儲在Session中。對于分布式Web應用自定義Session支持獨立的狀態(tài)服務器或集群是必須的。

ASP.NET通過SessionStateModule通過配置文件配置實際的Session提供程序,Session提供程序實現了SessionStateStoreProviderBase,因此在ASP.NET中實現自定義Session是通過繼承SessionStateStoreProviderBase實現,配置Session是通過Web.config。

Java Web プロジェクトの基本を図で詳しく説明

同理,Java Servlet中使用自定義Session通過Filter可以實現。由于不同的servlet容器對Session的實現不同,所以通用性最好的方式是繼承HttpServletRequestWrapper重寫getSession方法返回自定義的Session對象。

(1)首先自定義繼承HttpSession的MySession(為了便于演示,僅包裝了容器的session并轉發(fā)調用)。

import java.util.Enumeration;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;

public class MySession implements HttpSession {

    private HttpSession _containerSession;

    public MySession(HttpSession session) {
        this._containerSession = session;
    }

    @Override
    public long getCreationTime() {
        return this._containerSession.getCreationTime();
    }

    @Override
    public String getId() {
        return this._containerSession.getId();
    }

    @Override
    public long getLastAccessedTime() {
        return this._containerSession.getLastAccessedTime();
    }

    @Override
    public ServletContext getServletContext() {
        return this._containerSession.getServletContext();
    }

    @Override
    public void setMaxInactiveInterval(int interval) {
        this._containerSession.setMaxInactiveInterval(interval);
    }

    @Override
    public int getMaxInactiveInterval() {
        return this._containerSession.getMaxInactiveInterval();
    }

    @SuppressWarnings("deprecation")
    @Override
    public HttpSessionContext getSessionContext() {
        return this._containerSession.getSessionContext();
    }

    @Override
    public Object getAttribute(String name) {
        return this._containerSession.getAttribute(name);
    }

    @SuppressWarnings("deprecation")
    @Override
    public Object getValue(String name) {
        return this._containerSession.getValue(name);
    }

    @Override
    public Enumeration<String> getAttributeNames() {
        return this._containerSession.getAttributeNames();
    }

    @SuppressWarnings("deprecation")
    @Override
    public String[] getValueNames() {
        return this._containerSession.getValueNames();
    }

    @Override
    public void setAttribute(String name, Object value) {
        this._containerSession.setAttribute(name, value);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void putValue(String name, Object value) {
        this._containerSession.putValue(name, value);
    }

    @Override
    public void removeAttribute(String name) {
        this._containerSession.removeAttribute(name);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void removeValue(String name) {
        this._containerSession.removeValue(name);
    }

    @Override
    public void invalidate() {
        this._containerSession.invalidate();
    }

    @Override
    public boolean isNew() {
        return this._containerSession.isNew();
    }

}

(2)自定義繼承HttpServletRequestWrapper的MyRequest

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpSession;

public class MyRequest extends HttpServletRequestWrapper {

    public MyRequest() {
        super(null);
    }

    public MyRequest(HttpServletRequest request) {
        super(request);
        // TODO 自動生成的構造函數存根
    }

    @Override
    public HttpSession getSession(boolean create) {
        return new MySession(super.getSession(create));
    }

    @Override
    public HttpSession getSession() {
        return new MySession(super.getSession());
    }
}

(3)自定義Filter將Request包裝為MyRequest

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

@WebFilter("/*")
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO 自動生成的方法存根

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        chain.doFilter(new MyRequest((HttpServletRequest) request), response);

    }

    @Override
    public void destroy() {
        // TODO 自動生成的方法存根

    }

}

通過注解配置了Filter,也可以通過原始的web.xml方式配置。

小結:

你至少應該知道的:

(1)配置文件:ASP.NET的web.config和Java的web.xml

(2)Web核心:ASP.NET的IHttpHandler接口和Java的Servlet接口

(3)攔截器:ASP.NET的HttpModule和Java的Filter

(4)應用程序事件:ASP.NET的HttpApplication event和Java的各種Listener

(5)啟動器:ASP.NET的Application_Start和Java的ServletContainerInitializer

(6)引用管理:ASP.NET的Nuget和Java的Maven

感想:

ASP.NET的核心對象不像Java Servlet一樣,從一開始就基于接口,這是缺點。但Java Servlet的核心對象全靠容器實現,就連HttpSession同樣如此,這也是缺點。比如自定義個Session十分麻煩,沒有像ASP.NET一樣簡單配置即可。另外Servlet的一些抽象定義有點過頭了,不夠簡潔。

更多java知識請關注java基礎教程欄目。

以上がJava Web プロジェクトの基本を図で詳しく説明の詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數の操作を実行し、結果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數のSQL操作を実行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

ネットワークポートとファイアウォールの理解 ネットワークポートとファイアウォールの理解 Aug 01, 2025 am 06:40 AM

ネットワークポートアンドファイアワルクトグテルトエナブルコマニケーションwhiledensuringsecurity.1.networksarevirtualendpointsnumbered0–655 35、withwell-knownportslike80(http)、443(https)、22(ssh)、および25(smtp)識別pecificservices.2.portsoperateovertcp(信頼できる、c

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數、アクティブスレッド、靜的フィールドなど)、および到達不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを実行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを実行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進みます 説明された延期聲明の例で進みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數が戻る前に指定された操作を実行するために使用されます。パラメーターは、延期時にすぐに評価され、関數は最後のファーストアウト(LIFO)の順に実行されます。 1.複數の債務は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles