【サーブレット】HTTPプロトコル

コンテンツ

 契約とは何ですか?

要求されたHTTPプロトコル形式

GETリクエスト

アイコン:

POSTリクエスト

 一般的なリクエストヘッダーの説明

GETおよびPOSTリクエストとは

GETリクエスト:

POSTリクエスト:

応答のHTTPプロトコル形式

一般的な回答の説明

MIMEタイプの説明

 HttpServletRequestクラス

HttpServletRequestクラスの一般的なメソッド

メソッドのデモンストレーション:

実行後:

サーブレットはWebフォームでパラメータを取得します

リクエストを取得:

ポストリクエスト:


 契約とは何ですか?

合意とは、2者または複数の当事者が互いに合意した規則を指し、全員がそれらを遵守する必要があります。これは合意と呼ばれます。

HTTPプロトコルとは、クライアントとサーバー間で送信されるデータが、HTTPプロトコルと呼ばれるルールに準拠する必要があることを意味します。

HTTPのデータはメッセージとも呼ばれます。

要求されたHTTPプロトコル形式

クライアントからサーバーに送信されるデータは、要求と呼ばれます。

サーバーは、応答と呼ばれるデータをクライアントに送り返します。

リクエストには、GETリクエストとPOSTリクエストの2種類があります。

GETリクエスト

1.リクエストライン

(1)リクエストの方法はGETです

(2)要求されたリソースパス[+?+要求パラメーター]

(3)要求されたプロトコルHTTP/1.1のバージョン番号

2.リクエストヘッダー

key:valueは、さまざまな意味を表すさまざまなキーと値のペアで構成されます。

サーバーを起動します。

アイコン:

POSTリクエスト

1.リクエストライン

 (1)リクエストの方法はPOSTです

   (2)要求されたリソースパス[+?+要求パラメーター]

   (3)要求されたプロトコル番号HTTP / 1.1

2.リクエストヘッダー

     1)key:value異なるリクエストヘッダーは異なる意味を持ちます

    空白行

3.リクエスト本文===>>はサーバーに送信されるデータです

フォームの主な内容: 

<from action="http://localhost:8080/06_servlet/hello3" method="post">
    <input type="hidden" name="action" value="login"/>
    <input type="hidden" name="username" value="root"/>
    <input type="submit">
</from>

アイコン:

 一般的なリクエストヘッダーの説明

        Accept:クライアントが受け入れることができるデータ型を示します

        Accpet-languege:クライアントが受け入れることができる言語のタイプを示します

        User-Agent:クライアントブラウザに関する情報を示します

        ホスト:要求時にサーバーのIPとポート番号を示します

GETおよびPOSTリクエストとは

GETリクエスト:

         1.フォームタグmethod=get

        2.ラベル

        3.リンクタグはcssを導入します

        4.スクリプトタグはjsファイルをインポートします

        5.imgタグは写真を紹介します

        6.Iframがhtmlページを紹介します

        7.ブラウザのアドレスバーにアドレスを入力し、Enterキーを押します

POSTリクエスト:

        1.タグからmethod=post

応答のHTTPプロトコル形式

1.応答ライン

        (1)応答のプロトコルとバージョン番号

        (2)応答ステータスコード1

        (3)応答ステータス記述子 

2.応答ヘッダー

        (1)key:value異なる応答ヘッダーは異なる意味を持ちます

 空白行

3.応答本文->>>はクライアントに返されるデータです

一般的な回答の説明

200は、リクエストが成功したことを意味します

302は、リダイレクトを要求することを意味します

404は、リクエストサーバーがそれを受信したが、必要なデータが存在しないことを意味します(アドレスエラー)

500は、サーバーがリクエストを受信したが、サーバーに内部エラー(不正なコード)があることを意味します

MIMEタイプの説明

MiMEは、HTTPプロトコルのデータ型です。

MIMEの完全な英語名は「MultipurposeInternetMailExtensions」であり、MIMEタイプの形式は「ラージタイプ/スモールタイプ」であり、特定のファイルの拡張子に対応します。

例:gifタイプ、大きいタイプは画像、小さいタイプはgif、image/gifで表される

一般的なMIMEタイプ:

 HttpServletRequestクラス

効果:

リクエストがTomcatサーバーに入るたびに、TomcatサーバーはリクエストされたHTTPプロトコル情報を解析してRequestオブジェクトにカプセル化し、それをサービスメソッドに渡します(使用するdoGetとdoPost、HttpServletRequestを介して取得できます)オブジェクト)すべての要求された情報)

HttpServletRequestクラスの一般的なメソッド

getRequestURI()は、要求されたリソースパスを取得します

getRequestURL()要求されたUniform Resource Locator(絶対パス)を取得します

