zoukankan      html  css  js  c++  java
  • 4.JSP内置对象

      JSP内置对象,JSP提供了由容器实现和管理的内置对象,也可以称之为隐含对象,这些内置对象不需要通过
    JSP页面编写来实例化,在所有的JSP页面中都可以直接使用,它起到了简化页面的作用。
      在JSP中一共预先定义了9个这样的对象,分别为request、response、session、applicition、out、
    pageContext、config、page和exception。
        
        request对象
            request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式
    和请求参数等。通过request对象提供的相应方法可以处理客户端浏览器提交的HTTP请求中的各项参数。
        1.访问请求参数
            当通过超链接的形式发送请求时,可以为该请求传递参数,这可以在超链接后加“?”来实现。(注意这
        个问号为英文半角符号)。
            例1:
                <a herf="delete.jsp?id=1&name="user"">删除</a>
            说明:如果同时指定多个参数,参数之间用符号“&”分隔。

            例2:在delete.jsp页面,可以提供request对象的getParameter()方法获取传递的参数值
                    request.getParameter("id");
            说明:在使用request.getParameter()方法获取传递的参数时,如果指定的参数不存在,将返回null,
            如果指定了参数名,但未指定参数值,将返回空字符串("")。
     
      例3:index.jsp向deal.jsp传参数
        index.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Index</title>
        </head>
        <body>
            <a href="deal.jsp?id=1&&user=">处理页</a>
        </body>
    </html>

        deal.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Deal</title>
        </head>
        <body>
            <%
                String id = request.getParameter("id");
                String user = request.getParameter("user");
                String pwd = request.getParameter("pwd");
            %>
            id值为:<%=id %> <br>
            user值为:<%=user %> <br>
            pwd值为:<%=pwd %>
        </body>
    </html>

      结果:    

        

        2.在作用域中管理属性

         在进行请求转发时,需要把一些数据传递到转发后的页面进行处理。这时,就需要request对象的
        setAttribute()方法将数据保存到request范围内的变量中。
            语法格式:
                request.setAttribute(String name,Object object);
            参数说明:
                name:  表示变量名,为String类型,在转发后的页面取数据时,通过这个变量名来获取数据;
                object:用于指定需要在request范围内传递的数据,为Object类型;
            将数据保存到request范围内的变量中后,可以通过request对象的getAttribute()方法获取改变量的
        值,语法格式如下:
                request.getAttribute(String name);
            例1:
        index.jsp
        
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Index</title>
        </head>
        <body>
            <%
                try{
                    int money = 100;
                    int number = 0;
                    request.setAttribute("result",money/number);
                }catch(Exception e){
                    request.setAttribute("result", "页面产生错误!");
                }
            %>
            <jsp:forward page="deal.jsp"/>
        </body>
    </html>

         deal.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Deal</title>
        </head>
        <body>
            <%String message = request.getAttribute("result").toString();%>
            <%=message %>
        </body>
    </html>
    3.获取cookie
            在Web中cookie的意思的小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以
        标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某
        个指定目录内。
            cookie.getCookie()可获取所有cookie对象的集合;
            cookie.getName()可以获得指定名称的cookie;
            cookie.getValue()可获得cookie对象的值;
            response.addCookie()将一个cookie对象发送到客户端;
            在向cookie中保存信息时,如果包含中文,则需要调用java.net.URLEncoder类的encode()方法将要保
        存到cookie中的信息进行编码;在读取cookie的内容时,应用java.net.URLDecoder类中的decode()方法进
        行解码。
            例1:通过cookie保存并读取用户登录信息。
        index.jsp
    <%@page import="java.net.URLDecoder"%>
    <%@page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Index</title>
        </head>
        <body>
            <%
                Cookie[] cookies = request.getCookies();
                String user = "";
                String date = "";
                if (cookies != null) {
                    for (int i = 0; i < cookies.length; i++)
                        if (cookies[i].getName().equals("myCookie")){
                            String url = cookies[i].getValue().split("#")[0];
                            user = URLDecoder.decode(url,"UTF-8");
                            date = cookies[i].getValue().split("#")[1];
                        }
                }
                if ("".equals(user) && "".equals(date)) {
            %>
                欢迎光临!
                <form action="deal.jsp" method="post">
                    输入姓名:<input name="user" type="text" value="">
                    <input type="submit" value="确定">
                </form>
            <%
                }else{
            %>
                欢迎<strong><%=user %></strong>,注册时间为:<%=date %>
            <%
                }
            %>
        </body>
    </html>

        deal.jsp

    <%@page import="java.util.Date"%>
    <%@page import="java.net.URLEncoder"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Deal</title>
        </head>
        <body>
            <%
                request.setCharacterEncoding("UTF-8");
                String user = URLEncoder.encode(request.getParameter("user"), "UTF-8");
                //这里URLEncoder会出现解析错误,重写为java.net.URLEncoder.encode()后错误消失
                String s = user+'#'+new java.util.Date().toLocaleString();
                Cookie cookie = new Cookie("myCookie",s.trim().replaceAll(" ",""));
                cookie.setMaxAge(60*60*24*30);
                response.addCookie(cookie);
        //出现错误java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
        //根本问题cookie中不接受非法字符,非法字符,如堆栈中所述,[32],可以查询32对应的ASCII码,如此处是:空格。
        //解决方法如上17行代码所示,去掉空格
            %>
            <script type="text/javascript">window.location.href="index.jsp"</script>
            
        </body>
    </html>

     4.获取客户端信息

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Index</title>
        </head>
        <body>
            获取客户端信息
            <!-- getHeader(String)获得HTTP协议定义的文件头信息 -->
            <br>获得Http协议定义的 文件头信息Host的值:<%=request.getHeader("host") %>
            <br>获得Http协议定义的 文件头信息User-Agent的值:<%=request.getHeader("user-agent") %>
            <br>获得Http协议定义的 文件头信息accept-language的值:<%=request.getHeader("accept-language") %>
            
            <!-- getHeaders(String)返回指定名字的request Header的所有值,其结果是一个枚举类型 -->
            <!-- getHeadersNames()返回所有request Header的名字,结果也是一个枚举实例 -->
            
            <!-- getMethod()获得客户端向服务器传送数据的方法 -->
            <br>客户提交信息的方式:<%=request.getMethod() %>
            
            <!-- getProtocol()获得客户端向服务器端传送数据所依据的协议名称 -->
            <br>使用的协议:<%=request.getProtocol() %>
            
            <!-- getRequestURI()获得发出请求字符串的客户端的地址,不包括请求的参数 -->
            <br>获取发出请求字符串的客户端地址:<%=request.getRequestURI() %>
            <!-- getRequestURL()获得发出请求字符串的客户端的地址 -->
            <br>获取发出请求字符串的客户端地址:<%=request.getRequestURL() %>
            
            <!-- getRealPath()返回当前请求文件的绝对路径 (过时了)-->
            <br>获得请求文件的绝对路径:<%=request.getRealPath("index.jsp") %>
            
            <!-- getRemoteAddr()获取客户端的IP地址 -->
            <br>获取提交数据的客户端的IP地址:<%=request.getRemoteAddr() %>
            
            <!-- getRemoteHost()获取客户端的主机名 -->
            <br>获取客户端的主机名:<%=request.getRemoteHost() %>
            
            <!-- getServerName()获取服务器的名字 -->
            <br>获取服务器的名称:<%=request.getServerName() %>
            
            <!-- getServerPort()获取服务器的端口号 -->
            <br>获取服务器的端口号:<%=request.getServerPort() %>
            
            <!-- getServletPath()获取客户端所请求的脚本文件的文件路径 -->
            <br>获取客户端所请求的脚本文件的文件路径:<%=request.getServletPath() %>
        </body>
    </html>

    结果显示:

    5.页面信息国际化
            浏览器可以通过accept-language的HTTP报头向Web服务器指明它所使用的本地语言。request对象中的
        getLocale()和getLocales()方法允许开发人员获得此信息,获取的信息属于java.util.Locale类型。
        java.util.Locale类型的对象封装了一个国家或地区所使用的语言。
    <%
        java.util.Locale locale=request.getLocale();
        String str="";
        if (locale.equals(java.util.Locale.US))
            str="Welcome to my web!";
        if (locale.equals(java.util.Locale.CHINA))
            str="欢迎访问我的网站!";
    %>
    <%=str %>
    response对象
            response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应
        客户端的请求。请求的数据可以是各种类型,甚至是文件。request对象在JSP页面内有效。
        1.重定向页面
            使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址
        重定向到不同的主机,这一点与转发不同。在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。进
        行重定向操作后,request中的属性全部失效,并开始一个新的request对象。
            语法格式:
            response.senRedirect(String path)
        2.处理HTTP文件头
            通过response对象可以设置HTTP的响应报头,下面介绍最常用的操作。
            a.禁用缓存
                在默认情况下,浏览器会对显示的网页内容进行缓存。这样,当用户再次访问相关网页时,浏览器会
            判断网页是否发生变化,如果没有变化则直接显示缓存中的内容,这样可以提高网页的显示速度。对于一
            些安全性较高的网站,通常需要禁用缓存。
                
    <%
       response.setHeader("Cache-Control","no-store");
       response.setDateHeader("Expires",0);
    %>
            b.页面自动刷新
                
    <%
       response.setHeader("refresh","10")//%>   
            c.定时跳转页面
                
    <%
        response.setHeader("refresh","5;URL=login.jsp");
    %>
        3.设置输出缓存
            通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区(暂时放置
        输入输出内容的内存)。当满足以下三种情况时,就会把缓冲区的内容写到客户端:
                (1)Jsp页面的输出信息已经全部写入到了缓冲区    
                (2)缓冲区已满
                (3)Jsp中调用了response.flushBuffer()或out.flush()
            response对象提供的方法:
                flushBuffer()       强制将缓冲区的内容输出到客户端
                getBufferSize()     获取响应所使用的缓冲区实际大小,如果没有缓冲区则返回0
                setBufferSize()     设置缓冲区的大小
                reset()             清除缓冲区的内容,同时清除状态码和报头
                isCommitted()       检查服务器端是否已经把数据写入到了客户端
        
        session对象
            session在网络中被称为会话。由于HTTP协议是一种无状态协议,也就是当一个客户端向服务器发出请求,
        服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP
        协议提供了session。提供session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会
        话一直存在下去,知道关闭浏览器。但是如果再一个会话中,客户端长时间不向服务器发出请求,session对象
        就会自动消失。这个时间取决于服务器,比如Tomcat服务器默认为30min。
            保存信息:
                session.setAttribute(String name,Object obj)
                name :指定在session中的变量名
                obj:保存的对象
            获取信息:
                session.getAttribute(String name)
                getAttribute()返回的是Object类型
            移除信息:
                session.removeAttribute(String name)
            销毁session:
                session.invalidate()
            生命周期:
                getLastAccessedTime();      返回客户端最后一次与会话相关联的请求
                getMaxInactiveInterval();   以秒为单位返回一个会话内两个请求的最大时间间隔
                setMaxInactiveInterval();   以秒为单位设置session的有效时间
        
        application对象
            application对象用于保存所有应用程序的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。
        当application对象没有被销毁时,所有用户都可以共享该application对象。与session相比,application
        生命周期更长,类似于“全局变量”。
            1.访问应用程序的初始化参数
                应用程序初始化参数在web.xml文件中设置,web.xml文件位于Web应用所在目录下的WEB-INF子目录
            中,在web.xml文件中通过<context-param>标记配置初始化参数。
                application.getInitParameter(String name);  返回已命名的参数值
                application.getAttributeNames();            返回所有已定义的参数名的枚举
            ......
        
        out对象
            out对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
            1.输出数据
                out.print("");
                out.println("");
                输出时,println的换行并不会显示,可以用<pre>来显示效果
            2.管理响应缓冲
                out.clear()             清除缓冲区内容,类似重置响应流,如果响应已提交,则会产生异常
                out.clearBuffer()       清除当前缓冲区内容,即使已提交,也能使用
                out.flush()             刷新流
                out.isAutoFlush()       监测当前缓冲区已满时是自动清空还是抛出异常
                out.getBufferSize()     获取缓冲区大小

        pageContext对象
            通过它获取JSP页面的其他对象,实际开发很少使用
        config对象
            主要用于取得服务器的配置信息
        page对象
            page对象代表Jsp本身
        exception对象
            处理异常对象
     
  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/astonc/p/11676004.html
Copyright © 2011-2022 走看看