对象 | 类型 | 有效范围 |
---|---|---|
request(输入和输出对象) | javax.servlet.http.HttpServletRequset | 请求范围 |
response(输入和输出对象) | javax.servlet.http.HttpServletResponse | 页面范围 |
out(输入和输出对象) | javax.servlet.jsp.JspWriter | 页面范围 |
pageContext(作用域对象) | javax.servlet.jsp.PageContext | 页面范围 |
session(作用域对象) | javax.servlet.http.HttpSession | 会话范围 |
application(作用域对象) | javax.servlet.ServletContext | 应用程序范围 |
page(servlet对象) | javax.servlet.jsp.HttpJspPage | 页面范围 |
config(servlet对象) | javax.servlet.ServletConfig | 页面范围 |
exception(错误对象) | javax.lang.Throwable | 只在错误页面有效 |
3.2.1 request对象
封装了用户提交的庆区信息,使用方式等同于在Servlet中的使用方式
主要方法:
String getParamter(String name);
//返回name指定参数的参数值
String name = request.getParamter("name");
void setCharacterEncoding(String encoding);
//设置请求的字符的编码方式
request.setCharacterEncoding("utf-8");
RequestDispatcher getRequestDidpatcher(String url);
//获得请求分发器对象
request.getRequestDipatcher("forward.jsp").forward(request,respone);
示例:(example1.jsp通过表单想tree.jsp提交信息;tree.jsp通过request对象获得表单提交的信息,包括text的值以及按钮的值)
resquest.jsp:
req_tree.jsp:
获取文本框提交的信息:
<%String textContent = request.getParameter("boy");%>
<%=textContent %>
获取按钮的名字:
<%String buttonName = request.getParameter("submit"); %>
<%=buttonName %>
3.2.2 response对象:对客户端的请求做出响应
示例:(在example2.jsp单击yes选择将当前页面保存为一个word文档是,JSP页面动态的改变contentType属性值为application/msword;客户端的浏览器会提示用户用word格式显示页面)
response.jsp:
我正在学习response对象
setContentType方法
将当前页面保存为word文档吗
<%String str = request.getParameter("submit");
if(str==null){
str="";
}
if(str.equals("yes")){
response.setContentType("application/msword;charset=UTF-8");
}
%>
3.2.3 session对象
1.session对象的ID:
示例:(客户在服务器的三个页面之间进行连接,只要不关闭浏览器,三个页面的session对象完全相同;从session.jsp到sess_tom.jsp再连接sess_jerry.jsp)
session.jsp:
<%String s = session.getId(); %>
您的session对象的id是:
<%=s %>
输入您的姓名连接到sess_tom.jsp
sess_tom.jsp:
我是sess_tom页面
<%String s =session.getId(); %>
您在sess_tom页面中的session对象的id是:
<%=s %>
单击超链接,连接到sess_jerry页面
欢迎来到sess_jerry
sess_jerry.jsp:
我是sess_jerry页面
<%String s =session.getId(); %>
您在sess_jerry页面中的session对象的id是:
<%=s %>
单击超链接,连接到session页面
欢迎来到session
2.session对象与URL重写
实现URL重写:
String str = response.encodeRedirectURL("jerry.jsp")
<%=str%>
示例:(t如果客户不支持Cookie,则可在下面的例子中将上例中的页面实行URL重写)
session.jsp:
您的session对象的id是:
<%
String s = session.getId();
String str = response.encodeRedirectURL("sess_tom.jsp");
%>
您的session对象的id是:
<%=s %>
您向sess_tom.jsp写入的信息是:
<%=str %>
sess_tom.jsp:
我是sess_tom页面
<%
String s =session.getId();
String str = response.encodeRedirectURL("sess_jerry.jsp");
%>
您在sess_tom页面中的session对象的id是:
<%=s %>
您向sess_jerry页面写入的信息是:
<%=str %>
单击超链接,连接到jerry
欢迎来到sess_jerry
sess_jerry.jsp:
我是sess_jerry页面
<%
String s =session.getId();
String str = response.encodeRedirectURL("session.jsp");
%>
您在sess_jerry页面中的session对象的id是:
<%=s %>
您向session.jsp写入的信息是:
<%=str %>
单击超链接,连接到session页面
欢迎来到session
3.2.4 application对象:用于记载所有访问该应用程序的客户端信息
常用方法:
(1)将参数object指定的对象obj添加到application,并未添加的对象指定了一个索引关键词
public void setAtttibue(String key,Object obj)
(2)获取application对象中含有关键字是key的对象
public Object getAttibue(String key)
(3)产生一个枚举对象,该枚举对象可以使用nextElements遍历application对象所含有的全部对象
public Enumeration getAttributeNames()
(4)从当前application对象中删除关键字是key的对象
public void removeAttribue(String key)
(5)获取Servlet编译器的当前版本信息
public String getServletInfo()
3.2.5 out、page、pageContext对象
(1)out对象:是对javax.servlet.jsp.JspWriter的实例,用于发送到响应中
代码实例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+
":"+request.getServerPort()+path+"/";
%>
out隐式对象演示
<%out.print("演示out隐式对象方法的使用"); %>
<%
int getBufferSize=out.getBufferSize();
int getRemaining = out.getRemaining();
out.print("当前缓冲区的大小:"+getBufferSize+"
");
out.print("当前可使用缓冲区的大小:"+getRemaining+"
");
/* out.clear();
out.close(); */
%>
(2)page对象:表示当前一个JSP页面
(3)pageContext对象:javax.servlet.jsp.pageContext的实例;代表JSP页面的运行环境;不仅封装了对其他八大隐式对象的引用,自身还是一个作用域
功能:可以存取其他隐式对象;可以对其他四大作用域空间进行数据的存取;进行页面的转发和包含。
代码实例:
<%
pageContext.setAttribute("name","request_mrchi",pageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", "session_mrchi",pageContext.SESSION_SCOPE);
%>
显示request作用域的值
<%=pageContext.getAttribute("name", pageContext.REQUEST_SCOPE) %>
显示session作用域的值
<%=pageContext.getAttribute("name", pageContext.SESSION_SCOPE) %>
pageContext的findAttribute方法从小到大依次访问
<%=pageContext.findAttribute("name") %>
1.应用程序作用域(application):所有属性被访问者共享
2.会话作用域(session):属性被同一会话的不同请求共享
3.请求作用域(request):属性被页面相同的请求的服务共享
4.页面作用域(page):属性仅在一个页面中共享
代码实例:(分别给四个作用域对象设置计数器属性)
scope.jsp:
<%
if(application.getAttribute("applicationCount")==null){
application.setAttribute("applicationCount", 1);
}else{
Integer applicationCount = (Integer)application.getAttribute("applicationCount");
applicationCount++;
application.setAttribute("applicationCount", applicationCount);
}
if(session.getAttribute("sessionCount")==null){
session.setAttribute("sessionCount", 1);
Integer sessionCount = (Integer)session.getAttribute("sessionCount");
sessionCount++;
session.setAttribute("sessionCount", sessionCount);
}
%>
<%
if(request.getAttribute("requestCount")==null){
request.setAttribute("requestCount", 1);
}else{
Integer requestCount = (Integer)request.getAttribute("requestCount");
requestCount++;
request.setAttribute("requestCount", requestCount);
}%>
<%
if(pageContext.getAttribute("pageCount")==null){
pageContext.setAttribute("pageCount", 1);
}else{
Integer pageCount = (Integer)pageContext.getAttribute("pageCount");
pageCount++;
pageContext.setAttribute("pageCount", pageCount);
}
%>
applicationCount=<%=application.getAttribute("applicationCount") %>
sessionCount=<%=session.getAttribute("sessionCount") %>
requestCount=<%=request.getAttribute("requestCount") %>
pageCount=<%=pageContext.getAttribute("pageCount") %>