getRemoteHostは、クライアントのIPアドレスを取得します

getHeader()リクエストヘッダーを取得します

getParameterリクエストパラメータを取得します

getParameterValues()リクエストペアのパラメータを取得します(複数の値がある場合に同時に使用されます)

getMethod()リクエストメソッドGETまたはPOSTを取得します

setAttribute(key、value)フィールドデータを設定します

getAttribute(key)ドメインデータを取得します

getRequestDispatcherリクエスト転送オブジェクトを取得します

メソッドのデモンストレーション:

Webプロジェクト03_servletを作成し、web.xmlで構成します

    <servlet>
        <servlet-name>RequestAPIServlet</servlet-name>
        <servlet-class>com.servlet.RequestAPIServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RequestAPIServlet</servlet-name>
        <url-pattern>/requestAPIServlet</url-pattern>
    </servlet-mapping>

srcの下にクラスRequestAPIServletを作成して、HttpServletを継承します


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //        getRequestURI() 获取请求的资源路径
        System.out.println("URI->"+req.getRequestURI());
        //        getRequestURL()  获取请求的统一资源定位符(绝对路径)
        System.out.println("URL->"+req.getRequestURL());
        //        getRemoteHost 获取客户端的ip地址
        System.out.println("客户端ip地址:"+req.getRemoteHost());
        //        getHeader()   获取请求头
        System.out.println("请求头User-Agent->"+req.getHeader("User-Agent"));
        //        getMethod()获取请求的方式GET或POST
        System.out.println("请求的方式:"+req.getMethod());
    }
}

編集構成の情報を03_servletのようなものに変更します。

実行後:

 URI-> / 03_servlet / requestAPIServlet URL-
> http:// localhost:8080 / 03_servlet / requestAPIServlet
client ip address:0:0:0:0:0:0:0:1
リクエストヘッダーUser-Agent-> Mozilla / 5.0 (Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 97.0.4692.99 Safari / 537.36
リクエスト方法:GET

また、URIはプロジェクト名への単なるリソースパスであり、URLはフルパスであり、直接アクセスできることもわかります。

サーブレットはWebフォームでパラメータを取得します

リクエストを取得:

srcの下にパラメータクラスParameterServletを作成して、HttpServletクラスを継承します

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
public class ParameterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求参数
     String username=req.getParameter("username");
     String password=req.getParameter("password");
     String[] hobby=req.getParameterValues("hobby");
        System.out.println("账号:"+username);
        System.out.println("密码:"+password);
        //Arrays.asList()返回的是一个数组
        System.out.println("爱好:"+ Arrays.asList(hobby));
    }

}

web.xmlでパラメーターを構成します

 <servlet>
        <servlet-name>ParameterServlet</servlet-name>
        <servlet-class>com.servlet.ParameterServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ParameterServlet</servlet-name>
        <url-pattern>/parameterServlet</url-pattern>
    </servlet-mapping>

Webディレクトリにhtmlファイルを書き込みます

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/03_servlet/parameterServlet" method="get">
 账号:<input type="text" name="username"><br>
 密码 :<input type="password" name="password"><br>
    <input type="checkbox" name="hobby" value="HTML">HTML
    <input type="checkbox" name="hobby" value="Java">Java
    <input type="checkbox" name="hobby" value="JavaScript">JavaScript
    <input type="checkbox" name="hobby" value="Spring全家桶">Spring全家桶
    <input type="checkbox" name="hobby" value="Servlet">Servlet<br>
    <input type="submit">
</form>
</body>
</html>

実行を開始します:

 いくつかの情報を入力して送信します。

ポストリクエスト:

クラスで:

 @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求参数
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        String[] hobby=req.getParameterValues("hobby");
        System.out.println("账号:"+username);
        System.out.println("密码:"+password);
        //Arrays.asList()返回的是一个数组
        System.out.println("爱好:"+ Arrays.asList(hobby));
    }

method = "post"の場合、postリクエストで中国語が表示されると文字が文字化けします。

この時点で、設定された文字セットをdoPostメソッドの本体に追加する必要があります。

  req.setCharacterEncoding("UTF-8");

 注:設定された文字セットは、取得パラメーターより上にある必要があります。そうでない場合、文字化けした文字も表示されます。

 @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   //设置字符集
        req.setCharacterEncoding("UTF-8");
        //获取请求参数
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        String[] hobby=req.getParameterValues("hobby");
        System.out.println("账号:"+username);
        System.out.println("密码:"+password);
        //Arrays.asList()返回的是一个数组
        System.out.println("爱好:"+ Arrays.asList(hobby));
    }

 再実行:

おすすめ

転載: blog.csdn.net/weixin_60719453/article/details/122792404