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,主要方法
跳转、包含、取得配置对象,和四种属性范围对象
跳转的同时,传递参数:
操作内置对象对象: