zoukankan      html  css  js  c++  java
  • JSP技术(二)

    参考网址:https://blog.csdn.net/king_cannon_fodder/article/details/79835463

    (1)JSP隐式对象(9个内置对象)

    Servlet容器会传递几个对象给它运行的Servlet。例如,可以通过Servlet的service方法拿到HttpServletRequest和HttpServletResponse对象,以及可以通过init方法访问到ServletConfig对象。此外,可以通过调用HttpServletRequest对象的getSession方法访问到HttpSession对象。

    在JSP中,可以通过使用隐式对象来访问上述对象。

    对象 类型
    request javax.servlet.http.HttpServletRequest
    response javax.servlet.http.HttpServletResponse
    out javax.servlet.jsp.JspWriter
    session javax.servlet.http.HttpSession
    application javax.servlet.ServletContext
    config javax.servlet.ServletConfig
    pageContext javax.servlet.jsp.PageContext
    page javax.servlet.jsp.HttpJspPage
    exception java.lang.Throwable

    在JSP中无需创建就可以使用的9个对象,它们是:

    l  out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;

    l  config(ServletConfig):对应“真身”中的ServletConfig;

    l  page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;

    l  pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;

    l  exception(Throwable):只有在错误页面中可以使用这个对象;

    l  request(HttpServletRequest):即HttpServletRequest类的对象;

    l  response(HttpServletResponse):即HttpServletResponse类的对象;

    l  application(ServletContext):即ServletContext类的对象;

    l  session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page                                             session=”false”%>,说明这个页面不能使用session。

    (2)request、application、session对象

    具体介绍一下这三个对象的使用

    例如,从HttpServletRequest对象中返回username参数值:

    <%
         String userName=request.getParameter("userName");
    %>

    index.jsp

    <body>
    <%
       request.setAttribute("p1", "request");
       session.setAttribute("p2", "session");
       application.setAttribute("p3", "application");
       request.getRequestDispatcher("/2.jsp").forward(request, response);
    %>
     //这里使用El表达式取值 
    ${requestScope.p1}
    ${session.p2}
    ${application.p3}
    </body>
    

    2.jsp

    <body>
    <%
        out.print(request.getAttribute("p1"));
        out.println();
        out.print(session.getAttribute("p2"));
        out.println();
        out.print(application.getAttribute("p3"));
        out.println();
    %>
    </body>
    

    运行效果:

    index.jsp

    2.jsp

    可以看到,application和session都可以取到index.jsp页面传过来的值,为什么request取不到值?

    因为request对象既是jsp的内置对象,也是jsp的作用域之一。

    此处遇到的错误原因跟request的作用域有关。在index.jsp中使用setAttribute,在当前页面index.jsp 里可以使用getAttribute来取到其值。但在2.jsp中就不行了,因为request过期了。

    若想让参数在整个项目过程中前后可用,应将参数存在会话(Session)里。

    部分隐式对象的使用实例:

    <body>
        <%
        for(Enumeration<String> e=request.getHeaderNames();e.hasMoreElements();)
        {
        String header=e.nextElement();
        out.println(header+":"+request.getHeader(header)+"<br/>");
        }
        
        out.println("Buffer size:"+response.getBufferSize()+"<br/>");
        out.println("Session id:"+session.getId()+"<br/>");
        out.println("Servlet name:"+config.getServletName()+"<br/>");
        out.println("Servle info:"+application.getServerInfo());
         %>
     </body>
    

      实例运行效果:

    (3)PageContext

    pageContext用于javax.servlet.jsp.PageContext。它提供了有用的上下文信息,并通过其自说明方法来访问各种Servlet相关对象。如getRequest、getResponse、getServletContext、getServletConfig和getSession。我们也可以直接使用隐式对象来访问request、response、session、application。

    PageContext也提供了一组用于获取和设置属性的方法,即getAttribute和setAttribute方法。属性的值可以存储在4个范围之一:页面、请求、会话和应用程序。最小的范围是页面范围,存储的属性只可以本页面使用。请求范围是指当前的ServletRequest中。会话范围指当前的HttpSession中。应用程序范围指应用的ServletContext中。

    PageContext的setAttribute方法签名如下:

    public abstract void setAttribute(java.lang.String name,java.lang.Object value,int scope)

    scope的取值范围为PageContext对象的最终静态int值:PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE和APPLICATION_SCOPE。

    pageContext.setAttribute("x", "X"); 

    pageContext.setAttribute("x", "XX",PageContext.REQUEST_SCOPE);

    pageContext.setAttribute("x", "XXX",PageContext.SESSION_SCOPE);

    pageContext.setAttribute("x", "XXXX", PageContext.APPLICATION_SCOPE); 

    void setAttribute(String name, Object value, int scope):在指定范围中添加数据;

    Object getAttribute(String name, int scope):获取指定范围的数据;

    void removeAttribute(String name, int scope):移除指定范围的数据

    实例:

    <body>
       <%
       pageContext.setAttribute("p1", "pp",PageContext.PAGE_SCOPE);
       pageContext.setAttribute("p2", "pp", PageContext.REQUEST_SCOPE);
       pageContext.setAttribute("p3", "pp", PageContext.APPLICATION_SCOPE);
       pageContext.setAttribute("p4","pp",PageContext.SESSION_SCOPE);
       String p1=(String)pageContext.getAttribute("p1");
       out.println(p1);
       String str1=(String)pageContext.getRequest().getAttribute("p2");
       out.println(str1);
       String str2=(String)pageContext.getServletContext().getAttribute("p3");
       out.println(str2);
       String str3=(String)pageContext.getSession().getAttribute("p4");
       out.println(str3);
       %>
    </body> 

    运行效果:

  • 相关阅读:
    在请求中使用XML Publisher生成文件报错
    Oracle Sourcing Implementation and Administration Guide(转)
    API To Import Negotiations(转)
    使用POI动态更新导出的EXCEL模板中的列
    使用POI设置导出的EXCEL锁定指定的单元格
    QML获取随机颜色
    Access导出excel
    Component
    QML中打印
    Qt Quick Dialogs
  • 原文地址:https://www.cnblogs.com/longlyseul/p/9956577.html
Copyright © 2011-2022 走看看