JavaWebサーブレットの要求と応答

はじめに:
        自宅のオンラインクラスで夢中になっている╰(‵□ ')╯、クラスに教科書がない、不快すぎる、この期間の学習内容しかブログに記録できない、難しすぎる。 ..


1.サーブレットの概要:
  • WEBサーバー上で実行される小さなJAVAプログラム、つまりJavaクラス。
  • ユーザーがアクセスするために使用される動的リソース。
  • 一般に、サーブレットインターフェイスを実装するJavaクラスは、まとめてサーブレットと呼ばれます。
  • 準備されたサーブレットは、外部アクセス用にweb.xmlファイルで構成する必要があります。
第二に、サーブレットの役割:
  • クライアントからのHTTP要求を処理し、応答を返すために使用されます
  • リクエストdoGet()doPost()その他のメソッドを処理できます。
3つ、サーブレットシステム構造:
  • サーブレットはサーブレットコンテナによって提供されます
  • サーブレットコンテナとは、サーブレット機能を提供するサーバー(ここではTomcat)を指します。
  • サーブレットコンテナは、サーブレットをサーバーに動的にロードします。
    ここに画像の説明を挿入
  • サーブレットリクエストは最初にHTTPサーバーによって受信され、HTTPサーバーは静的HTMLページの解析のみを担当します。
  • サーブレット要求はサーブレットコンテナに転送され、サーブレットコンテナはweb.xmlファイルのマッピング関係に従って対応するサーブレットを呼び出します。
  • サーブレットは、処理された結果をサーブレットコンテナに返し、HTTPサーバーを介してクライアントに応答を送信します。
サーブレットを作成する4、3つの方法:
  • サーブレットインターフェースを直接実装する
  • GenericServletクラスを継承します
  • HttpServletクラスを継承します(一般的に使用されます)

関係は次のとおりです。
ここに画像の説明を挿入

サーブレットライフサイクルの5、3つの方法:
  • init():このサーブレットへの最初のアクセスでは、サーブレットオブジェクトが作成され、初期化メソッドが実行されます。一度だけ実行してください。
init(ServletConfig config):
其中的config就是ServletConfig接口对象。  
  • service():クライアントの要求に応答します。サーブレットにアクセスするたびに実行されます
service(ServletRequest request, 
ServletResponse response) 
  • destroy():サーバーが正常にシャットダウンされた後、このメソッドは1回だけ実行されます。
public void destroy() 
6つ目は、web.xmlファイルを構成することです。

準備されたサーブレットは、外部アクセス用にweb.xmlファイルで構成する必要があります。サーブレットコンテナは、web.xmlファイルのマッピング関係に従って対応するサーブレットを呼び出します。

例:

<web-app>
<servlet>
    <servlet-name> FirstServlet </servlet-name>  //为了方便使用Servlet,取的别名
    <servlet-class> pdsu.edu.cn.hm.HelloWorld </servlet-class>  //完整的包名+类名
</servlet>

<!-- 配置如何访问这个servlet -->
<servlet-mapping>
    <servlet-name> FirstServlet </servlet-name>  //和上面那个起的别名必须相同!
    <url-pattern> /HelloServlet </url-pattern>  //访问Servlet的URL
</servlet-mapping>
</web-app>

上で構成されたweb.xmlによると、プロジェクトのアクセスパスは次のとおりです。
ここに画像の説明を挿入

7つ目は、クラスを継承してサーブレットを作成することです。

HttpServletクラスを継承するようにHelloWorldクラスを定義します。

1.実装doGetまたはdoPostメソッド(またはその両方)。

2.これら2つのメソッドのメソッドパラメータは次のとおりです。

  • HttpServletRequest:フォームのデータ、HTTPリクエストのヘッダー情報などを取得するために使用されます。
  • HttpServletResponse:HTTPステータスコード、HTTP応答ヘッダー情報を設定し、クライアントにデータを送信するために使用される出力ストリームオブジェクトを取得するために使用されます。

3.ほとんどの場合、doPostメソッドdoGet呼び出さます。その逆も同様です。

8.サーブレットの要求と応答:

1. Get送信とPost送信の違い
ここに画像の説明を挿入

2. GET / POSTメソッドを使用する場合

  1. 静的ページまたはグラフィックファイルを要求するときは、ファイル名のみを送信する必要があるため、GETメソッドを使用します。
  2. ビッグデータを送信するときは、POSTメソッドを使用してください。
  3. ファイルをアップロードするときは、POSTメソッドを使用してください。
  4. ユーザー名、パスワード、またはその他の機密情報を送信する場合は、POSTメソッドを使用してください。

3.応答ステータスヘッダー

setHeader() 设置响应头,String类型的值
addHeader() 加响应头
setIntHeader()设置响应头,int类型的值
setDateHeader()设置响应头,date类型的值
containsHeader()是否包含指定的响应头
addCookie()向set-cookie报头插入一个cookie

4.文字化けした文字を処理する方法を設定します

setContentType() 设置响应的类型和编码方式,比如response.setContentType("text/html;charset=utf-8");
setCharacterEncoding() 设置响应字符编码,比如response.setCharacterEncoding("utf-8"); 

5.応答メッセージの本文

getWriter()メソッドは、テキスト出力ストリームを取得するために使用されます

PrintWriter out = response.getWriter();
调用print()println()write()方法

getOutputStream()メソッドは、バイナリ出力ストリームを取得するために使用されます

ServletOutputStream out = response.getOutputStream();
OutputStream比使用PrinterWriter发送文本效率更高,可以动态地创建任何形式的数字内容

例:

public void doGet( HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
    
    
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		....
	}
	public void doPost( HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
    
    
		doGet(request, response);
	}

6. HttpServletRequestオブジェクトメソッド

リクエストラインを取得:

getMethod():获取HTTP的请求方法,GET、POST等
getRequestURI():获取请求的URI,/项目名/servlet路径
getRequestURL():获取请求的URL,包含协议名、服务器名或IP、端口号和请求资源但不包括查询字符串参数,如http://127.0.0.1:8080/lovo/index.html
getQueryString():获取请求URL后面的查询字符串,如name=zhangsan
getProtocol():获取请求的协议名和版本号,如HTTP/1.1
getContextPath():获取项目名称
getServletPath():获取Servlet的映射路径,如Analyz

リクエストヘッダーを取得します。

getHeader(name):返回指定的请求头的值 
getHeaders(name):返回一个Enumeration(枚举)包含请求头中的所有值 
getHeaderNames():特定请求中接收到的所有请求头的名称 
getIntHeader(name):获取特定请求头的值,并将其转化为int类型
getDateHeader(name):获取特定请求头的值,并将其转化为Date类型

7.フォームデータを取得します

  • getParameter(parameterName):フォームパラメータの値を取得します。パラメータ名では大文字と小文字が区別され、HTMLフォームに表示されるパラメータ名と一致します。同じメソッドをGETリクエストとPOSTリクエストの両方に使用できます。
  • getParameterValues(parameterName):同じパラメータ名の複数のパラメータ値を取得し、文字列配列オブジェクトを返します
  • getParameterNames():リクエスト内のすべてのフォームパラメータ名のリストを列挙型で返します

例:

String name=request.getParameter("username");
String sex=request.getParameter("sex");
String email=request.getParameter("email");

8.リダイレクトを要求します:

  • Webサーバーは、特定の制限により、クライアントの要求を受信すると、現在の要求URLが指すWebリソースにアクセスできません。新しいリソースパスを指定して、クライアントが要求を再送信できるようにすることができます。これが要求のリダイレクトです。

リダイレクトを実現する2つの方法:

1.ステータスコード302+場所で使用します。

response.setStatus(302);
response.setHeader(“location”,/项目名/页面名或servlet名”)

2.URIリダイレクトを直接指定します。

response.sendRedirect("/lovobook/bar.html");

9.ページを自動的に更新するように設定します

1.タイミングジャンプ:あるページから別のページに定期的にジャンプします。たとえば、登録ページはログインページにジャンプします。

response.setHeader("Refresh", "5;URL=http://www.baidu.com");

2.定期的な更新:ページアドレスは変更されず、オンラインチケット購入などのページデータが変更されます

response.setHeader("Refresh", "3");
response.getWriter().println(new java.util.Date());

10.応答ステータスヘッダー
ここに画像の説明を挿入
例:
Excelシートの出力

public class RefreshServlet extends HttpServlet
{
    
      public void doGet(HttpServletRequest request,  HttpServletResponse  response) throws ServletException, IOException
    {
    
    
        response.setCharacterEncoding("GBK");
        //设置响应类型(Excel)
      response.setContentType("application/vnd.ms-excel");
      PrintWriter out = response.getWriter();
      out.println("姓名\t 年龄\t 性别");
      out.println(“张小三\t 20\t 男");
      out.println(“李小斯\t 21\t 女");
    }
}

結果はExcelファイルになります
ここに画像の説明を挿入

9、ServletContextオブジェクト:

役割:すべてのユーザーがアクセスできる共有データは、ServletContextに保存できます。
特徴:

  1. Webアプリケーションが閉じられたときにのみ破棄されます
  2. さまざまなWebアプリケーション、ServletContextは独立して存在します
  3. 各Webアプリケーションには、ServletContextオブジェクトが1つだけあります

オブジェクトを取得しますgetServletContext()

  • 同じWebアプリケーション内の異なるサーブレットがgetServletContextメソッドを呼び出して、同じServletContextオブジェクトインスタンスを取得します。このインスタンスを
    ロックして、Webアプリケーションが主要部分にアクセスできないようにすることができます。

ServletContextの一般的なメソッド

初期パラメータにアクセスする方法:

getInitParameter(String name), getInitParameterNames()

Webアプリケーションのプロパティを読み取る方法:

getAttribute(String name), getAttributeNames( )

Webアプリケーションのプロパティを操作する方法:

setAttribute(String, Object), removeAttribute(String)

リソースフォワーダーを入手します。

 RequestDispatcher getRequestDispatcher(String path)
10、RequestDispatcherオブジェクト:

機能:クライアントから送信された要求をサーバーの他のリソースに送信します。
リソースタイプは、静的リソース(HTMLファイルなど)または動的リソース(サーブレットまたはJSPファイルなど)にすることができます。

例:
リソースxにリクエストを送信するには

//必须使用相对于根”/”的路径
getServletContext().getRequestDispatcher("/x")
//可以为当前或根的相对路径
request.getRequestDispatcher("x")

RequestDispatcherのメソッド

現在のサーブレットから他のリソースにリクエストを転送します。

void forward(ServletRequest request,ServletResponse response) 

リソースのコンテンツを応答オブジェクトに含めます。

void include(ServletRequest request,ServletResponse response) 

例:index.htmlに転送

getServletContext().getRequestDispatcher("/index.html").forward(request, response);

では、今回はここで停止し、次のセッション用に別のCookieとセッションを記録しましょう。

おすすめ

転載: blog.csdn.net/qq_43531669/article/details/105569412