50 1日目サーブレット/セッション/クッキー/確認コード(画像へのクライアント出力)

著作権:https://blog.csdn.net/qq_39263750/article/details/90203061

1.一般的なステータスコードは、
200,302,404,405,500を

2.リダイレクトと 転送されました
のリダイレクト:2つの要求は、アドレスバーを変更するには、あなたはリダイレクトするフルパスを書くために、現在のサイトから他のサイトに行くことができます。
ここに画像を挿入説明
フォワード:リクエスト、内部サーバーのジャンプは、アドレスバーを変更するだけで、現在のWebサイトにジャンプします。のみを転送するページのパスを記述する必要があります。
ここに画像を挿入説明

リダイレクトとフォワードの違い

1.要求異なる番号:リダイレクトが2回要求され、要求転送
2.リダイレクトすると、プロジェクトの外のアドレスにアクセスすることができますが、転送することはできません。
3.要求を転送要求フィールドを使用しながら、リダイレクト要求フィールドは使用できない、要求オブジェクト
4リダイレクトアドレスバーが発生する可能性が異なり、転送ありません
リダイレクト要求(リクエストの再取得要求でなければならない、唯一のポストPOST要求が表示されて設けられ、そうでなければ要求を取得する)方法を変更する可能性があるが、転送することなく
変更することにより、方法6リダイレクト応答を(ヘッド))、完全な応答をリダイレクトし、異なるサーブレットに転送リクエストメソッドresquest(一次要求を転送します


GET POSTの違い

ポスト:データの量に制限はありません。ボディ要求、ボディに要求されたデータは、包装される、遅い効率、高いセキュリティがあります。ごみ処理。

GET:データの量が体1Kを要求されていない、データはアドレスバーに送信されます。速い、低セキュリティのカプセル化効率なし。

2019年5月4日

JSP:

Web2.0のページでは、使用するラベルは、Javaコードを交換してください。JSPページ(しかし難しい)でのJavaコードを記述しないでください

JSPスクリプト:
<%=%>出力を行う
<%%> javaの、そこに掲載されます書くことができますメソッド本体を
<%!>クラスには何を書くことがあるだろう何を、書くために内部ブレース
ここに画像を挿入説明

ここに画像を挿入説明

JSPは、組み込みオブジェクト

ビルトインオブジェクトJSPページ:JSPページのメンバ変数が定義されている、ユーザーがオブジェクトを直接使用することができます作成する必要はありません。
9ビルトインオブジェクトの合計:

要求、応答、アウト、セッション、アプリケーション、pageContextの、ページ、設定、例外

組み込みオブジェクト(暗黙オブジェクトとしても知られる)、すなわち、JSP、必要に(サーバーを作成する<コンテナ>)を作成することで、オブジェクトを直接使用することができます。

REQUEST要求オブジェクト型スコープリクエストjavax.servlet.ServletRequest

オブジェクトのページスコープの種類に応じて、応答のjavax.servlet.ServletResponse

pageContextのページコンテキストオブジェクトタイプjavax.servlet.jsp.PageContextのスコープページ

セッションのセッションオブジェクト型javax.servlet.http.HttpSessionスコープセッション

アプリケーションのアプリケーションオブジェクトタイプのjavax.servlet.ServletContextスコープアプリケーション

スコープページのうち、出力オブジェクトの種類するjavax.servlet.jsp.JspWriter

config設定オブジェクトタイプjavax.servlet.ServletConfigスコープページ

ページのページjava.lang.ObjectのオブジェクトタイプScopeページ

例外例外オブジェクトタイプjava.lang.ThrowableのScopeページ


ここに画像を挿入説明
ここに画像を挿入説明

ここに画像を挿入説明
悪い可読性。

JS能做的,一般原则就让JS做,不要丢给服务器,增加负担。

MVC

ここに画像を挿入説明

ここに画像を挿入説明
ここに画像を挿入説明

两个的区别

若要把数据打回页面,数据就存储在request中。
req.setAttribute。

ここに画像を挿入説明
ここに画像を挿入説明

getRequestDispatcher:转发。

数据回显:

原来算的两个数,计算完结果给你了,但是原来那个页面不显示了,怎么让原来的数据依然显示?(因为请求响应回给了一个新的页面)
ここに画像を挿入説明
把两个值再存到域里面即可。
ここに画像を挿入説明

ここに画像を挿入説明
ここに画像を挿入説明
这时的1和2就再计算后还在了。

所以,以后要回显的就存在域里面即可。

数据回显,可以用于以后记住用户名,记住密码等操作


HTTP协议是无状态协议:

用户请求服务器,服务器处理请求,响应给用户。
响应结束后,服务器不会记住这些数据。
下次用户在请求服务器,之前的数据服务器是不知道的,这次请求之前的数据服务器没有了。
我们要想让服务器记住一些有用的数据,这时候就用到了:

Web状态保持技术:Cookie、session。

ここに画像を挿入説明

所有web的东西,都是键值对。

先创建一个cookie对象,用响应的方式给存到服务器里。
ここに画像を挿入説明

取cookie:
ここに画像を挿入説明

ここに画像を挿入説明
ここに画像を挿入説明
cookie是存在浏览器里的,只要浏览器关了或者换了服务器,cookie自动清除。

ここに画像を挿入説明

ここに画像を挿入説明

Cookie对象初始化以后就可以设置过期时间了
ここに画像を挿入説明

设置了过期时间后,关浏览器cookie还是会保存,不会销毁。因为浏览器会设置过期时间 默认为 关闭浏览器
ここに画像を挿入説明

ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明

ここに画像を挿入説明

这个用法,可以用于以后写网页的时候,若没有登录的情况下点了购物车等功能,会在登录页面显示:请先登录

若登录过后,想记住用户名。(有的时候还有记住密码),以后用户再登录后不用输入名字

就是使用cookie来存。

完整版Servlet:
ここに画像を挿入説明
ここに画像を挿入説明

完整版登录页面
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
登陆成功后,下一次登录的时候,用户名就被记住了。
ここに画像を挿入説明

总结:Cookie:

Cookie:数据大小 4K
数据类型:String
过期时间:默认是浏览器关闭,失效。
存储位置:客户端浏览器
安全性:差。安全性高的网站,cookie最多只用来存用户名,不会来记密码。

Servlet三大域对象

ServletContext :作用域:服务器开启,到服务器结束
Request:一次请求响应,响应结束,这个域的内容就不要了。
session:一次会话:一次会话可以有多次请求响应
(完整版在页尾)
创建session:
ここに画像を挿入説明

取出session:
ここに画像を挿入説明
ここに画像を挿入説明

Session的结构:Map里面又装了一个Map

ここに画像を挿入説明
外层map sessionID。因为服务器内会存很多Session,所以第一个应该是ID。可以通过ID去找你的session。

SessionID其实就是一个Cookie
ここに画像を挿入説明
只要建立会话,服务器就会给你设置一个sessionID。

所以,关闭了浏览器,sessionID默认就失效了,所以这时候回来通过id找session是找不到的。但是session仍然存在服务器内。但是会造成==”关闭浏览器“session生命流程结束的错觉。==

总结:Session:

数据大小:没有限制
数据类型:object
过期时间:一次会话,服务器默认的是30分钟(若30分钟内再次进行交互,则重新计算30分钟)
存储位置:服务器
安全性:相对较高

通过session的引入,完善用户登陆

必须记录Session
ここに画像を挿入説明

当点击某些需要登陆的页面,此时没有session(既没有登录),转发回登陆页面,并返回 一行字

此刻就用到了上面说过的 回转

if(条件){
xxxx
}else{
req.setAttribute(”msg“,”xxx“)
req.getRequestDispatcher(”/地址。jsp“).forward(req,resp)
}

ここに画像を挿入説明
现在未登陆的时候,若直接访问welcome,则
ここに画像を挿入説明

配置session 过期时间
ここに画像を挿入説明


若浏览器禁用了cookie,则session也没法用了。为了避免这种情况,可以URL重写:
ここに画像を挿入説明

(没啥用)

问题:cookie session application 的区别。

验证码:

作用:防止暴力破解,暴力注册

使用验证码:
1.服务器随机产生一组字符,使用存储session中
2.字符变成图片响应给用户
3.使用存储在session中的验证码

首先,导入jar包:chinasofti-tools。jar 查看里面绘验证码的方法
ここに画像を挿入説明
发现这个jar包内有三个公共类 可以供我们调取使用:
ここに画像を挿入説明
ここに画像を挿入説明
那么如何调取jar包里面的这三个方法并且使用?

先创建imageServlet。
ここに画像を挿入説明
因为产生验证码使用的是get方法(发送一个get请求 get到一个验证码),所以要写在servlet里面的get方法里
response.getOutputStream:图片输出流,详解在下面。

ServletOutputStream getOutputStream()

获得字节流,通过该字节流的write(byte[] bytes)可以向response缓冲区中写入字节,再由Tomcat服务器将字节内容组成Http响应返回给浏览器。

response.getWriter().write(“字符串”),这个方法只能写字符串。如果要写字节,比如,传个图片,怎么办呢?就要靠response.getOutputStream()

这个servlet可以直接访问(因为servlet也就是一个jsp)
ここに画像を挿入説明
现在来到jsp页面:
ここに画像を挿入説明
填好servlet的地址,即可使用。

验证码的刷新

验证码虽然可以通过F5变化,但是实际使用的时候不方便 因为要重新输入账号密码。
ここに画像を挿入説明
ここに画像を挿入説明
验证码,点击链接切换验证码的功能就实现了。
ここに画像を挿入説明

getOutPutStream 字节流 字符流 是啥?

完善登陆验证账号密码、验证码的功能

ここに画像を挿入説明
ここに画像を挿入説明

servlet回显回来的几个值,要在jsp页面接收:
ここに画像を挿入説明
ここに画像を挿入説明

登陆成功,跳转到welcome页面
ここに画像を挿入説明

测试:

1.账号密码正确,验证码错误:
ここに画像を挿入説明
ここに画像を挿入説明

2.账号密码错误,验证码错误
ここに画像を挿入説明
ここに画像を挿入説明

3.账号密码错误,验证码正确
ここに画像を挿入説明
ここに画像を挿入説明

4.账号密码 验证码都对。
ここに画像を挿入説明

javaweb开发中Servlet三大域对象的应用(request、session、application(ServletContext))。

  1. request
    request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。

用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。

方法:request.setAttribute(); request.getAttribute(); request.removeAttribute(); request.getParameter().

  1. session
    服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。

会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。

用处:常用于web开发中的登陆验证界面(当用户登录成功后浏览器分配其一个session键值对)。

方法:session.setAttribute(); session.getAttribute(); session.removeAttribute();

获得session对象方法:

在Servlet中:HttpSession session = request.getSession();
由于session属于jsp九大内置对象之一,当然可以直接使用。例如:<%session.serAttribute(“name”,“admin”)%>。
session被销毁
1)session超时;
2)客户端关闭后,再也访问不到和该客户端对应的session了,它会在超时之后被销毁;
3)调用session. invalidate();
备注: session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。(session底层依赖于cookie)

  1. Application(ServletContext)
    作用范围:所有的用户都可以取得此信息,此信息在整个服务器上被保留。Application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据。ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb应用只创建一个ServletContext对象,所有的客户端在访问服务器时都共享同一个ServletContext对象;ServletContext对象一般用于在多个客户端间共享数据时使用;

