JavaサーブレットでのRequest、Responseの説明
69030 ワード
JavaサーブレットでのRequest、Responseの説明
一、request機能:
1.要求メッセージデータを取得する:
要求ラインデータを取得するには、次の手順に従います.
GET/day16/demo1?name=zhangsan HTTP/1.1取得要求方式:GET
String getMethod()
仮想ディレクトリ取得:/day 16
String getContextPath()
サーブレットパス取得:/demo 1
String getServletPath()
get方式要求パラメータ取得:name=zhangsan
String getQueryString()
取得要求URI:/day 16/demo 1
String getRequestURI():/day16/demo1
String getRequestURL()::http://localhost/day16/demo1
URL:統一リソースロケータ;
URI:統一資源識別子;
取得プロトコルおよびバージョン:Http/1.1
String getProtocol()
クライアントのIPアドレスを取得する:
String getRemoteAddr()
コードは以下の通り: 要求ヘッダデータの取得:要求ヘッダの名前で要求ヘッダの値を取得する: String getHeader(String name) すべてのリクエストヘッダ名を取得する:
Enumeration getHeaderNames()
コード実装: 要求ボリュームデータを取得するには、次の手順に従います.要求体:POST要求方式のみで、要求体にPOST要求の要求パラメータが封入されている. 手順: ストリームオブジェクトの取得; BufferedReader getReader():文字入力ストリームを取得し、文字データのみを操作する. ServiletInputStream getInputStream():バイト入力ストリームを取得し、すべてのタイプのデータを操作できる;
ストリームオブジェクトからデータを取得する.
コード: 2.その他の機能:
取得要求パラメータ共通方式:パラメータ名によるパラメータ値の取得:
String getParameter(String name)
例:userName=zs&password=123
パラメータ名からパラメータ値を取得する配列:
String[] getParameterValues(String name)
例えば、body=xxx&body=yyy
全ての要求パラメータ名を取得する:
Enumeration getParameterNames()
全てのパラメータのmapセットを取得する:
Map getParameterMap()
コード:
中国語の文字化けし問題:get方式:tomcat 8バージョンではget方式の文字化けし問題が解決した. post方式:文字化けし; 解決:パラメータを取得する前に、requestの符号化request.setCharacterEncoding(「utf-8」)を設定する.
リクエスト転送:サーバ内部のリソースジャンプ方式;手順: リクエストリピータオブジェクトをrequestオブジェクトで取得する:RequestDispatcher getRequestDispatcher(String path); RequestDispatcherオブジェクトによる転送:forward(サーブレットRequest request,サーブレットResponse response);
特徴: ブラウザのアドレスバーの経路は変化しない; 現在のサーバ内部リソースへの転送のみ; 転送は1回の要求である.
コード:
共有データ:ドメインオブジェクト:有効範囲のオブジェクトで、範囲内でデータを共有することができる; requestドメイン:1回の要求の範囲を表し、転送を要求する複数のリソースでデータを共有するために一般的に用いられる. 方法: void setAttribute(String name,Object obj):データ格納; Object getAttitude(String name):キーによる値取得; void removeAttribute(String name):キー値ペアをキーで除去する;
コード: サーブレットContextを取得するには、次の手順に従います.
概念:Webアプリケーション全体を代表し、プログラムのコンテナ(サーバ)と通信することができる.
取得:requestオブジェクトによる取得;
request.getServletContext();
HttpServeretで取得;
this.getServletContext();
機能:MIMEタイプ取得; MIMEタイプ:インターネット通信中に定義されたファイルデータ型: フォーマット:
大タイプ/小タイプtext/html image/jpg
取得:String getMimeType(String file); ドメインオブジェクト:共有データ; setAttribute(String name, Object value); getAttrbute(String name); removeAttribute(String name);
サーブレットContextオブジェクトリソース、すべてのユーザーが要求できるデータ;
ファイルのリアルパスを取得する.
二、Response機能:
1.機能:
応答情報を設定します.フォーマット:HTTP/1.1 200 ok ステータスコード設定:setStatus(int sc) 応答ヘッダの設定:setHeader(String name,String value)
応答体の設定:出力ストリームの取得:
文字出力ストリーム:PrintWriter getWriter()
バイト出力ストリーム:サーブレットOutput Stream()
出力ストリームを使用してクライアントブラウザにデータを出力する.
導入事例:リダイレクトのケース: リダイレクト特徴(redirect): アドレスバーが変化した; リダイレクトは他のサイト(サーバ)リソースにアクセス可能; リダイレクトは2回のリクエストである.
転送特徴(forward): アドレスバーは変化しない. 転送は現在のサーバ下のリソースにしかアクセスできない. 転送は1回の要求である.(requestオブジェクトでデータ共有可能)
2.簡単なケース:
サーバは、文字/バイトデータをブラウザに出力します.
手順:文字/バイト出力ストリームを取得する. 出力データ;
注意:文字化けし問題: PrintWirter pw = response.getWriter(); 取得されたストリームのデフォルト符号化はISO-8859-1である. ストリームのデフォルト符号化を設定する. ブラウザ応答体に使用する符号化を伝える.
単純な形式で、エンコーディングを設定します.
response.setContentType(“text/html; charset=utf-8”)
コード:
一、request機能:
1.要求メッセージデータを取得する:
要求ラインデータを取得するには、次の手順に従います.
GET/day16/demo1?name=zhangsan HTTP/1.1
String getMethod()
String getContextPath()
String getServletPath()
String getQueryString()
String getRequestURI():/day16/demo1
String getRequestURL()::http://localhost/day16/demo1
URL:統一リソースロケータ;
URI:統一資源識別子;
String getProtocol()
String getRemoteAddr()
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo1")
// HttpServlet , GenericServlet , GenericServlet , GenericServlet Servlet
public class ServletDemo3 extends HttpServlet {
/*
HttpServlet
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(" Get ");
// 1.
String method = req.getMethod();
System.out.println(method); // :GET
//2.
String contextPath = req.getContextPath();
System.out.println(contextPath); // : /day_16
// 3. Servlet
String servletPath = req.getServletPath();
System.out.println(servletPath); // :/demo1
// 4. get
String queryString = req.getQueryString();
System.out.println(queryString); // : name=zhangsan
// 5. URI\URL
String requestURI = req.getRequestURI();
System.out.println(requestURI); // :/day_16/demo1
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL); // :http://localhost:8080/day_16/demo1
// 6.
String protocol = req.getProtocol();
System.out.println(protocol); // :HTTP/1.1
// 7. IP
String remoteAddr = req.getRemoteAddr();
System.out.println(remoteAddr); // :0:0:0:0:0:0:0:1
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(" Post ");
}
}
Enumeration getHeaderNames()
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
@WebServlet("/demo05")
public class ServletDemo05 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
// 1.
Enumeration<String> headerNames = req.getHeaderNames();
// 2.
while (headerNames.hasMoreElements()){
String name = headerNames.nextElement();
// 3.
String header = req.getHeader(name);
System.out.println(header);
}
}
}
//
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
@WebServlet("/demo06")
public class ServletDemo06 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// ....
// 1.
BufferedReader reader = req.getReader();
String line = null;
// 2.
while ((line = reader.readLine())!=null){
System.out.println(line);
}
}
}
取得要求パラメータ共通方式:
get post
;String getParameter(String name)
例:userName=zs&password=123
String[] getParameterValues(String name)
例えば、body=xxx&body=yyy
Enumeration getParameterNames()
Map getParameterMap()
コード:
package cn.web.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
@WebServlet("/demo07")
public class ServletDemo07 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get");
// 1.
String userName = req.getParameter("userName");
System.out.println(userName);
System.out.println("---------------------------");
// 2.
String[] bodies = req.getParameterValues("body");
for (String body : bodies) {
System.out.println(body);
}
System.out.println("---------------------------");
// 3.
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()){
String s = parameterNames.nextElement();
String parameter = req.getParameter(s);
System.out.println(parameter);
}
System.out.println("---------------------------");
// 4. map
Map<String, String[]> parameterMap = req.getParameterMap();
Set<String> keySet = parameterMap.keySet();
for (String s : keySet) {
//
String[] strings = parameterMap.get(s);
System.out.println(s);
for (String string : strings) {
System.out.println(string);
}
}
System.out.println("---------------------------");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post");
// post get
this.doGet(req, resp);
}
}
中国語の文字化けし問題:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post");
//
req.setCharacterEncoding("utf-8");
// post get
this.doGet(req, resp);
}
リクエスト転送:サーバ内部のリソースジャンプ方式;
コード:
// demo08 , /demo08 /demo09
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo08")
public class ServletDemo08 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo08");
// /demo09
req.getRequestDispatcher("/demo09").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
// demo09
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo09")
public class ServletDemo09 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(" ___________demo09");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
// :
demo08
___________demo09
共有データ:
// demo08
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo08");
// request
req.setAttribute("msg", "hello!");
// /demo09
req.getRequestDispatcher("/demo09").forward(req, resp);
}
// demo09
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(" ___________demo09");
//
Object msg = req.getAttribute("msg");
System.out.println(msg);
}
demo08
___________demo09
hello!
概念:Webアプリケーション全体を代表し、プログラムのコンテナ(サーバ)と通信することができる.
取得:
request.getServletContext();
this.getServletContext();
// ServletContext
package cn.web.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/servletContext")
public class ServletContextDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ServletContext
// 1. request
ServletContext context1 = request.getServletContext();
// 2. HttpServlet
ServletContext context2 = this.getServletContext();
// context
System.out.println(context1.equals(context2)); // :true ServletContext
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
機能:
大タイプ/小タイプtext/html image/jpg
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. HttpServlet
ServletContext context2 = this.getServletContext();
// 2.
String fileName = "a.jpg";
// 3. MIME
String mimeType = context2.getMimeType(fileName);
System.out.println(mimeType); // : image/jpeg
}
サーブレットContextオブジェクトリソース、すべてのユーザーが要求できるデータ;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. HttpServlet
ServletContext context2 = this.getServletContext();
// 2.
String realPath = context2.getRealPath("/a.text");
System.out.println(realPath);
}
二、Response機能:
1.機能:
応答情報を設定します.
応答体の設定:
文字出力ストリーム:PrintWriter getWriter()
バイト出力ストリーム:サーブレットOutput Stream()
導入事例:
// demo demo2 demo
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
*/
@WebServlet("/responseDemo")
public class ResponseDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo ............");
/*
/responseDemo , /responseDemo02
*/
// 1. , 302
// response.setStatus(302);
// 2. ,
// response.setHeader("location", "/day_16/responseDemo02");
//
response.sendRedirect("/day_16/responseDemo02");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
**リダイレクトの最も簡単な書き方:**response.sendRedirect("/day_16/responseDemo 02");// dam02
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/responseDemo02")
public class ResponseDemo02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo02 ..................");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
// : demo demo2
demo ............
demo02 ..................
2.簡単なケース:
サーバは、文字/バイトデータをブラウザに出力します.
手順:
注意:
単純な形式で、エンコーディングを設定します.
response.setContentType(“text/html; charset=utf-8”)
コード:
package cn.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/responseServlet")
public class ResponseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// , : ISO-8859-1 :GBK
// response.setCharacterEncoding("utf-8");
// , ,
// response.setHeader("content-type", "text/html;charset=utf-8");
//
response.setContentType("text/html;charset=utf-8");
// 1.
PrintWriter writer = response.getWriter();
// 2.
writer.write(" ~ hello");
// 1.
ServletOutputStream outputStream = response.getOutputStream();
// 2.
outputStream.write(" ".getBytes("utf-8"));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}