Java Web入門:HttpResonseとHttpRequest詳細
HttpResonse解説
HttpServlet Responseの概要:
Servletを作成するときは、Service()方法、またはdoGet()/doPost()をカバーします。これらの方法はいずれも2つのパラメータがあります。一つは、要求を表すrequestとレスポンスponseを表します。service方法におけるレスポンスのタイプはServlets Resonseであり、doGet/doPostメソッドのレスポンスのタイプはHttpServletResonseであり、HttpServletResonseはServlet Resonseのサブインターフェースであり、機能と方法はより強力である。
Resonse運転プロセス
応答ヘッダがたくさんあります。ここではよく使うものだけを紹介します。
ブラウザでは、F 12クローズドで応答ヘッダ、要求ヘッダ、特定のものを確認することができます。
応答行を設定
応答の状態コードを設定します。
応答ヘッダを設定
ジャンプページを更新
一つの小さなデモが更新ページの累積を実現しました。
リダイレクトredirect
ファイルのダウンロード
パスリソースを取得
具体的なコード
HttpServletRequestの概要
Servletを作成するときは、Service()方法、またはdoGet()/doPost()をカバーします。これらの方法はいずれも2つのパラメータがあります。一つは、要求を表すrequestとレスポンスponseを表します。service()メソッドには、要求の仕方に応じてdoget()とdopost()を呼び出すと書かれています。
service法におけるrequestのタイプはServletRequestであり、doGet/doPost法のrequestタイプはHttpServletRequestであり、HttpServletRequestはServletRequestのサブインターフェースであり、機能と方法はより強力である。
Request運行フロー
要求されたパラメータを取得します。
複数のパラメータの値を取得します。
requestオブジェクトもデータを格納する領域オブジェクトであるので、以下のような方法もある。
作成:webアプリケーションを起動するときに作成します。
廃棄:webアプリケーションを閉じるときに廃棄する
ドメインの役割範囲:ウェブアプリケーション全体の起動周期
requestスコープ:
作成:アクセス時にrequestを作成します。
廃棄:応答完了request廃棄
ドメインの作用範囲:一回の要求において
締め括りをつける
この文章はここまでです。あなたに助けを与えたいです。私たちのもっと多い内容に注目してください。
HttpServlet Responseの概要:
Servletを作成するときは、Service()方法、またはdoGet()/doPost()をカバーします。これらの方法はいずれも2つのパラメータがあります。一つは、要求を表すrequestとレスポンスponseを表します。service方法におけるレスポンスのタイプはServlets Resonseであり、doGet/doPostメソッドのレスポンスのタイプはHttpServletResonseであり、HttpServletResonseはServlet Resonseのサブインターフェースであり、機能と方法はより強力である。
Resonse運転プロセス
応答ヘッダがたくさんあります。ここではよく使うものだけを紹介します。
ブラウザでは、F 12クローズドで応答ヘッダ、要求ヘッダ、特定のものを確認することができます。
応答行を設定
応答の状態コードを設定します。
/**
* @Author: crush
* @Date: 2021-05-09 19:35
* version 1.0
*/
@WebServlet("/test3")
public class HttpResponseTest3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(" , , ");
resp.setStatus(404);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
テスト応答ヘッダを設定
ジャンプページを更新
/**
* @Author: crush
* @Date: 2021-05-09 19:35
* version 1.0
*/
@WebServlet("/test4")
public class HttpResponseTest4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1
System.out.println(" 1 ");
resp.setHeader("Refresh", "1");
// 3
// resp.setHeader("Refresh","3;URL=hello.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
テスト一つの小さなデモが更新ページの累積を実現しました。
/**
* response
* @author Adimi
*/
@WebServlet("/test4")
public class ResponseTest4 extends HttpServlet {
private static Integer id=1;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Refresh","1");
PrintWriter writer = response.getWriter();
id++;
writer.print("id==>"+id);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
文字コードを設定して、中国語の文字化け問題を解決します。
/**
* @Author: crush
* @Date: 2021-05-09 19:35
* version 1.0
*/
@WebServlet("/test1")
public class HttpResponseTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
//
// resp.setCharacterEncoding("UTF-8");
//
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.print(" , !!!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
テストリダイレクトredirect
/**
*
* @Author: crush
* @Date: 2021-05-09 19:35
* version 1.0
*/
@WebServlet("/test5")
public class HttpResponseTest5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("hello.jsp");
// resp.setHeader("location","www.baidu.com");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
リクェスト転送
/**
*
* @Author: crush
* @Date: 2021-05-09 19:35
* version 1.0
*/
@WebServlet("/test5")
public class HttpResponseTest5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// resp.sendRedirect("hello.jsp");
req.getRequestDispatcher("hello.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
リダイレクトと転送の違いファイルのダウンロード
パスリソースを取得
String path=this.getServletContext().getRealPath("WEB-INF\\classes\\8.jpg");
リソースを読み込み
FileInputStream fileInputStream=new FileInputStream(path);
ファイル名を取得して、パスをコンピュータに保存する形式は\\です。
String fileName=path.substring(path.lastIndexOf("\\")+1);
メッセージヘッダを設定してブラウザに教えてください。この画像設定コードをダウンロードしたいです。
resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
読んだ内容をブラウザに返す
int len=0;
byte[] bytes=new byte[1024];
// ServletOutputStream
ServletOutputStream servletOutputStream=resp.getOutputStream();
while((len=fileInputStream.read(bytes))>0) {
servletOutputStream.write(bytes,0,len);
}
リソースを閉じる
servletOutputStream.close();
fileInputStream.close();
注:8.jpgは私のレスキューフォルダの下に置いてありますが、ここで書くべきのは8.jpgをコンパイルした場所です。具体的なコード
/**
* @Author: crush
* @Date: 2021-05-09 19:40
* version 1.0
*/
@WebServlet("/down")
public class ResponseDownFile extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
String path=this.getServletContext().getRealPath("WEB-INF\\classes\\8.jpg");
//
FileInputStream fileInputStream=new FileInputStream(path);
// , \\
String fileName=path.substring(path.lastIndexOf("\\")+1);
// , 1.png
//
//
resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
//
int len=0;
byte[] bytes=new byte[1024];
ServletOutputStream servletOutputStream=resp.getOutputStream();
while((len=fileInputStream.read(bytes))>0) {
servletOutputStream.write(bytes,0,len);
}
//
servletOutputStream.close();
fileInputStream.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
HttpRequestの解説HttpServletRequestの概要
Servletを作成するときは、Service()方法、またはdoGet()/doPost()をカバーします。これらの方法はいずれも2つのパラメータがあります。一つは、要求を表すrequestとレスポンスponseを表します。service()メソッドには、要求の仕方に応じてdoget()とdopost()を呼び出すと書かれています。
service法におけるrequestのタイプはServletRequestであり、doGet/doPost法のrequestタイプはHttpServletRequestであり、HttpServletRequestはServletRequestのサブインターフェースであり、機能と方法はより強力である。
Request運行フロー
要求されたパラメータを取得します。
/**
* @Author: crush
* @Date: 2021-05-11 16:52
* version 1.0
*/
@WebServlet("/request1")
public class RequestTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
String username = req.getParameter("username");
String password = req.getParameter("password");
PrintWriter writer = resp.getWriter();
writer.print("<h1>"+username+":"+password+"</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
複数のパラメータの値を取得します。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
req.setCharacterEncoding("utf-8");
Enumeration<String> names = req.getParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
String[] values = req.getParameterValues(name);
System.out.println(name+":"+ Arrays.toString(values));
}
}
要求行の情報を取得する
/**
* @Author: crush
* @Date: 2021-05-11 16:52
* version 1.0
*/
@WebServlet("/request3")
public class RequestTest3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// url
StringBuffer requestURL = req.getRequestURL();
System.out.println(" URL===>"+requestURL);
// Servlet
String path = req.getServletPath();
System.out.println(" Servlet ===>"+path);
// HTTP , GET,POST PUT
String method = req.getMethod();
System.out.println(" HTTP ==>"+method);
// Internet (IP)
String remoteAddr = req.getRemoteAddr();
System.out.println("remoteAddr==>"+remoteAddr);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
requestは転送を実現します
/**
* @Author: crush
* @Date: 2021-05-11 16:52
* version 1.0
*/
@WebServlet("/request2")
public class RequestTest2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// request2 request4
req.getRequestDispatcher("/request4").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
requestはドメインオブジェクトです。requestオブジェクトもデータを格納する領域オブジェクトであるので、以下のような方法もある。
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
Servlet Contectのスコープ:作成:webアプリケーションを起動するときに作成します。
廃棄:webアプリケーションを閉じるときに廃棄する
ドメインの役割範囲:ウェブアプリケーション全体の起動周期
requestスコープ:
作成:アクセス時にrequestを作成します。
廃棄:応答完了request廃棄
ドメインの作用範囲:一回の要求において
締め括りをつける
この文章はここまでです。あなたに助けを与えたいです。私たちのもっと多い内容に注目してください。