------------恢复内容开始------------
JSP中的内置对象
1.什么是内置对象
直接在jsp页面中可以使用的对象
2.内置对象有哪些?
jsp中有9大内置对象
pageContext jsp页面上下文对象,可以获取其他内置对象
request 从客户端向服务器发送的请求对象
session 服务器为客户端创建的会话对象
application 代表应用或者整个工程。
out 向输出流写入内容的对象
response 从服务器向客户端作出响应的对象
page 当前的jsp翻译成Servlet后的对象的引用 this
config jsp的ServletConfig对象
exception 表示jsp页面运行时产生的异常对象 jsp页面指令必须指定 isErrorPage="true",才可以使用
需要另外打开浏览器输入网址才能看到效果。
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
final javax.servlet.http.HttpServletRequest request
final javax.servlet.http.HttpServletResponse response
java.lang.Throwable exception
3.out对象
类型:JspWriter类 相当于带缓存的PrinWriter
可以向客户端浏览器输出信息,普通文本,HTML标记,js脚本。
PrinWriter:
write(内容):直接向浏览器写出内容
JspWriter:
write(内容):向jsp缓冲区写出内容
out对象输出内容会放置到response的缓冲区去。
当满足以下条件之一,缓冲区内容直接写出到客户端浏览器:
1)缓冲区满了
2)刷新缓冲区
3)关闭缓冲区
4)jsp页面执行完成
请求响应模式:
1.客户端向服务器端发送请求,2.服务器端接收客户端请求数据,3.进行处理,4.然后再响应到客户端!
编写了前台登录页面,输入用户名和密码,将用户名和密码发送到后台页面,并模拟判断登陆是否成功!
request对象
获取请求参数数据:1.接收单个参数值: request.getParameter("uname")
2.接收多个参数值:request.getParameterValues("hobby")
如果请求页面用户什么都没有输入,文本框形式的接收到的参数值是空字符串
如果是选择框,不选或参数名错误,获取到的参数值都为null
如果接收的参数名不存在,接收到的参数值就为null
第一次访问页面时不会传递任何参数,除非网址拼接带有参数
如果参数值有中文,
处理方式:
如果是post请求方式: 在接收参数之前设置编码格式<% request.setCharacterEncoding("utf-8"); %>
如果是get请求方式:方式一:new String( uname.getBytes("iso-8859-1"),"utf-8")或
new String( uname.getBytes(),"utf-8")
方式二:在Tomcat服务器server.xml文件中加上URIEncoding="utf-8"
两个按钮共用一个表单:(登陆,注册)
一个按钮设置submit,
另外一个按钮设置button,添加click事件。在事件中window.location.href=URL
属性管理:
提供所在请求域范围数据的存取方法
向所在域保存数据
void setAttribute(String name,Object value);
向所在范围取数据:
Object getAttribute(String name);
作用:可以保存数据,也可以获取数据,分享数据
保存的数据只能本页面或请求转发页面获取(同一个请求有效),其他页面无法获取
移除某个保存数据:
request.removeAttribute("bookname")
request.getRequestDispatcher("welcome.jsp").forward(request, response);
请求转发:
1).地址栏不会改变
2).请求次数只有一次,主要是服务器内部帮客户端执行了后续工作
3).转发过程中,可以把数据保存到request域对象中
4).请求的资源只能是本网站的
response对象
1.页面重定向
sendRedirect(url)
1).地址栏会改变,变成重定向到的地址
2).请求次数至少是两次,服务器在第一次请求后,会返回302以及一个地址,
浏览器根据这个地址,执行第二次请求访问。
3).重定向过程中,不可以把数据保存到request域对象中
4).请求的资源可以是任意的
2.设置客户端浏览器接收响应数据的编码格式以及如何展示响应数据
response.setContentType("text/html; charset=UTF-8");
3.设置页面自动刷新 例如:
response.setHeader("refresh","10");
4.向客户端直接发送信息
response.getWriter().write("response输出信息!");
会话管理:管理浏览器和服务器之间的会话过程中产生的会话数据
1.cookie技术:会话数据保存在客户端浏览器
cookie:小饼干,其实就是一份小数据,是服务器发送到客户端保存的一份小数据
应用场景:自动登录,浏览记录,购物车
为什么要用cookie
http的请求是无状态。客户端与服务器在通讯的时候,是无状态的,
其实就是客户端在第二次访问的时候,服务器根本就不知道这个客户端以前有没有访问过。
为了更好的用户体验,更好的交互[自动登录]。如果从公司层面讲,就是为了更好收集用户
习惯或信息[大数据]
如何使用Cookie
1.添加Cookie到客户端
在响应的时候,添加Cookie(需要用到response)
Cookie cookie=new Cookie(String name,String value);
//1).创建Cookie对象
Cookie cookie=new Cookie("uname","zhangsan");
//2).把Cookie对象添加到response对象中
response.addCookie(cookie);
2.获取Cookie(需要用到request)
Cookie[] cookies= request.getCookies();
if(cookies!=null){
for(Cookie c:cookies){
String name= c.getName();
String value=c.getValue();
out.print(name+":"+value+"
");
}
}
原理:
1.服务器创建Cookie对象,把会话数据存储到cookie对象中。
Cookie cookie=new Cookie("uname","zhangsan");
2.服务器发送cookie信息到浏览器
response.addCookie(cookie);
//set-cookie:uname=zhangsan(响应头部信息中)
3.浏览器得到服务器发送的cookie,然后保存到浏览器端。
4.浏览器下次访问服务器时,会带着cookie信息
//cookie:uanme=zhangsan(请求头部信息中)
5.服务器接收到客服端浏览器带来的cookie信息
request.getCookies()
注意点:
1)cookie没有设置有效期,其作用与session相似,cookie的添加与浏览器关闭
2)设置有效期,生存期与有效期相关,与浏览器的打开与关闭无关
3)cookie保存的数据只能是字符串,而且不能有中文
4) setPath(String uri):设置cookie的有效访问路径,有效路径指的是访问页面的网址中带有该路径
5)setMaxAge(int time) :设置cookie的有效时间
正整数:表示cookie数据保存在浏览器缓存目录中的时间
负整数:表示cookie数据保存在浏览器内存中。浏览器关闭,cookie就丢失。
零:表示删除同名的cookie数据
6)可以保存多个cookie,但是浏览器保存一般只允许两三百多左右。每个cookie的大小限制为4kb左右。
2.session技术:会话数据保存在服务器端
1)创建或得到session对象
getSession() 创建或得到session对象
getSession(true) 创建session对象
getSession(false) 得到session对象
2)保存会话数据到session对象
向所在域保存数据
void setAttribute(String name,Object value);
向所在范围取数据:
Object getAttribute(String name);
作用:可以保存数据,也可以获取数据,分享数据
保存的数据可以是本网站同一个浏览器中任意页面,(必须是同一个浏览器),关闭浏览器,保存数据失效。
移除某个保存数据:
removeAttribute("bookname")
3)设置session对象
a)设置session的有效时间setMaxInactiveInterval(int n)(默认有效时间:30分钟)
b)销毁session对象
invalidate()
这个方法执行之后不会马上销毁session对象,本页面执行完毕之后销毁session对象
c)getId()获得session编号
sessionid:7BD0AEAA80F716ED2677689D68DF57FE
sessionid:7BD0AEAA80F716ED2677689D68DF57FE
不同浏览器:
sessionid:7B8573EB1CB59010676D54B3762B211B
sessionid:7B8573EB1CB59010676D54B3762B211B
第一次访问本网站,响应头部信息中有
JSESSIONID=7E884AB65AB5818A79F98900482BC7C1
第二次访问本网站:请求头部信息中有
Cookie: JSESSIONID=7E884AB65AB5818A79F98900482BC7C1
session原理
session为什么能够识别不同的浏览器
浏览器1:第一次访问网站时,服务会分配一个唯一的一个标记sessionid:s001,
发送到客户端浏览器保存
1)创建session对象s1,保存数据
浏览器1的新窗口(带有s001的标记访问服务器查询session对象,s001->s1)
1)获得session对象,以及获得保存的数据
新的浏览器1:(没有带s001,所以不能得到浏览1中的s1对象)
第一次访问网站时,服务会分配一个唯一的一个标记sessionid:s002,
1)创建session对象s2,保存数据
新的浏览器1的新窗口(带有s002的标记访问服务器查询session对象,s002->s2)
1)获得session对象,以及获得保存的数据
浏览器2:(没有带s001,所以不能得到浏览1中的s1对象)
第一次访问网站时,服务会分配一个唯一的一个标记sessionid:s003,
1)创建session对象s3,保存数据
浏览器2的新窗口(带有s003的标记访问服务器查询session对象,s003->s3)
1)获得session对象,以及获得保存的数据
1) 第一次访问网站时创建session对象,会给session对象分配一个唯一的一个标记id,
JSSIONID,new HttpSession();
2) 把JSSIONID作为cookie值发送给浏览器保存
3)第二次访问时,浏览器带着JSSIONID的cookie访问服务器
4)服务器得到JSSIONID,在服务器中搜索是否存放对应的session对象
5)如果找到对应编号的session对象,直接返回该对象
6)如果找不到对应编号的session对象,创建session对象,继续按1)的流程走。
application对象
保存全局数据到application对象
向所在域保存数据
void setAttribute(String name,Object value);
向所在范围取数据:
Object getAttribute(String name);
作用:可以保存数据,也可以获取数据,分享数据
保存的数据可以是本网站中任意页面,关闭服务器,保存数据失效。
移除某个保存数据:
removeAttribute("bookname")
------------恢复内容结束------------
原文:https://www.cnblogs.com/ChristianYu/p/12726548.html