サーブレット(4)

1.なぜセッション追跡が必要なのですか?
ここに画像の説明を挿入

ブラウザから送信されたhttpリクエストを使用します。httpリクエストはhttpプロトコルを使用し、httpプロトコルはステートレスプロトコルです。httpプロトコルを使用しているユーザーが誰であるかをアクティブに記録しません。リクエストが正常に送信されると、サーバーはmake応答後、ブラウザとサーバー間のリンクはこの時点で消え、サーバーはリクエストの送信元と送信者を認識しません。したがって、この時点で、要求/リンクのステータスを記録/保存する必要があります。この記録/保存要求/リンクのステータスを実現するプロセスは、セッション追跡と呼ばれます。
2.セッショントラッキングとは何ですか?
サーバーハンドラーが要求/リンクステータスの記録/保存を実現するプロセスは、セッショントラッキングと呼ばれます。
3. 4つのセッション追跡テクノロジーとそれぞれの長所と短所は何ですか?
1. URLの書き換え:ユーザーセッションのID情報をURLアドレスに書き換えて、サーバー側のさまざまなユーザーを識別します。
https://blog.csdn.net/qq_33098039/article/details/78184535?sessionid=123456
クライアントがCookieを無効にしている場合、またはCookieをサポートしていない場合でも、URLの書き換えは機能します
2.フォームフィールドを非表示にします。ユーザーのセッションのID情報をHTMLフォーム要素****に追加し、サーバーに送信します。このフォーム要素はクライアント側には表示されず、参照時に表示されません。ソースコードに含まれています。
3. Cookie:Cookieは、Webサーバーからクライアントに送信される小さな情報です。クライアントが要求すると、情報を読み取ってサーバーに送信し、ユーザーを識別できます。サーバーはブラウザ側で作成および保存され、ドメイン名をまたぐことはできず、サイズと数量に制限があります。クライアントはこのCookieオブジェクトを2つの方法で保存できます。1つの方法は、一時Cookieと呼ばれるクライアントのメモリに保存することです。これは、ブラウザを閉じると消えます。もう1つの方法は、永続的なCookieと呼ばれるクライアントのディスクに保存することです。今後、クライアントがWebサイトにアクセスしている限り、Cookieが有効期間内であれば、Cookieはサーバーに再度送信されます。このようにして、顧客の追跡が実現されます。クッキーは禁止することができます
4.セッション:ユーザーごとに異なるセッションがあり、ユーザー間で共有することはできません。これは各ユーザー専用です。情報はセッションに保存できます。サーバー側に保存します。複数のサーバー間で共有する問題を解決する必要があります。セッションの内容が複雑すぎると、多数のクライアントがサーバーにアクセスしたときにメモリオーバーフローが発生する可能性があります。したがって、セッションの情報はできるだけ簡潔にする必要があります。
セッションはCookieに依存しています。Cookieが無効になっている場合、セッションも無効になります。
ユーザーが初めてhttpリクエストをサーバーに送信すると、サーバーはセッションオブジェクトを作成し、セッションIDを生成してセッションオブジェクトを識別し、セッションIDをCookieに入れて、クライアントに送信します。次回はhttpリクエストはサーバーに送信され、Httpリクエストは最初に取得されたsessionIDとともにサーバーに送信され、サーバー側でさまざまなユーザーが識別されます。

ここに画像の説明を挿入

上記のセッション追跡プロセスは、スーパーマーケットに行くときにスーパーマーケットの入り口にあるロッカーにアイテムを保管するプロセスと似ています。
4.セッションとCookieの違いは何ですか?
ここに画像の説明を挿入

5.
サーブレットでのHttpSessionHttpSessionインターフェイスの一般的なメソッド1.HttpServletRequest
オブジェクトのgetSession()メソッドを介してHttpSessionインターフェイスオブジェクトを取得します。2。HttpSessionインターフェイスオブジェクトの
一般的なメソッド
ここに画像の説明を挿入

例:ログイン操作はHttpSessionオブジェクトを使用します

package com.wangxing.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 创建登陆页面的Servet
 * @author Administrator
 *
 */
