HttpServletRequestの機能
HttpServletRequestのJavaWebクラスで非常に重要。これは、サーブレットのサービス()メソッドのパラメータの一つです!だから、それをマスターするために持っている必要があります!
要求は、以下の機能に分けることができる:
Lは、要求ヘッダデータをカプセル化し、
リクエストがGETである場合、テキストデータの要求をカプセル化Lは、その後何のテキストは存在しない;
L要求がドメイン・オブジェクトであり、それは地図のデータを得るために添加することができます;
Lは、要求の転送を行います
2リクエストヘッダデータ取得要求
文字列値= request.getHeader(「リクエストヘッダ名」);
要求オブジェクトは、データ要求ヘッダを得るために使用することができるが、当然のことながら、これらの要求は、要求と行くにTomcatのデータパッケージです。私たちは、サービス()メソッドを直接得ることができます!
リクエストヘッダ及び要求関連する方法は、次のとおり
LのgetHeaderストリング(文字列名):最初の指定された名前取得要求、
LのgetHeaderNames列挙():すべての要求ヘッダー名取得し;
Lはint getIntHeader(文字列名):int型の値を取得します要求ヘッダー。
response.setContentType("text/html;charset=utf-8");
Enumeration names = request.getHeaderNames();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
String value = request.getHeader(name);
System.out.println(name + ": " + value);
response.getWriter().println(name + ": " + value + "<br/>");
}
3要求取得要求に関連する他の方法
要求は、要求のURLメソッドに関連付けられているいくつかの私達の要求ヘッダデータと設計方法、のためのより便利ないくつかの要求、関連付けられた他の方法を提供します。
int getContentLength():获取请求正文的字节数,GET请求没有正文,没有正文返回-1; String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded(理解为字符串类型),其它类型以后再学; String getMethod():返回请求方法,例如:GET Locale getLocale():返回当前客户端浏览器支持的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用; String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null。表示使用ISO-8859-1编码; void setCharacterEncoding(String code):设置请求编码,只对正文有效!注意,对于GET而言,没有正文!!!所以此方法只能对POST请求中的参数有效! http://localhost:8080/hello/oneServlet?name=zhangSan String getContextPath():返回上下文路径,例如:/项目名称 String getQueryString():返回请求URL中的参数,例如:name=zhangSan String getRequestURI():返回请求URI路径,例如:/hello/oneServlet StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息; String getServletPath():返回Servlet路径,例如:/oneServlet String getRemoteAddr():返回当前客户端的IP地址; String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址; int getRemotePort():返回客户端的端口号,每次请求都会变; String getSchema():返回请求协议,例如:http; String getServerName():返回主机名,例如:localhost int getServerPort():返回服务器端口号,例如:80
System.out.println("request.getContentLength(): " + request.getContentLength());
System.out.println("request.getContentType(): " + request.getContentType());
System.out.println("request.getContextPath(): " + request.getContextPath());
System.out.println("request.getMethod(): " + request.getMethod());
System.out.println("request.getLocale(): " + request.getLocale());
System.out.println("request.getQueryString(): " + request.getQueryString());
System.out.println("request.getRequestURI(): " + request.getRequestURI());
System.out.println("request.getRequestURL(): " + request.getRequestURL());
System.out.println("request.getServletPath(): " + request.getServletPath());
System.out.println("request.getRemoteAddr(): " + request.getRemoteAddr());
System.out.println("request.getRemoteHost(): " + request.getRemoteHost());
System.out.println("request.getRemotePort(): " + request.getRemotePort());
System.out.println("request.getScheme(): " + request.getScheme());
System.out.println("request.getServerName(): " + request.getServerName());
System.out.println("request.getServerPort(): " + request.getServerPort());
4.HttpServletRequest取得パラメータ(重要)
1 HttpServletRequestの取得パラメータの方法は
次のように関連する、HttpServletRequestの取得要求パラメータ・クライアントを使用してもよい
; L文字列のgetParameter(文字列名)名を指定してパラメータ値を取得する
名前を指定することによって、パラメータ配列を取得:L文字列[] getParameterValues(文字列名)同じ名前を使用する場合、名前は、チェックボックスの複数の形で、例えば、可能な複数の値に対応し、
L列挙getParameterNamesメソッド():すべてのパラメータのリストを取得し;
L getParameterMapマップ():すべてのパラメータは、地図に対応するGET、キーは、パラメータの値がパラメータ名です。
パラメータを渡すの2ウェイ
GETとPOST:パラメータを渡す方法。
GET:
リットルアドレスバーに直接与えられたパラメータます。http:// localhost /のparam / ParamServlet P1 = V1&V2 = P2;?
パラメータが与えられたLのハイパーリンク:<A HREF =「のhttp:= V1&P2 = P1 V2「> ???
形式で与えられリットルパラメータ:...
リットルのAjax一時的に導入
POST:
パラメータ指定されたL形:...
L Ajaxが一時的に導入されまし
たパラメータの3つの値を受信した
単一のパラメータが無線、ドロップダウンボックスの単一の値、テキスト、隠しフィールド含む
POSTまたはGETかどうかを、パラメータを得るために同じ方法でありますA。
ストリングS1 = request.getParameter( "P1" ); // 戻り値V1
ストリングS2 = request.getParameter( "P2"); //戻り値V2
<form action="ParamServlet" method="post">
<input type="text" name="p1"/><br/>
<input type="text" name="p2"/><br/>
<input type="submit" value="提交"/><br/>
</form>
<a href="ParamServlet?p1=v1&p2=v2">Param</a>
String s1 = request.getParameter("p1");
String s2 = request.getParameter("p2");
response.getWriter().print("p1 = " + s1 + "<br/>");
response.getWriter().print("p2 = " + s2 + "<br/>");
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
String value = request.getParameter(name);
System.out.println(name + " = " + value);
}
4マルチパラメータ受信
マルチバリューパラメータは、主に複数の選択肢のチェックボックスである
。例えば、あなたが趣味で、ユーザーの塗りつぶしを許可すれば、登録フォームで、それはより愛するかもしれません。これは、パラメータ値の趣味の複数に相当します。
<form action="ParamServlet" method="post">
上网:<input type="checkbox" name="hobby" value="netplay" /><br/>
踢球:<input type="checkbox" name="hobby" value="football" /><br/>
看书:<input type="checkbox" name="hobby" value="read" /><br/>
编程:<input type="checkbox" name="hobby" value="programme" /><br/>
<input type="submit" value="提交"/><br/>
</form>
// 获取所有名为hoby的参数值
String[] hobbies = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
request.getParameterMap()メソッドは、すべての対応するパラメータマップのタイプを返します。内のパラメータ名に対応するキーの地図、地図の値に対応するパラメータ値。
<form action="ParamServlet" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
性别:<input type="text" name="sex"/><br/>
<input type="submit" value="提交"/><br/>
</form>
Map<String,String[]> map = request.getParameterMap();
Set<String> keys = map.keySet();
for(String key : keys) {
String[] value = map.get(key);
System.out.println(key + " = " + value[0]);
}
sex = male
name = zhangSan
age = 23
単一値のパラメータを使用することもできるrequest.getParameterValuesパラメータの値は、実際には、単一の時間である場合(String)を使用してもよい取得request.getParameterValues(String)メソッドは、パラメータの値を取得し、このパラメータの戻り値に文字列[] 、我々は配列要素の添字0を得るために行く必要があります。
;文字列名= request.getParameterValues(「名前 」)[0]は
、中国の5.Request治療を得たが文字化け
リクエストはリクエストパラメータを受信したときの方法の2種類を取得し、投稿するときが、中国の符号化処理は同じではありません、我々はプロジェクトを行っています全体ステーションが統一コーディングを持っていますが、最も一般的なのは、プロジェクト内のUTF-8、UTF-8エンコーディングです
:私たちは、POSTリクエストを使用
POSTが問題をコーディング取り扱いを!
我々は、要求情報を知っている、唯一のPOST本体、コーディングいわゆるPOSTリクエストボディパラメータがそのコードですがあります。
デフォルトでは、()のgetParameterを使用する場合はISO-8859-1エンコーディングを使用して、POSTリクエストのパラメータを取得します。
Request.getParameter名=文字列( "名前");
名前=新しい新しいString(name.getBytes( "ISO-8859-1")、 "UTF-8");
System.out.printlnは(名前);
私たちが知っているので、パラメータは、エラーコードを取得しますが、されているので、文字化け二つの理由:もともとはUTF-8エンコーディングを使用して、ISO-8859-1エンコーディングを使用することも間違っています。したがって、我々はそれほど問題はないことが、得られた正しいUTF-8でエンコードされた文字列を使用し、次に、バイトの配列を得るために、ISO-8859-1を使用することができます。
setCharacterEncodng()の要求はあなたを使用するために、むしろISO解釈バイト文字列を使用しますが、しないように、当然のことながら、このすべては、のgetParameter()setCharacterEncodngは、()メソッドは、符号化方式を設定する要求の前に呼び出され呼び出さなければなりません、エンコーディングを設定することができます解釈するのエンコード与えられました。
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println(name);
各要求のために、ちょうどのsetCharacterEncodng要求()を呼び出し、一度、すべてのgetParameter()のパラメータを解釈するためにこのコードを使用します。しかし注意し、唯一のリクエストボディ、すなわちPOSTパラメータに対して有効。
使用していないときに我々は要求を取得し
、もはや作品をポストの上記処理を
第一の実施例を:
私たちが使用することができます処理するための文字列トランスコードの
文字列request.getParameter S =(「S」);
S =新新しいStringを(S .getBytes(「ISO-8859-1」)、「UTF-8」);
Ø第二の方法:
GETリクエストパラメータは体ではなく、URLインチ 要求は、GETの符号化パラメータを設定するために使用setCharacterEncodng()することができません。
GET処理パラメータは、2つの方法で符号化することができる:最初は、要素はURIEncodingの属性のセットがUTF-8です。それのconf \ server.xmlの要素のプロパティをはURIEncoding。
このプロパティは、UTF-8エンコーディングで直接GETパラメータには、設定された後。しかし、要素は、それは、Tomcatの全体に対して有効です!
行うための第3の符号化のJavaScript URLハイパーリンク
この問題に対処するためには、URLエンコードを行うにはJavaScriptを使用してGETリクエストパラメータで、URLエンコードの内容は、もはや中国ではありません、IE6は失うバイトしませんので、 A。
FF
http:// localhost /をエンコード/ EncodingServlet名=大家好
URLエンコーディングを使用した後、こんにちは、誰もが%E5%A4%A7%E5となっています %AE%B6%E5%A5%BD。だから、バイトを失うことはありません。
ヴァルrequest.getParameter =文字列( "NameA");
ヴァルURLDecoder.decode =(ヴァル、 "UTF-8");
のSystem.out.println(ヴァル)。
6. HttpServletRequestのリクエスト転送(サーバー側が前方にジャンプ)
その後、通常いくつかの背景のビジネスロジックを実行するときに我々は、サーブレットを訪問するときので、転送要求は、サーブレットで使用することがたくさんある、とジャンプした後、結果のページにジャンプこのプロセスは、ページが、我々は、ユーザー名とパスワードを入力し、我々がログオンしていない例えば、要求を転送して、ログインサーブレットが責任に提出されて生じることがあり、サーブレットは、我々が正しければ、私たちのためにユーザー名とパスワードをチェックしますか、エラーがログイン失敗ページにジャンプならば、我々は、ページのログインプロンプトにジャンプします。
リクエストの要求の転送は、ページジャンプものの、サーバー側でジャンプ呼び出すことができますが、我々は、アドレスバーには変更はありませんでしょう。
前方request.getRequestDispatcher( "/ success.html") (
我々はできるだけでなく、我々はその動的ページに戻りたいので、すべてのHTMLは(フォローアップに適していない、主にフォローアップのページに私たちは、多くの場合、ページにジャンプし、ダイナミックでは、JSP、サーブレットの後に生成されたJSPを()プロンプトが表示される(静的ページにジャンプ説明))。サーブレットにジャンプすることがあり(現在の要求が完了する前に)、我々はプロパティ値へのアクセス権を持っているの分野では、要求に現在のフィールドに値を設定することができます。
request.setAttribute( "名前"、 "任意明るい");
request.getAttribute( "名");
スコープ7.requestフィールド
我々はそれがまた、ドメインであるServletContextオブジェクトの概念を述べた話では、その範囲が非常に大きいが、生成されたサーバーの開始とサーブレットのすべてに指定された公共事業の対象となり、その要求は、ドメイン・オブジェクトである、サーバ破棄を停止し、それは、各スレッドの要求の範囲内で要求に応じてその範囲が新規のHttpServletRequestとHttpServletResponseのオブジェクトを生成する、小規模マルチの役割であります