JSP的隐式对象

隐式对象:在JSP页面可以直接使用的Java对象

3.1 常见JSP隐式对象的变量名及类型

对象 类型 有效范围
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 隐式对象的含义及应用

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") %>

3. 四大作用域比较(从高到低)

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") %>

你可能感兴趣的:(jsp)