コンテンツ
HttpServletRequestクラスの一般的なメソッド
契約とは何ですか?
合意とは、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));
}
再実行: