jsp内置对象分类
将这9个对象分为如下4类
1、与servlet有关的内置对象 page 和config两个对象
2、与Input/Output有关的内置对象 out、request、response
3、与Context有关的内置对象 session、application、pageContext
4、与Error有关的内置对象 expection
jsp属性保存范围
在jsp中可以通过setAttribute()和getAttribute()这两个方法来设置和取得属性,从而实现数据的共享。在jsp中提供了4种属性保存的范围,分别为page、request、session、application
page范围
设置的属性在当前页面有效,通过pageContext的setAttribute()方法来设置,并通过getAttribute()方法来取得属性
<% pageContext.setAttribute("name","James");%><br> <% out.print(pageContext.getAttribute("name")); %>注意:如果给setAttribute()这个方法传一个参数的话,取的时候会得到一个null
所谓request范围,就是在一次请求的范围有效。如果页面从一个页面跳转到另一个页面,那么该属性就失效了
。这里所说的跳转是客户端的跳转,比如客户端单击超链接跳转到其他页面,或者通过浏览器地址浏览其他的页面。如果服务器端使用<jsp:forward>,则该属性仍然有效。通过使用request的setAttribute()方法来设置属性,并通过request的getAttribute()方法来取得属性
session范围
是指客户端的浏览器与服务器一次会话范围,如果和服务器断开连接,那么这个属性也就失效了,通过session的setAttribute()方法来设置属性并通过session的getAttribute()方法来取得属性
index.jsp
<% session.setAttribute("name","James");%><br> <a href="index2.jsp">点击会跳转到index2</a>index2.jsp
<% out.println(session.getAttribute("name")); %>无论是客户端的跳转还是服务器端的跳转,都能过够获得session范围的属性,但是如果重新打开浏览器,就不能获得session的范围属性了
application范围
所谓application范围,也就是整个服务器端的范围,知道服务器停止以后才会失效,通过application的setAttribute()方法来设置属性,并通过application的getAttribute()方法来取得属性
<% application.setAttribute("name","James");%><br> <a href="index2.jsp">点击会跳转到index2</a>取得属性
<% out.println(application.getAttribute("name")); %>移除属性
只需调用响应对象的removeAttribute()方法就可以移除指定的属性
<% pageContext.setAttribute("name","James"); pageContext.setAttribute("sex","男"); pageContext.setAttribute("age","24"); %><br> <% pageContext.removeAttribute("sex"); %> <% out.println(pageContext.getAttribute("name")); out.println(pageContext.getAttribute("sex")); out.println(pageContext.getAttribute("age")); %>会输出 james null 24
Request对象不但可以用来设置和取得request范围,还可以用来获得客户端的请求参数、请求的来源、表头、cookies等
1、获得请求参数的方法
<form action="index2.jsp"> 用户名:<input type="text" name="username"> <input type="submit" value="提交"> </form>
<% out.println(request.getParameter("username")); %>要解决乱码只需通过jsp对象的setCharacterEncoding()方法来设置参数的编码格式,同时必须为表单指定提交的方式
2、获得所有参数的名字
<form action="index2.jsp" method="post"> 用户名:<input type="text" name="username"> 密码:<input type="text" name="userpas"> <input type="submit" value="提交"> </form>取得所有参数
<%request.setCharacterEncoding("gb2312"); %> <% Enumeration b=request.getParameterNames();%> <% while(b.hasMoreElements()){ out.println(b.nextElement()); } %>3、获得封装所有参数的map
<form action="index2.jsp" method="post"> 用户名:<input type="text" name="username"> 密码:<input type="text" name="userpas"> 喜欢的运动:<input type="checkbox" name="sport" value="乒乓球">乒乓球 <input type="checkbox" name="sport" value="羽毛球">羽毛球 <input type="checkbox" name="sport" value="足球">足球 <input type="submit" value="提交"> </form>获取属性
<% Map mm=request.getParameterMap(); String[] struser=(String[])mm.get("username"); out.println(struser[0]); %>request对象的其他方法
Response对象
response对象用来个客户端传送输出信息。response对象包含的方法
1、实现页面跳转
可以通过response对象的sendRedirect()方法设置页面重定向,从而实现页面跳转。这种跳转将会改变浏览器的url地址
<% response.sendRedirect("index2.jsp");%>
页面会直接跳到index2.jsp而且浏览器的地址也会变
2、实现页面自动刷新
实现的是每个一秒页面刷新一次
<% out.print(a++); response.addIntHeader("Refresh",1); %>3、实现页面自动跳转
实现的是隔了10秒之后页面自动跳转到百度首页
<span style="font-size:24px;"> <% response.setHeader("Refresh","10;URL=http://www.baidu.com"); %></span>
1、使用out对象求得缓冲区使用大小
通过out对象的getBufferSize()方法可以获得缓冲区的大小
<% int all=out.getBufferSize(); //获得缓冲区的大小 int remain=out.getRemaining(); //获得剩余缓冲区的大小 int use=all-remain; out.print(use); %>Session对象
用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期超时或者被认为释放掉为止
<% session.setMaxInactiveInterval(60*2); //设置session的生命周期为120秒 out.print(session.getMaxInactiveInterval()); //获取session的生命周期 %>2、获得session的其他信息
<% long createTime=session.getCreationTime();//获得session生成的时间 out.println(createTime); String id=session.getId(); //获取session的id out.println(id); %>Application对象
用来取得和设置sevlet的相关信息。application对象的生命周期是从服务器启动产生直到服务器关闭
<% pageContext.setAttribute("name","page_james");//设置page范围name属性 request.setAttribute("name","request_james");//设置request范围name属性 session.setAttribute("name","session_james");//设置session范围name属性 application.setAttribute("name","application_james");//设置session范围name属性 %> <% String pageStr=(String)pageContext.getAttribute("name",pageContext.PAGE_SCOPE); String requestStr=(String)pageContext.getAttribute("name",pageContext.REQUEST_SCOPE); String sessionStr=(String)pageContext.getAttribute("name",pageContext.SESSION_SCOPE); String applicationStr=(String)pageContext.getAttribute("name",pageContext.APPLICATION_SCOPE); %> <%="page范围:name属性值"+pageStr %><br> <%="request范围 name属性"+requestStr %><br> <%="session范围 name属性" +sessionStr%><br> <%="application name属性" +applicationStr%>config 对象