記事ディレクトリ
アイデアコードテンプレートを変更する
会話型テクノロジー
1. 会话:一次会话中包含多次请求和响应。
* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
2. 功能:在一次会话的范围内的多次请求间,共享数据
3. 方式:
1. 客户端会话技术:Cookie
2. 服务器端会话技术:Session
クッキー:
1. 概念:客户端会话技术,将数据保存到客户端
2. 快速入门:
3. 实现过程:客户端申请,服务器响应,数据存储在本地,下次访问将存储在本地的数据一并发送过去,实现多次请求响应的数据共享,服务器发送和接收cookie
* 使用步骤:
1. 创建Cookie对象,绑定数据
* new Cookie(String name, String value)
2. 发送Cookie对象
* response.addCookie(Cookie cookie)
3. 获取Cookie,拿到数据
* Cookie[] request.getCookies()
スーパー使用時に間違えましたか?
カプセル化されたクッキー
package learn.myweb;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//使用注解可以更加简便。其中有默认参数,例如loadstarup
@WebServlet("/head_easy")
//可以更加简化,将url省略掉,使用value就可以,进一步value也不用写
public class servlet_test extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("head_easy类");
System.out.println("dopost类");
// 获得cookie
Cookie[] cookies = req.getCookies();
if(cookies!=null){
for(Cookie c:cookies){
String cName = c.getName();
String cValue = c.getValue();
System.out.println(cName+cValue);
}
}
else{
System.out.println("cookie是空的");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("head_easy类");
System.out.println("doget类");
this.doPost(req,resp);
}
}
クッキーを解釈する
package learn.myweb;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//使用注解可以更加简便。其中有默认参数,例如loadstarup
@WebServlet("/head_easy")
//可以更加简化,将url省略掉,使用value就可以,进一步value也不用写
public class servlet_test extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("head_easy类");
System.out.println("dopost类");
// 获得cookie
Cookie[] cookies = req.getCookies();
if(cookies!=null){
for(Cookie c:cookies){
String cName = c.getName();
String cValue = c.getValue();
System.out.println(cName+cValue);
}
}
else{
System.out.println("cookie是空的");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("head_easy类");
System.out.println("doget类");
this.doPost(req,resp);
}
}
同じブラウザにキャッシュがある場合、同じでない場合は空になります。3
。実装の原則
*応答ヘッダーセットCookieと要求ヘッダーCookieの実装に基づく
*プロトコルの制約に従い、データは応答ヘッダーが認識されたときにローカルに保存され、次の送信で運ばれます。データ、
1つのWebサーバーに複数のWebプロジェクトを展開する
4.クッキーの詳細
-
一度に複数のCookie
を送信できますか?*はい
*複数のCookieオブジェクトを作成し、応答を使用してaddCookieメソッドを複数回呼び出してCookieを送信できます。
2. Cookieはブラウザにどのくらいの期間保存されますか?
1.デフォルトでは、ブラウザを閉じるとCookieデータが破棄されます。つまり、この時点でCookieはブラウザのメモリに存在し、閉じると解放されます
。2。永続ストレージ:
* setMaxAge(int seconds)
1。正の数:Cookieを設定しますデータはハードディスク上のファイルに書き込まれます。永続的なストレージ。また、Cookieの存続時間を指定します。時間が経過すると、Cookieファイルは自動的に無効になります。ブラウザを閉じてから30秒以内でも有効で、ウェブサイトログインの有効期間を示します
。cookie.setxxx(0)を閉じてからログインすると便利です。3
。負の数:デフォルト値、メモリ内
4.ゼロ:Cookie情報を削除し、Cookieはメモリとハードディスクにありません。サーバーはクライアントコンピューターの情報を直接操作することはできません。このようにクライアントコンピューターのCookieを操作することにより、
Cookieの有効期間内にクリアされます。3。Cookieは中国語で保存できますか?
* tomcat 8より前では、中国語のデータをCookieに直接保存することはできません。
*中国語のデータはトランスコーディングする必要があります-通常はURLエンコード(%E3)
* tomcat 8以降、Cookieは中国語のデータをサポートします。特殊文字はまだサポートされていません。URLエンコーディングストレージ、URLデコード分析を使用することをお勧めします
。4。Cookieの複数アイテムの共有の問題?
1.複数のWebプロジェクトがtomcatサーバーにデプロイされていると仮定すると、これらのWebプロジェクト間でCookieを共有できますか?
*デフォルトではCookieを共有できません* setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录。统一服务器的不同项目有共享数据的需求 * 如果要共享,则可以将path设置为"/" 2. 不同的tomcat服务器间cookie共享问题? 3. 由于项目过大,分支过多,如果将资源部署在同一服务器上,那么服务器无法支持,因此多台服务器之间也有共享数据需求 * setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享 * setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
-
Cookieの特徴と機能
1.Cookieはクライアントブラウザにデータを保存し、データは改ざんされたり失われたりしやすいです。2。ブラウザには単一のCookieのサイズ(4kb)に制限があり、同じドメイン名のCookieの総数(20)にも制限があります。 )
*機能:
1。Cookieは通常、機密性の低い少量のデータを保存するために使用されます
。2。ログインせずにサーバーによるクライアントの識別を完了するため。 -
ケース:最後の訪問の時刻を覚えておいてください
。1。要件:
1。サーブレットにアクセスします。最初の訪問の場合は、次のプロンプトが表示されます。こんにちは。最初の訪問を歓迎します。
2.最初の訪問でない場合、プロンプト:ようこそ、最後の訪問の時刻は次のとおりです。表示時間文字列は
、特定の名前のCookieが存在するかどうかを判断するために、Cookieを使用して実現されます。存在する場合は、時間が取り出され、時刻が更新されてバックスローガンが表示されます。存在しない場合は、ウェルカムスローガンを表示するために作成され、時間内に配置さ
れますが、スペースなどのCookie内の特殊文字は表示をサポートしていないため、特殊文字にはurlencoderエンコーディングを使用する必要があります。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/Test01_01")
public class Test01_01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("01-01-dopostt");
// Cookie msg = new Cookie("MSG", "hello");
// msg.setPath("/");
// response.addCookie(msg);
// 回复消息有中文,因此加上响应头
response.setContentType("text/html;charset=utf-8");
// 获得所有的cookie
Cookie[] cookies = request.getCookies();
Boolean exit=false;
// 遍历所有的cookie,为什么要判断cookie长度
if(cookies!=null && cookies.length>0){
for(Cookie c:cookies){
// 如果有特定的cookie名字出现
if(c.getName().equals("last_time")){
exit=true;
// 返回上次的登录时间,为什么要使用url与解码,特殊字符?是空格一类
String decoded_time = URLDecoder.decode(c.getValue(), "utf-8");
response.getWriter().write("<h1>"+"欢迎回来"+decoded_time+"<h1>");
// 将当前时间值更新进入cookie中
Date date = new Date();
// 重新设定date显示格式,其默认为美国格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String formated_date = dateFormat.format(date);
// 将当前时间编码后存储
String encode_date = URLEncoder.encode(formated_date, "utf-8");
c.setValue(encode_date);
// 设置cookie存活时间
c.setMaxAge(24*60*60);
response.addCookie(c);
}
else{
// response.getWriter().write("有cookieda都不符合条件");
}
// 找到就推出循环
break;
}
}
// 判断需要的文件是否存在,如果不存在就创建
if(cookies==null || cookies.length==0 || exit==false){
// 将当前时间值更新进入cookie中
Date date = new Date();
// 重新设定date显示格式,其默认为美国格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年mm月dd日 HH:mm:ss");
String formated_date = dateFormat.format(date);
// 将当前时间编码后存储
String encode_date = URLEncoder.encode(formated_date, "utf-8");
Cookie c = new Cookie("last_time", encode_date);
// 设置cookie存活时间
c.setMaxAge(24*60*60);
response.addCookie(c);
response.getWriter().write("您首次登录");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("01-01-doget");
this.doPost(request, response);
}
}
JSP:はじめに
1. 概念:
* Java Server Pages: java服务器端页面
* 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
* 用于简化书写,将java与html结合在一起
2. 原理
* JSP本质上就是一个Servlet
このフォルダに設定すると、workの下のインデックスがclassになり、workは実行時に生成されたリソースファイル
jsp-java-httpJspBaseの内部クラスを格納し、-httpserverlet
サービスメソッドは基本的なhtml要素を出力し、簡単に呼び出せるようにpage要素をカプセル化します。インタプリタをアタッチするのと同じで、
3の記述が簡単になります。JSPスクリプト:JSPはJavaコード
1の方法を定義します。<%code%>:サービスメソッドで定義されたJavaコード。serviceメソッドで定義できるもの、スクリプトで定義できるもの、ローカル変数を定義するもの、およびスコープが小さいもの。
2. <%!コード%>:jsp変換後のjavaクラスのメンバー位置である定義済みのjavaコードは、メンバー変数の一種です。一緒に記述してみませんか?一般的には使用されませんが、アクションの範囲は比較的広いです。。
3. <%= Code%>:定義されたJavaコードがページに出力されます。出力ステートメントで定義できるもの、スクリプトで定義できるもの、ページ出力ステートメント。
4. JSP的内置对象:
* 在jsp页面中不需要获取和创建,可以直接使用的对象,因为这些方法后来解释的时候都会放到service中执行,service中resp,req可以识别这些方法
* jsp一共有9个内置对象。
* 今天学习3个:
* request
* response
* out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
* response.getWriter()和out.write()的区别:
* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
* response.getWriter()数据输出永远在out.write()之前,就是response无论定义在哪里,都输出在out之前
* 因此建议使用out,不至于突然打乱布局,out顺序输出
コードの切り捨て、セグメントでの制御と表示を記述
できます利点:サーバーを再起動せずにJSPを時間内に更新できます
セッション:
1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
也是域对象,类似context,一次会话
3. 快速入门:
1. 获取HttpSession对象:
HttpSession session = request.getSession();
2. 使用HttpSession对象:
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
4. 原理
* Session的实现是依赖于Cookie的。
* 就是服务器创建一个session,指定唯一id,浏览器申请资源的时候将cookieID响应,反馈数据,后来浏览器访问其他资源携带这个cookieID,服务器会根据这个ID找到内部的数据,反馈,安全性高,内存消耗
-
詳細:
1。クライアントが閉じられているとき、サーバーは閉じられていません。同じセッションが2回取得されていますか?
*デフォルトで。そうではありません。セッションが終了したら、セッションを印刷してIDを別の方法で印刷できます
*
*同じものが必要な場合は、Cookieを作成し、キーはJSESSIONIDで、最大存続時間を設定し、Cookieを永続化できます。
Cookie c = new Cookie( "JSESSIONID"、session.getId());
c.setMaxAge(60 * 60);
response.addCookie©;2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗? * 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作,比如用户购物期间服务器重启,应当保证之前用户的数据不丢失,便于接下来的操作 * session的钝化: * 在服务器正常关闭之前,将session对象系列化到硬盘上 * session的活化: * 在服务器启动后,将session文件转化为内存中的session对象即可。 idea不活化,原因?钝化成功,将session.ser存储但是活化失败,因为当项目重启后,会将work目录删掉,导致之前的钝化无用,无法恢复数据 先找到本地项目-out目录(部署的项目,打包war)-找到tomcat目录下webapps,放入识别,开启(被解压)- 服务器开启,访问-需要是打包的名字+资源名代表实际路径,不再是虚拟路径 同tocmat目录下work目录运行时动态资源,比如jsp-java,session被序列化的文件也存储,这里服务器正常关闭后会将文件放入目录内,session.ser,当下次开启服务器,会自动读取session.ser,方便。 未来开发不在idea中部署,而是扔到webapps中居多,保证了钝化的work不会被轻易删除 3. session什么时候被销毁? 1. 服务器关闭 2. session对象调用invalidate() 。 3. session默认失效时间 30分钟,这就是一些网站30分钟重新登录的原因 可在tomcat的conf中web.xml中修改默认配置 选择性配置修改 <session-config> <session-timeout>30</session-timeout> </session-config>
-
セッションの特徴
- セッションは、セッションに対する複数の要求のデータを格納するために使用され、サーバー側に格納されます
- セッションには、任意のタイプとサイズのデータを保存できます
- セッションとCookieの違い:
- セッションはサーバー側にデータを保存し、クライアント側にCookieを保存します
- セッションにはデータサイズの制限はありません。Cookieには
- セッションデータは安全です。安全でない
jspと比較して、Cookieをブラウザで直接使用することはできません。サーバーを使用してください
-
文字列
が等しいかどうかを比較するときは、変数が空であることを考慮する必要があります。最良の方法は、str.equalsです。これにより、equalsを呼び出すことが空ではないことが保証されます。すべての変数が変数である場合は、&&を使用して最初にnullに等しいかどうかを判断できます。
検証コードのロジックの問題は1回限りであり、使い切ると無効になります。そうでない場合、ログインチェックは無効になります。