コード住所:https://github.com/iyuanyb/webserver
用具
-
静的、動的リソース獲得。
-
クッキー、セッション、長いHTTP接続、およびタイミングおよびHTTPセッションの長いリンクをクリアします。
-
などスプリングMVC注釈同様のプログラミング、
@RequestMapping
@RequestParam
データはパラメータ受信名による方法から得ることができるような、オブジェクトが渡され、またなどのカスケード属性をサポートすることができます。// GET /ページ?のpageSize = 10&PAGENUM = 1 HTTP / 1.1 @RequestMapping( "/ページ") 文字列ページ(@RequestParam(値= "pageSizeを"、はdefaultValue = "10")整数のpageSize、整数PAGENUM){... } / ** * POST /ログインHTTP / 1.1 * ... * user.name =管理&user.passwd =管理&user.data.val = OK * ******* *ユーザー类:文字列の名前。文字列のpasswd; データDATA; *データ类:文字列のval; * / @RequestMapping( "/ログイン"、メソッド= HttpMethod.POST) 文字列ログイン(ユーザユーザ){...}
-
方法のみから、正を使用してテンプレートが達成される、経路テンプレートを表す文字列を返す
request
とsession
など、プロパティ値のフィールドを取得します${request.user.id}
。 -
ロギング(持つjava.util.loggingロガー、カスタマイズされたログ・フォーマットを使用して構築された)操作ログサーバ(サーバN.LOG)に関連し、HTTPは、ログ(アクセスN.LOG)を要求します。
APIの概要:
@Controller @RequestMapping @RequestParam @RequestHeader @CookieValue のHttpRequest のHttpResponse HttpSessionの クッキー HTTPMETHOD
使用
ノートの使用に関連するインポートのjarパッケージは、(リリースを参照)、また、それが静的なWebリソースのルートパスを表し、クラスパスにwebappディレクトリを作成する必要があります。その後のメインクラスに main
メソッド呼び出し BootStrap.run()
スキャンコントローラは、ディレクトリを横断することによって実現され、そのプロジェクトがパッケージをサポートしていないため、クラスファイルの形で公開する必要があります。Server-config.propertiesパラメータは、クラスパスにプロファイルを提供する必要があり、次の設定項目が含まれています。
#サーバーのポート PORT = 80 のパス#ストアログファイルの LOG_FILE_STORAGE_PATH = E:\\ ミリ秒で#接続の有効期限 CONNECTION_EXPIRY_TIME = 30000 #クリーニング期間満了する接続ミリ秒の CONNECTION_CLEANING_CYCLE = 30000 #でのセッションの有効期限(ミリ秒) SESSION_EXPIRY_TIME = 30000 #クリーンアップはミリ秒単位で、サイクルのセッションを期限切れ SESSION_CLEANING_CYCLE = 30000 クライアントは、スレッド数のイベントを読み込むために#聞く POLLER_THREAD_COUNT = 2 #の特定の要求処理スレッドプールサイズ REQUEST_PROCESSOR_THREAD_COUNT = 4
ショー
- プロジェクト構造
-
EchoController.java
com.testパッケージ変更のため; //案内パッケージ省略... @Controllerコントローラとみなされます//のみ@Controllerマーク クラスに注釈を@RequestMapping //サポートし、 パブリッククラスEchoController { //スレッドセーフ プライベート最終てDateTimeFormatterフォーマッタ= DateTimeFormatter.ofPattern静的( "MM-DD-YYYY HH:MM:SS"); @RequestMapping( "/エコー")// "/エコー"にマッピングされた 公共の文字列エコー(HttpRequestの要求、@RequestParam(値= "MSG"はdefaultValue = "空の入力")文字列MSG){ LocalDateTimeをLocalDateTimeを= LocalDateTime.ofEpochSecond(でrequest.getSession()getLastAccessedTime()/ 1000、0、ZoneOffset.ofHours(8));. request.setAttribute( "lastAccessedTime"、localDateTime.format(フォーマッタ) )。 要求。setAttribute( "MSG"、MSG)。 リターン"test.htmlという"; //テンプレートパスをレンダリングする(CLASSPATH:Webアプリケーション/ test.htmlという) } パブリック静的無効メイン(文字列[] args){ BootStrap.run(); } }
-
test.htmlという
<!DOCTYPE> <HTML LANG = "EN"> <HEAD> <TITLE>テスト</ TITLE> </ HEAD> <BODY> <P>エコー:$ {request.msg} </ P> <P>最終アクセスさ時間:$ {request.lastAccessedTime} </ P> <P> <IMG SRC = "IMG / girl.jpg" ALT = "女の子"幅= "320"高さ= "480" /> </ P> </ BODY > </ HTML>
-
効果
-
ジャーナル