public class LoginServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//得到输出流对象
		PrintWriter out=resp.getWriter();
		//输出一个登陆页面
		//out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset=\"utf-8\">");
		out.println("<title>登陆</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		//得到session对象
		//1.通过HttpServletRequest对象的getSession()方法得到HttpSession接口对象
		HttpSession session=req.getSession();
		//输入session的基本信息
		showSessionInfo(out,session);
		//得到错误提示信息
		Object obj=session.getAttribute("errortip");
		if(obj!=null){
			String errortip=(String)obj;
			out.println("<font color=\"red\">"+errortip+"</font>");
		}
		out.println("<form action=\"cheack\" method=\"post\">");
		out.println("用户名:<input name=\"username\" type=\"text\"><br>");
		out.println("密码:<input name=\"password\" type=\"password\"><br>");
		out.println("<input type=\"submit\"  value=\"登陆\"/>");
		out.println("</form>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
     /**
      * 输入session的基本信息
      * @param out
      * @param session
      */
	private void showSessionInfo(PrintWriter out, HttpSession session) {
		//得到session的基本信息
		//得到sessionID
		String sessionid=session.getId();
		//创建时间日期格式化对象
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
		//得到session对象的创建时间[毫秒]
		String createtime=sdf.format(new Date(session.getCreationTime()));
		//得到session的最后访问时间[毫秒]
		String lastAccesse=sdf.format(new Date(session.getLastAccessedTime()));
		//得到session的最大不活动时间[秒]
		int maxtime=session.getMaxInactiveInterval();
		//session对象是否是一个新的session对象
		boolean sessionnew=session.isNew();
		out.println("<table border=\"1px\">");
		out.println("<tr>");
		out.println("<td>sessionID</td>");
		out.println("<td>"+sessionid+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>session对象的创建时间</td>");
		out.println("<td>"+createtime+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>session的最后访问时间[毫秒]</td>");
		out.println("<td>"+lastAccesse+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>session的最大不活动时间[秒]</td>");
		out.println("<td>"+maxtime+"</td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>是否是一个新的session对象</td>");
		out.println("<td>"+sessionnew+"</td>");
		out.println("</tr>");
		out.println("</table>");
	}
}
package com.wangxing.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 创建验证用户名和密码的Servlet
 * @author Administrator
 *
 */
public class CheackServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//得到用户名和密码
		String username=req.getParameter("username");
		String password=req.getParameter("password");
		//判断用户名和密码
		if(username.equals("zhangsan") && password.equals("123456")){
			//跳转到成功页面
			//封装用户名
			req.setAttribute("username", username);
			//请求转发
			req.getRequestDispatcher("/success").forward(req, resp);
		}else{
			//封装错误提示信息跳转到登陆页面
			//通过HttpSession对象封装数据
			//setAttribute用于向创建的session对象中保存数据
			req.getSession().setAttribute("errortip", "用户名密码不匹配");
			resp.sendRedirect("login");
		}
	}
}
package com.wangxing.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 创建登陆成功页面的Servet
 * @author Administrator
 *
 */
public class SuccessServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//从request中的得到username
		Object  obj=req.getAttribute("username");
		String username="";
		if(obj==null){
			resp.sendRedirect("login");
		}else{
			username=(String)obj;
		}
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//得到输出流对象
		PrintWriter out=resp.getWriter();
		//输出一个登陆页面
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset=\"utf-8\">");
		out.println("<title>登陆</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<h1>"+username+",登陆成功!!!</h1>");
		out.println("<a href=\"logout\">安全退出</a>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}
package com.wangxing.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 退出的Servlet
 * @author Administrator
 *
 */
public class LogOutServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置请求的字符编码
		req.setCharacterEncoding("utf-8");
		//设置响应的字符编码
		resp.setCharacterEncoding("utf-8");
		//销毁session对象
		req.getSession().invalidate();
		resp.sendRedirect("login");
	}
}

4. GetとPostの違いは何ですか?
ここに画像の説明を挿入

5.中国語の文字化け処理
Webページ----
Eclipse—ウィンドウ—>設定—>一般---->ワークスペース---->テキストファイルエンコーディング
Tomcat—デフォルトの文字エンコーディング「iso8859-1」
サーバー/ confディレクトリ/サーバー.xmlファイル

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"  URIEncoding="UTF-8"/>

1.サーブレットハンドラーに送信された中国語ページが文字化けします。送信後
メソッドrequest.setCharacterEncoding( "utf-8");
GETメソッドStringname = new String(name.getBytes( "iso8859-1")、 "utf-8 ");
2.サーブレットハンドラからページへの中国語の出力は文字化けしています
response.setCharacterEncoding(" utf-8 "); response.setHeader(" Content-Type "、" text / html; charset = utf-8 ") ;

おすすめ

転載: blog.csdn.net/guoguo0717/article/details/109124528