详解JSP九个内置对象
【JSP】☆★之详解九个内置对象
在web开发中,为方便开发者,JSP定义了一些由JSP容器实现和管理的内置对象,这些对象可以直接被开发者使用,而不需要再对其进行实例化!本文详解,JSP2.0之后由ServletApi提供的9个内置对象,如下:
| 内置对象名称 | 相对应的类 | 作用域 |
| request | javax.servlet.ServletRequest | request |
| response | javax.servlet.ServletResponse | page |
| pageContext | javax.servlet.pageContext | session |
| session | javax.servlet.HttpSession | page |
| application | javax.servlet.ServletContext | application |
| out | javax.servlet.JspWriter | page |
| config | javax.servlet.ServletConfig | page |
| page | javax.servlet.Object | page |
| exception | javax.servlet.Throwable | page |
由此可见,JSP内置对象作用域范围,分别是:page,request,session,application
介绍一下:
1、page范围:指的是所设置的属性只在当前页面有效,使用pageContext.setAttribute()设置值,page.getAttribute()取值
2、request范围:指的是仅在一次请求的范围内有效request.setAttribute()设置值,request.getAttribute()取值
3、session范围:指的是属性仅在浏览器与服务器进行一次会话时有效,服务器断开之后,就失去作用,一般与用户有关
session.setAttribute()设置值,session.getAttribute()取值
4、application:是指在整个web应用中都有效,直到服务器停止为止,application.setAttribute() 设置值,application.getAttribute()取值,一般与用户无关
第二部分:
1、介绍request对象:
request中主要方法有getAttribute()-获取指定的属性值,getParameter("name")获取请求参数名为name的值如下示例源码:
以requestform.jsp作为提交表单,以requestobject.jsp作为接受对象
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>表单页</title></head><body> <!-- 使用form标签创建表单--> <form action="requestobject2.jsp" method="post"> <p>用户名:<input type="text" name="username"/></p> <p>年龄: <input type="text" name="age"/></p> <input type="submit" value="提交"/> </form></body></html> |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>request object test</title></head><body> <!--获取表单域的值--> <% request.setCharacterEncoding("gb2312"); //中文名时需要设置编码格式 String username=request.getParameter("username"); //获取用户名 String strage=request.getParameter("age"); //获取用户年龄,此时为String类型 int age=Integer.parseInt(strage); //将字符串解析为整数 %> <!--下面输出表单域的值--> 用户名:<%=username%><br> 年龄:<%=age%></body></html> |
(源码2)
2、介绍response对象:
response常用方法有
addHeader(String name,String value)添加HTTP头信息,该Header信息奖杯发送到客户端
addCookie(Cookie cookie)添加cookie对象
setRedirect(url)重定向jsp文件
例如我们将源码2的代码稍微修改一下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>response object test</title></head><body> <!--获取表单域的值--> <% String str=null; str=request.getParameter("username"); if(str==null) {str=""; } byte b[]=str.getBytes("ISO-8859-1"); str=new String(b); if(str.equals("")) { response.sendRedirect("responseform.jsp"); } else { out.println("欢迎您来到本网页!"); out.println(str); } %></body></html> |
(源码3)
意思是说,当输入值不为空时,打印输入的值,为空时,跳转到提交页面!
这里需要说明的是:response实现的重定向和<jsp:forward>最大的区别在于<jsp:forward>智能在本网站内跳转,而response.sendRedirect则可以任意跳转到任何一个地址的页面。
3、介绍out对象:
out对象常用方法有
clear()清楚缓冲区的内容,clearBuffer()清楚缓冲区的内容同时将数据输出到客户端
getBufferSize()获取缓冲区的大小
最常见的是直接打印输出内容
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>out object test</title></head><body> <!-- 使用out对象输出--> <% out.print("Hello World"); //不换行 out.println("Hello World"); //换行 %></body></html> |
第二种使用out对象获取缓冲区的大小
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>out object test</title></head><body> <!-- 使用out获取缓冲区信息--> <% int allbuf=out.getBufferSize(); //获取缓冲区的大小 int remainbuf=out.getRemaining(); //获取剩余缓冲区的大小 int usedbuf=allbuf-remainbuf; //已用缓冲区 out.println("已用缓冲区大小为:"+usedbuf); //输出已用缓冲区大小 %></body></html> |
4、介绍session对象:
session是会话对象主要是用来记录每个客户端访问状态,这个对象使用十分频繁!例如,我前面博文介绍的可以限制用户单号登录,防止表单重复提交都是用session来完成!
常用方法:
setAttribute(String name,Object value)设置session范围内的name属性的属性值为value,并将其存储在session的对象中
getSession()获取session范围内的name属性的值
boolean isNew 是否存有新的session
removerAttribute(String name)删除session值
下面是hi一个简单的例子:
login.jsp,check.jsp,logout.jsp
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ page contentType="text/html;charset=GB2312" %><% String name=""; //判断是否为新的session if(!session.isNew()){ name=(String)session.getAttribute("username"); if(name==null) name=""; }%><p>欢迎光临!</p><p>Session ID:<%=session.getId()%></p> <html><head> <title>用户登录</title></head><body> <!-- 使用form标签创建表单--> <form action="check.jsp" method="post"> <p>用户名:<input type="text" name="username" value=<%=name%>></p> <input type="submit" value="提交"/> </form></body></html> |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>进入空间</title></head><body><% String name=null; name=request.getParameter("username"); if(name!=null) session.setAttribute("username",name);%><a href="login.jsp">登录</a> <a href="logout.jsp">注销</a> <p>当前用户为:<%=name %></p><p>中共有10条未读消息</p></body></html> |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>注销页面</title></head><body><% String name=(String)session.getAttribute("username"); session.invalidate();%><%=name %>,再见!<p><p><a href="login.jsp">重新登录</a></body></html> |
5、介绍application对象:
application对象主要用于获取和设置Servlet的相关信息,因为它的生命周期是从服务器创建知道关闭为止,对象将会一直存在
主要方法setAttribute(String name ,Object value)Object getAttribute(String name)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>application object test</title></head><body><% String count=(String)application.getAttribute("count"); if(count==null) { count="1"; } else { count=Integer.parseInt(count)+1+""; } application.setAttribute("count",count);%><%="<h1>到目前为止,访问该网站的人数为:"+count+"</h1><br>" %></body></html> |
6、介绍pageContext对象
pageContext是一个特殊的属性,因为不仅仅可以设置page范围的属性,还可以设置其他范围的属性,通过pageContext可以访问本页面的所有其他对象,如request,response,out,而因为request,response本身已提供给我们,所以pageContext使用并不多
详细获取方法如下代码,
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<%@ page contentType="text/html;charset=GB2312" %><html><head> <title>pageContext object test</title></head><body><% pageContext.setAttribute("attributename","page_scope"); //设置page范围内的属性 request.setAttribute("attributename","request_scope"); //设置request范围内的属性 session.setAttribute("attributename","session_scope"); //设置session范围内的属性 application.setAttribute("attributename","application_scope"); //设置application范围内的属性 String str1=(String)pageContext.getAttribute("attributename",pageContext.PAGE_SCOPE); String str2=(String)pageContext.getAttribute("attributename",pageContext.REQUEST_SCOPE); String str3=(String)pageContext.getAttribute("attributename",pageContext.SESSION_SCOPE); String str4=(String)pageContext.getAttribute("attributename",pageContext.APPLICATION_SCOPE);%>attributename在不同范围的属性值<br><%="page范围:"+str1 %><br><%="request范围:"+str2 %><br><%="session范围:"+str3 %><br><%="application范围:"+str4 %><br></body></html> |
7、介绍page对象:
page对象是指的是JSP页面的本身,她是Object对象的类,通过page对象可以调用到Servlet类定义的方法,page对象在开发中并不经常用到,这里就不讲解了!
8、介绍config对象:
config对象是ServletConfig类的一个实例,在Servlet初始化时,可以通过config向Servlet传递信息,在JSP开发中config使用并不多,只有需要重新重载Servlet的init()方法时才会用到config方法
其中有一个方法使用较多,ServletContext.getServletContext获得一个包含服务器相关信息的ServlletContext对象
9、介绍exception对象:
主要是处理页面异常和错误,实际开发中此对象使用也不多,让用户直接看到错误,是很不好的吧?
所以一般都是调试项目会使用
使用这个对象必须将isErrorPage设置为true
如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<%@ page contentType="text/html;charset=GB2312" errorPage="exceptionobject.jsp"%><html><head> <title>pageContext object test</title></head><body> 发生错误的位置!<br> <% int a=5; int b=0; %> 输出结果=<%=(a/b)%></body></html> |
打印错误代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ page contentType="text/html;charset=GB2312" isErrorPage="true"%><%@ page import="java.io.PrintStream"%><html><head> <title>exception object test</title></head><body> <%=exception.getMessage() %><br> <% exception.printStackTrace(new java.io.PrintWriter(out)); %></body></html> |
综上总结在实际开发中,我们经常使用的就是request,response,session,out,这四个!也是我们必须掌握的,以上代码经本人亲测,完全正确,文中有遗漏的地方欢迎举手!也算是自己一个小总结!
详解JSP九个内置对象的更多相关文章
- jsp九个内置对象、四个域对象及Servlet的三大域对象
一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...
- JSP九个内置对象及指令、动作标签
一.JSP九大内置对象 (一)JSP中无需创建就可以使用的9个对象 输入输出对象 1.response(HttpServletResponse):处理JSP生成的响应,然后将响应结果发送给客户端.是s ...
- JSP九个内置对象
JSP内置对象有: 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例. 2.r ...
- jsp jsp九个内置对象
每个JSP页面在第一次被访问的时候,WEB容器都会把请求交给JSP引擎(即一个JAVA)程序.JSP引擎先将JSP翻译成一个_jspServlet实质也是一次servlet,然后按照 Servl ...
- JSP中的内置对象和Struts中的Web资源的详解
JSP中的内置对象有如下几种: request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest, 获得的Request对象的方法: ...
- java web学习总结(二十五) -------------------JSP中的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- JavaWeb---总结(十七)JSP中的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- JavaWeb学习总结(十七)——JSP中的九个内置对象
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- javaWeb学习总结(8)- JSP中的九个内置对象(4)
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
随机推荐
- 基本类型转换成NSNumber类型
int i=100; float f=2.34; NSNumber *n1=[NSNumber numberWithInt:i]; NSNumber *n2=[NSNumber numberWithF ...
- Git 学习笔记(二)
看完了 Git 的介绍后,也是时候动手尝试一下了,不过我们需要先安装好它.它有许多种安装方式,主要分两种,一种是通过编译源代码来安装:另一种是使用为特定平台预编译好的安装包,这里就不做赘述了. 配置 ...
- Eclipse插件Lambok,实现自动生成Java代码
1.下载Lombok.jar http://projectlombok.googlecode.com/files/lombok.jar 2.运行Lombok.jar: java -jar D:\00 ...
- js-apply call bind 浅析
call 1.第一个参数指定了this,第二个参数传给this,也就是call前面的函数,作为他的参数第三个参数也一样 指定了this,就是执行环境,greet的this在i里面找 function ...
- 将百度百科的机器学习词条中的一段关于机器学习的demo改用Java写了一遍
这是引用的百度百科中关于机器学习的一段示例,讲述了通过环境影响来进行学习的例子. 下面是代码: import java.io.BufferedReader; import java.io.IOExce ...
- firstChild与firstElementChild
相同点: 都是获取父元素下的第一个节点对象 不同点: firstChild: IE6.7.8 第一个元素节点; 非IE6.7.8:返回第一个元素节点或文本节点 firstElementChild: I ...
- Linux 搭建互信后,仍需要密码验证
修改ssh配置文件: vi /etc/ssh/sshd_config PermitRootLogin no 注释掉
- web开发必看:你的网站支持https吗?
如果有一项技术可以让网站的访问速度更快.更安全.并且seo权重提升(百度除外),而且程序员不需要改代码就可以全站使用,最重要的是,不需要额外花钱,那有这么好的事情吗? HTTP通信协议是全球万维网ww ...
- JAVA 静态内部类--转自http://bbs.csdn.net/topics/350021609
内部类其实并不是非要声明成static的..主要还是要看实际情况决定..静态和非静态有不同的作用.. 引用一篇文章给楼主参考下吧. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的( ...
- 使用highcharts动态绘制折线图——so easy
之前学习highcharts发现网上的教程大部分是对highcharts数据的注释,如何动态绘制数据大部分一笔带过,让那些初涉开发的小白云里雾里,所以我就写了一篇这样的博客. <html> ...