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 ") ;