転送とリダイレクト
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登陆成功<br>
欢迎你:
<%
String name=request.getParameter( "username" );
%>
<%=name%>
</body>
</html>
転送されました
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>show</title>
</head>
<body>
<%
//设置编码
request.setCharacterEncoding( "UTF-8" );
String name=request.getParameter( "username" );
String pwd=request.getParameter( "password" );
if(name.equals( "zs" )&&pwd.equals( "abc" )){
request.getRequestDispatcher( "success.jsp" ).forward( request,response );
//可以获取到数据,并且地址栏没有改变(任然保留转发时的地址)
}else{
out.print( "登陆失败" );
}
%>
</body>
</html>
リダイレクト
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>show</title>
</head>
<body>
<%
//设置编码
request.setCharacterEncoding( "UTF-8" );
String name=request.getParameter( "username" );
String pwd=request.getParameter( "password" );
if(name.equals( "zs" )&&pwd.equals( "abc" )){
response.sendRedirect( "success.jsp" ); //重定向会导致数据丢失
}else{
out.print( "登陆失败" );
}
%>
</body>
</html>
![
転送とリダイレクトの違い | ||
---|---|---|
要求の転送 | リダイレクト | |
アドレスバーを変更するかどうか | 変わりません | 変更 |
データを保持するかどうかをするときの最初のリクエスト | 保持 | 保持されていません |
リクエストの数 | 1 | 2 |
ジャンプ位置が発生します | サーバー | 2番目のクライアントは、ジャンプを作ります |
(https://img-blog.csdnimg.cn/20200313174522838.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1Y2FuMTIzNA==,size_16,color_FFFFFF,t_70)
セッション
クッキー(クライアントは、組み込みのオブジェクトではありません):
クッキー:キー=値は
、内蔵されていないオブジェクトによって提供されたパケットjava.servlet.http.Cookie Javaの
従来の方法の
パブリッククッキー(文字列のキー、文字列値 ) コンストラクタ
文字列のgetName();名前取得
値取得し、文字列のgetValue()を
(秒)セット期間、無効setMaxAge(int型の有効期限を)
サーバによって生成されたクッキー、その後、保存されたクライアントに送信されます。役割のローカルキャッシュに相当
な訪問、クライアントがクッキーを生成し、最初の訪問は、クライアントに送信され、2番目の訪問は、それは非常に高速です。
サーバーは、クライアントプロセスに送信する
クライアント準備クッキーです:respond.addCookie(クッキークッキー);
ページジャンプ(前方、リダイレクト);
クライアントの取得クッキー:要求。getCookie();
注:。サーバクッキー増加:レスポンスオブジェクトを、クライアントがオブジェクトを取得し、要求がオブジェクト
Bを。直接ではなく、特定のオブジェクト、過去に一度だけクッキーを全て取得する
利点を:アクセス速度が、貧困層のセキュリティを向上させます。
短所:貧しいセキュリティ(パスワードなど)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>show</title>
</head>
<body>
<%
Cookie cookie1=new Cookie( "name","b" );
Cookie cookie2=new Cookie( "password","34" );
response.addCookie( cookie1 );
response.addCookie( cookie2 );
//页面跳转到客户端
response.sendRedirect( "result.jsp" );
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
out.print(cookie.getName()+"--"+cookie.getValue()+"<br>");
}
%>
</body>
</html>
結果を表示
ビューコンソールは、オブジェクトのクッキーの独自のセットに加えて、クッキーのJSESSIONIDの名前があり、F12によって発見しました
クッキーは、自動保存のユーザー名を使用します。
index.jspの
<%@ page contentType="text/html;charset=UTF-8" language="java"
import="java.util.Date" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%!
String name;
%>
<%
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals( "name" )){
name=cookie.getValue();
}
}
%>
<form action="show.jsp" method="post">
用户名:<input type="text" name="username" value="<%=(name==null?"":name)%>"/><br/>
//这里有个等式表达式包括三目运算符的地方,需要注意
密码:<input type="password" name="password"/><br/>
<input type="submit" value=登录>
</form>
</body>
</html>
show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>show</title>
</head>
<body>
<%
//将相关信息存放到cookies中
request.setCharacterEncoding( "utf-8" );
String name=request.getParameter( "username" );
String password=request.getParameter( "password" );
Cookie cookie_name=new Cookie( "name",name );
response.addCookie( cookie_name );
%>
</body>
</html>
ブラウザへの最初の時間は、ユーザ名は空白ですが、エントリの二回目は、自動的に最初に入力したユーザ名を表示します
セッション(セッション)
近くにショッピング-スタート:セッションシリーズから撤退することですブラウズ- -お支払いをウェブサイトをご覧ください
:セッションメカニズム
、サーバーへのクライアントの最初の要求は、サーバーがセッションオブジェクト(顧客情報を保存するユーザー)を生成
し、各セッションオブジェクトは、一意のセッションID(他のセッションからそれを区別するために使用される)が存在するであろう
、同時にクライアントに、サーバ応答サーバは、クッキーを生成し、クッキー名= JSESSIONID、値=値セッションIDサーバ、そのため、クライアントは、クッキーができ、1サーバーのセッション(JSESSIONIDセッションIDに対応する)、これまでのところ、クライアントがクッキー(JSESSIONID)を持つことになります、クライアントにクッキーを送信
要求した後、クライアントに基づくサーバーマッチ(とJSESSIONIDセッションIDのセッションクッキー)場合、セッションマッチングセッションIDのJSESSIONIDの終わりにサービスを提供するためにクッキーはユーザーがログインせずに、最初の訪問ではありませんについて説明します。
一般的に使用される方法:
文字列geiId(); // GETセッションID
ブールIsNew(); //新しいユーザー(初診)であるかどうかを判断する
(無効化を無効); //セッション失敗;(ログインキャンセル)
のsetAttribute() ;
のgetAttribute();
ボイドsetMaxInactiveInterval(); //最大有効非アクティブ時間を設定(秒)
int型getMaxInactiveInterval(); //非アクティブの最大有効期間を取得
ユーザ名の取得するためにセッションを使用して、ケースを
index.jspのを
<%@ page contentType="text/html;charset=UTF-8" language="java"
import="java.util.Date" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="check.jsp" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value=登录>
</form>
</body>
</html>
check.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setCharacterEncoding( "utf-8" );
String name=request.getParameter( "username" );
String password=request.getParameter( "password" );
if(name.equals( "zs" )&&password.equals( "abc" )){
//只有登录成功session中才会存在username和password
session.setAttribute( "username",name );
session.setAttribute( "password",password );
request.getRequestDispatcher( "sessionDemo.jsp" ).forward( request,response );
}else {
response.sendRedirect( "index.jsp" );
}
%>
</body>
</html>
sessionDeom.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
欢迎你:
<%
String name= (String) session.getAttribute( "username" );
//如果用户没有登陆,直接访问sessionDemo.jsp则必然获得name==null
if(name!=null){
out.print( name );
}else{
response.sendRedirect( "index.jsp" );
}
%>
</body>
</html>