50期Day1 servlet/session/cookie/验证码(向客户端输出图片)

版权声明: https://blog.csdn.net/qq_39263750/article/details/90203061

1.列举常见状态码
200 302 404 405 500

2.重定向和 转发的区别
重定向:两次请求,地址栏要变化,可以从当前网站转到其他网站,重定向要写完整路径。
在这里插入图片描述
转发:一次请求,服务器内部跳转,地址栏不变,只能在当前网站跳转。转发只需要写页面路径即可。
在这里插入图片描述

重定向和转发的区别

1.请求数量不同:重定向是两次次请求,转发一次请求
2.重定向可以访问项目之外的地址,而转发不能。
3.重定向不可以使用request域,而转发使用的是request域,一次请求,一个request对象
4.重定向地址栏可能会发生会发生变化,而转发一定不会
5.重定向请求方式有可能发生改变(重定后的请求一定是get请求,只有显示设置post才是post请求,否则是get请求),而转发不会
6.重定向时response的方法(通过修改response头来完成重定向),而请求转发是resquest的方法(一次请求,转发给不同的Servlet)


GET POST的区别

post:数据量没有限制。 有请求体,数据就在请求体内,要封装,效率慢,安全性高。乱码处理。

get :数据量 1k 没有请求体,数据就传在地址栏里。不用封装,效率快,安全性低。

2019-5-4

JSP:

在Web2.0页面中,使用标签替换java代码。 不要在jsp页面写java代码(但是很难实现)

JSP脚本:
<%= %>做输出的
<% %>java中,方法体里面能写的都能写这里面
<%! %>类的大括号里面能写啥,这里面就能写啥
在这里插入图片描述

在这里插入图片描述

JSP内置对象

JSP页面的内置对象:jsp页面中已经定义好的成员变量,用户不需要创建这个对象,可以直接使用。
一共有九大内置对象:

request、response、out、session、application、pageContext、page、config、exception

内置对象(又叫隐含对象),就是在jsp中,不需要创建(由服务器<容器>来创建),可以直接使用的对象。

request 请求对象  类型 javax.servlet.ServletRequest 作用域 Request

response 响应对象 类型 javax.servlet.ServletResponse 作用域 Page

pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page

session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session

application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application

out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page

config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page

page 页面对象 类型 java.lang.Object 作用域 Page

exception 例外对象 类型 java.lang.Throwable 作用域 page


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可读性太差。

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");    //获取键值对  

ServletContext同属于JSP九大内置对象之一,故可以直接使用

备注:服务器只会创建一个ServletContext 对象,所以app01就是app02,通过app01设置的值当然可以通过app02获取。

总结:

1.作用域: request session application

  • 使用作用域传递数据和存储数据
  • 使用作用域传递数据时,必须掌握作用域对应的生命周期和作用范围
    • 生命周期
  • (1) request:只限于一次请求
  • (2) session:一次会话(多次请求)
  • 开始
  •  用户向服务器发送请求的时候 
    
  •  结束
    
  •    客户端
    
  •     丢失JsessionId值的时候(关闭浏览器)
    
  •    服务器端 
    
  •        关闭服务器 
    
  •        超过会话的不活动周期时间 
    
  • (3) application:项目的加载到卸载
    *3.作用范围
  • (1) requset:所有被请求转发的Servlet
  • (2) session:所有的Servlet
  • (3)application:所有的Servlet(换一个浏览器演示,跟session作用域区分)

4.*如何正确的选择作用域
*(1) request:跟当前操作功能相关

  • (2) session: 跟用户信息相关
  • (3) application:跟项目全局信息相关----》京东配送地址
  • 5.如何正确的选择作用域不正确,会出现什么情况
  • 内存浪费

猜你喜欢

转载自blog.csdn.net/qq_39263750/article/details/90203061