获取Application对象方法(Servlet中):
ServletContext app01 = this.getServletContext();
app01.setAttribute(“name”, “kaixuan”); //设置一个值进去

                ServletContext app02 = this.getServletContext();
                 app02.getAttribute("name");    //获取键值对  

JSPは、組み込みのオブジェクトと9つのServletContextの一つであり、それは直接使用することができます

注意:app02 app01、app01 app02で設定した値は確かにすることによって得ることができるように、サーバーのみ、ServletContextオブジェクトを作成します。

要約:

1.適用範囲:要求セッションアプリケーション

  • スコープと格納されたデータ転送を使用して
  • データを転送するためにスコープを使用するときは、ライフサイクルの範囲と対応する範囲を把握する必要があります
    • ライフサイクル
  • (1)要求:要求は、一つに限定されます
  • (2)セッション:セッション(複数の要求)
  • 始めます
  •  用户向服务器发送请求的时候 
    
  •  结束
    
  •    客户端
    
  •     丢失JsessionId值的时候(关闭浏览器)
    
  •    服务器端 
    
  •        关闭服务器 
    
  •        超过会话的不活动周期时间 
    
  • (3)アプリケーション:アンインストールするためのロードプロジェクト
    * 3スコープを。
  • (1)requset:すべてのリクエスト転送サーブレット
  • (2)セッション:すべてのサーブレット
  • (3)アプリケーション:すべてのサーブレット(ブラウザの提示のため、区別とのセッションスコープ)

4. *どのように権利範囲を選択するには
(1)リクエスト*:現在の操作に関連する機能

  • (2)セッション:に関連する情報をユーザ
  • (3)アプリケーション:プロジェクトに関連するグローバル情報----「Jingdongの配信アドレス
  • 5.どのように右の範囲を選択するにはどうなるのか、正しくありません
  • メモリの廃棄物

おすすめ

転載: blog.csdn.net/qq_39263750/article/details/90203061
50