02.JSP内置对象
一、内置对象:不再由用户进行实例化而可以直接使用的对象,一共九种,一定要清楚的记住每种内置对象的类型,以方便查询文档。
二、四种属性保存范围
1, 属性保存范围:指一个设置的对象,可以经过多少个其他的页面后仍然可以访问的保存范围。
2, 四种属性范围:
A,page范围,由pageContext对象完成,只能在一个页面中保存属,跳转之后无效
B,request范围,只在一次请求中保存,服务器跳转之后依然有效(客户端跳转无效)
C,session范围,在一次会话范围中,无论何种跳转都可以使用,而且从跳转之后的页面新开一个页面也可以使用,但是新开的浏览器无法使用访问跳转后的页面无法使用。对于服务器而言,每一个连接到它的客户端都是一个session
D,application范围,在整个服务器保存,所有用户都可以使用。属性设置后,无论如何跳转,无论是否是新开的浏览器,都可以访问。
特别注意:A,四种属性设置优先性,page>request>session>application,范围越窄,服务器压力越小
B,可以通过pageContext设置四种属性范围
3, 属性设置方法:每种属性都有以下三种方法
范例:page:只能在本页面使用设置的属性
request:可以在服务器跳转之后的页面访问设置的属性,而且具有传递性
session:在一个页面设置的属性,可以被同一会话的其他跳转页面使用
application:在一个页面中设置的属性,可以在服务器未关闭期间,被其他跳转页面,或者新打开的浏览器页面使用
4,通过pageContext设置四种属性范围:
pageContext.setAttribute(String name,Object value,int scope),其中scope取四种常量PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE,APPLICATION_SCOPE分别表示设置四种属性范围
对应的,取得不同属性也需要设置scope值:pageContext.setAtttribute(String name,int scope)
三、request对象
1, 作用:主要用来接收客户端(或其他页面)发送来的请求消息,如请求的参数,发送的头信息。
request是javax.servlet.http.HttpServletRequest接口的实例化对象,表示此对象主要应用在http协议上。HttpServletRequest接口的父接口ServletRequset却只有HttpServletRequest一个子接口,不将其合并成一个接口,是为从长远考虑,因为现在主要使用的是http协议,说不定以后会出现其他协议,这样新的协议可以直接继承ServletRequest接口
2, 参数传递
a, request的所有方法都是围绕如何接收参数及头信息,接受的参数包括表单提交过来的文本,密码,单选框,复选框,其中复选框需要以数组的形式接收,public String[] request.getParameters(“***”)
b,地址重写的方式传递参数:在一个jsp页面的url路径后面添加 ?param1=value1¶m2=value2…..即可向该页面传递参数
c, 表单提交时,method的post与get方式的区别:
post方式:提交后的地址栏为目标地址,且只能用于表单提交
get方式:提交后的地址栏变成目标页面地址,且会以地址重写的方式显示,则传递时肯定会受到地址栏长度的限制
且get方式要求表单数据必须是ASCIll字符
点击刷新,post会重新提交数据,get无影响;且post方式比get方式安全性高。
总结:get是向服务器索取数据的一种请求,查询键值对是通过请求的URL发送的;post是向服务器提交数据的一种请求,查询键值对是通过请求的HTTP消息主体中发送的
d,获取所有参数名称:Enumeration getParameterNames(),返回Enumeration对象,可用nextElement()逐个获取参数
3, 显示头信息
头信息:在请求和回应中包含的其他信息,如客户端IP,Cookie,语言等。请求头信息可以用request的Enumeration getHeaderNames()和request.getHeader方法取得头信息名及内容
4, 其他操作
通过request对象可以取得客户端的IP地址,请求方式,访问的路径,上下文路径名称等
直接打开jsp属于get请求方式
上下文路径名称很重要,可以取得项目根路径,通过它方便的访问同一项目中其他文件夹中的内容
5, 总结
getAttirbute与getParameter的区别:
四、response对象
1, 功能:主要用于服务器回应客户端请求。是HttpServletResponse接口的实例,同request类似,HttpServletResponse的父接口ServletResponse也只有一个子接口
2, 方法:
设置头信息
定时刷新:
定时跳转:
这种跳转只有在服务器处理后才有效果,当页面跳转之后,如果直接后退,没经过服务器处理,则不会跳转
html本身有设置头信息的功能:
通过设置头信息的定时跳转属于客户端跳转,地址栏会改变
页面跳转
也属于客户端跳转
小结:客户端跳转也服务器端跳转区别
服务器端跳转:地址栏不变,可以传递request属性,属于无条件跳转,跳转后面的语句不再执行,所以如果有用JDBC连接数据库的话,必须在服务器跳转之前关闭。<jsp:forward page=””/>
客户端跳转:地址栏改变,不能传递request属性,跳转后面的语句将继续执行。
服务器跳转是客户端发送一个jsp或Servlet资源请求,这个资源又将请求转到另一个服务器资源,然后才响应客户端,即一次请求,一次响应
客户端跳转是客户端发送一个资源请求,服务器响应,客户端再根据这个响应中URL地址,再发送一次请求,然后服务器再次响应即两次请求,两次响应
服务器跳转:
- <jsp:forward page=””/>
- pageContext.forward()
- request.getRequestDispatcher(“1.jsp”).forward(request,response)
客户端跳转:
- 链接跳转:<a href=””></a>
- 表单提交
- 重定向Response.sendRedirect(“”)
- 设置头信息定时跳转,包括response.setHeader()和html自带设置头信息功能
Cookie:浏览器提供的一种技术,可以让一些服务器端程序或者在客户端进行处理的数据,放在浏览器本地计算机中,不需通过网络传输,可以提高网页处理效率,减少服务器负载
设置并保存Cookie: 一个Cookie是由name跟value组成,setMaxAge()用于设置Cookie保存时间,不设置的话,一 个Cookie默认是暂时保存在浏览器上,关闭浏览器之后,Cookie消失。运行此jsp,则将c1,c2保存在客户端。
在另外一个页面取得Cookie:
注意:通过request对象取得Cookie;Cookie本身是存在安全隐患的
五、session对象
1,session id:对于每一个用户,其实就表示一个session,服务器靠session id 来区分这些用户。即每一个通过浏览器连接到服务器的用户都会由服务器分配一个不会重复的编号
通过pageContext操纵对内置对象方法
jsp页面运行时,会自动的设置一个Cookie,那个Cookie也即用户的session id
服务器关闭后,会重新分配session id
2,登陆验证及注销:验证是否登陆或是否处于登陆状态
原理:用户登录成功,则设置一个标志session属性,并跳转至welcome.jsp,在整个会话期间,这个属性一直有效,用户可以在不关闭浏览器且不注销的前提下,重复多次访问welcome.jsp而不需再次登陆验证。如果用户未登录,或关闭浏览器,或注销登陆,则标志session属性无效或会失效,此时如果直接访问welcome.jsp则会提示未登录。原理可参照淘宝网登陆注销及访问规则。
Login.jsp
注意,表单的提交页面为页面本身,如果登陆成功,则将loginState设置为标志属性有效,表示可以访问welcome页。
welcome.jsp:
如果登陆成功,则在整个会话期间(不关闭浏览器,不注销)则session属性loginState一直有效,可以重复多次直接访问welcome页而不用再次登陆验证
logout.jsp:
注销session属性,并跳转至登陆页,此时session属性失效,无法直接访问welcome页
3,判断是否是新用户
一次会话中,如果第一次打开此jsp页面,则显示欢迎新用户光临,否则显示你已经是老用户了
六、application对象
1, application是javax.servlet.ServletContext接口的实例化对象,代表整个Servlet上下文
2, 方法
当然,application也有自己setAttribute(),getAttribute(),removeAttribute()等属性方法
取得虚拟路径名称
在jsp中,有一个方法的功能可以与之完全对应:getServletContext()方法
String url1= getServletContext().getRealPath(“/”)或者String url2=this. getServletContext().getRealPath(“/”)都能取得虚拟目录的绝对路径。现在一般重点使用getServletContext()方法
七、web安全性与config对象
1, 将jsp资源保存在WEB-INF文件夹中是最安全的,但是必须通过映射路径才可以访问
2, 通过config对象可以取得初始化的配置参数
八、pageContext对象
1,pageContext对象是javax.servlet.jsp.PageContext类的实例,主要表示一个jsp页面的上下文,几乎可以操作所有的的内置对象
2,主要方法
跳转、包含、取得配置对象,和四种属性范围对象
跳转的同时,传递参数:
操作内置对象对象:
02.JSP内置对象的更多相关文章
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- jsp 内置对象(五)
1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以 获取用户提交的信息. 当Request对象获取客户提交的汉字字符时,会出现乱码问题,必 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- JSP内置对象-request
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...
- Jsp内置对象及EL表达式的使用
一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...
- Java遇见HTML——JSP篇之JSP内置对象(上)
一.JSP内置对象简介 1.1.内置对象简介 JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象. JSP有九大内置对象: 五大常用对象: out.reque ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- JSP内置对象详解
jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request ...
- JSP内置对象(上)
在JSP中为了简化页面的开发提供了一些内置的对象.这些对象不需要由JSP的编写者通过new关键字实例化,他们都由容器实现和管理,在所有的JSP页面中都可以使用内置对象. JSP中共有9大内置对象: o ...
随机推荐
- express简介
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网 ...
- Android01-布局篇
在Android中,共有五种布局方式,分别是:LinearLayout(线性布局),FrameLayout(帧布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局) ...
- 关于python中的pickle函数
8-7参考阅读 - 读文件.写文件.异常处理.文件保存游戏.pickle数据转成文本的过程又被称为"序列化",即将对象状态转换为可保持或传输的格式的过程.对应的,从序列化的格式中解 ...
- ch2-mysql相关
1 mySql数据库基本 1.1 创建表必须字段 id 1.2 nodeJS数据库连接 根目录下建立 mysql.js 文件代码 var mysql = require('mysql'); var c ...
- SAP 条形码
使用系统生成的条形码 正常的排列;将扫描由左到右.旋转对齐将从上到下扫描90度倒立定线将扫描所180度从右到左底部对齐将从底部到顶部270度扫描 但在实际应用中,条形码的大小不仅与此处有关,也与字符格 ...
- 项目常用Javascript分享,包含常用验证和Cookie操作
function IsEmail(str) { var r = /^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; if (r.test(str)) ...
- IsKeyboardFocused -- 键盘焦点
<Trigger Property="IsKeyboardFocused" Value="true"> <!--<Setter Prop ...
- 自动化双向数据绑定AngularJs---入门
前 言 AngularJS,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为 ...
- visual Studio 无法调试,提示程序跟踪已退出
今天在打码出现了vs无法调试,我在网上查了很久没有发现一个方法. vs点击启动时,出现了一下提示 程序"[12648] *.vshost.exe: 程序跟踪"已退出,返回值为 0 ...
- 起名字好难啊!(初识Django)
这次我们将实现一个简单的登录注册功能,并吧相应的数据写入数据库: 做这件事之前我已经在数据库中新建了两张表(当然一张表也可以用,先注册后登录嘛···) 两张结构很简单的数据表:↓ 接下来就该干正 ...