2017/3/23 (仅供个人查阅)
引言 第一次写博客,虽然大多都是网上转载的一些东西,但我觉得总结起来,比较有助于自己以后工作的查找,通过不断的面试和学习来发现自己的哪方便不足 系统的梳理了一下,文中如有不足或错误 望海涵。
JSP内置对象
------------------------------------------------------------------------
request 请求对象 类型javax.servlet.ServletRequest 作用域 Requestresponse 响应对象 类型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 页面对象 javax.lang.Object 作用域Page
exception 例外对象 javax.lang.Throwable 作用域 Page
---------------------------------------------------------------------------分割线----------------------------------------------------------------------
简述部分适合新手:
out 输出流 javax.servlet.jsp.JspWriter 输出流 作用域为page(页面执行期)
request 请求 javax.servlet.ServlerRequest子类型 封装了WEB浏览器或其他客户端生成的HTTP 请求的细节(参数,属性,头标和数据) 作用域为reuqset
response 响应 javax.servlet.ServletResponse 子类型 封装了返回到HTTP客户端的输出 向页面做种提供设置响应头标和状态码的方式 经常用来设置HTTP标题 添加Cookie 设置响应内容的类型和状态 发送HTTP重定向和编码URL 作用域为page(页面执行期)
pageContext javax.servlet.jsp.PageContext(抽象类) 类型 作用域page(页面执行期) 此对象提供所有四个作用域层次的属性查询和修改能力,它也提供了转发请求到其他资源和包含其他资源的方法:该对象的方法都是抽象方法。
session javax.servlet.http.HttpSession 类型 主要用于跟踪对话 作用域session 会话期 HttpSession是一个类似哈希表的与单一WEB浏览器会话相关的对象 它存在于HTTP请求之间 可以存储任何类型的命名对象
如果不需要在请求之间各位跟踪会话对象 可以通过page指令中制定session="false"
需要记住的是pageContext对象也可以与session.getAttribute(),session.setAttribute()一样的方式取得并设置会话属性
application javax.servlet.ServletContext类型,servlet的环境通过调用getServletConfig().getContext()方法获得
作用域为application(整个程序运行期) 它提供了关于服务器版本 应用级初始化参数和应用内资源绝对路径,注册信息的方式
config: javax.servlet.ServletConfig 作用域为page (页面执行期)
exception:java.lang.Throwable 通过jsp错误页面中的一个catch块已经溢出但没有捕获的java.lang.Throwable的任意实例,
传向了errorPage的URI。作用域为page(页面执行期)
exception只有在page指令中具有isErrorPage="true"时才有效。
page:java.lang.Object类型,指向页面自身的方式。作用域为page(页面执行期)。
request 对象代表来自客户端的请求 例如form表单中填写的信息
常用的方法有
getParameter(String name) 获得表单name成员 单例 或第一个
getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举.
通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值.
最后通过request.getParameter()方法获取表单控件的value值.
Enumeration pNames=request.getParameterNames();
while(pNames.hasMoreElements()){
String name=(String)pNames.nextElement();
String value=request.getParameter(name);
out.print(name + "=" + value);
}
request.getParameterValues("name")方法将获取所有form表单中name属性为"name"的值.该方法返回一个数组.遍历数组就可得到value值.
String values = request.getParameterValues("name");
for(String value : values){
System.out.println(value);
}
例: 获得如checkbox类(名字相同,但值有多个)的数据。
request.getParameterNames()的值是无序排列request.getParameterValues()是按照from表单的控件顺序排列.
作用域分四种,分别为:
page
在当前页面有效(仅用于JSP中)
request
在当前请求中有效
session
在当前会话中有效
application
在所有应用程序中有效
---------------------------------------------------------------------------分割线----------------------------------------------------------------------
response 对象代表对客户端的响应 通过response对象组织发送到客户端
pageContext 对象直译称为 页面上下文对象 代表的是当前页面运行的一些属性.
findAttribute(String name) 查找属性
依次在page,request,session(如果有效的话)和application Scope(范围)查找以name为名的Attribute,找到就返回对象,都找不到返回null。
getAttribute(String name)
在page scope(页面范围)内查找与name相关的属性,找到返回就返回对象,找不到就返回null。
两种的区别是,查找范围不同。
getAttributesScope(String name) 作用域的优先级依次是page,request,session,application
getAttributeNamesInScope 取得所有scope(范围)的属性
项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。
session
对象代表服务器与客户端所建立的会话,
当需要在不同的JSP页面中保留客户信息的情况下使用,
比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,
所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。
判断Cookie是否启用的方法
//1 判断cookie是否启用的方法
function check(){
if(window.navigator.cookieEnabled)
return true;
else{
alert("浏览器配置错误,Cookie不可用!");
return false;}
}
//2
SetCookie('cookie_test','1');
var cookie_test = getCookie('cookie_test');
if( '1' != cookie_test)
{
alert('不支持');
}else
{
alert('支持');
}
function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
{
var Days = 30; //此 cookie 将被保存 30 天
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getCookie(name)//取cookies函数
{
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
}
function delCookie(name)//删除cookie
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
//3
var cookieEnabled=(navigator.cookieEnabled)? true : false
//判断cookie是否开启
//如果浏览器不是ie4+或ns6+
if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){
document.cookie="testcookie"
cookieEnabled=(document.cookie=="testcookie")? true : false
document.cookie="" //erase dummy value
}