はじめに:
自宅のオンラインクラスで夢中になっている╰(‵□ ')╯、クラスに教科書がない、不快すぎる、この期間の学習内容しかブログに記録できない、難しすぎる。 ..
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メソッドを使用する場合:
- 静的ページまたはグラフィックファイルを要求するときは、ファイル名のみを送信する必要があるため、GETメソッドを使用します。
- ビッグデータを送信するときは、POSTメソッドを使用してください。
- ファイルをアップロードするときは、POSTメソッドを使用してください。
- ユーザー名、パスワード、またはその他の機密情報を送信する場合は、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に保存できます。
特徴:
- Webアプリケーションが閉じられたときにのみ破棄されます
- さまざまなWebアプリケーション、ServletContextは独立して存在します
- 各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とセッションを記録しましょう。