JSP内置对象(基础二上)out,request,response

jsp内置对象主要有:
out,request,response,session,application,page,pageContext,exception,config。

  • out内置对象
    out对象是JspWrite类的示例,是向客户端输出内容常用的类。
    常用方法:
    1.void println()向客户端打印字符串
    2.void clear()清除缓冲区内容,如果在flush之后调用会抛出异常
    3.void clearBuffer()清除缓冲区内容,如果在flush之后调用不会抛出异常
    4.void flush将缓冲区内容输出到客户端
    5.int getBufferSize()返回缓冲区字节数的大小,如果不设缓冲区则为0
    6.int getReMaining()返回缓冲区剩余多少可用
    7.boolean isAutoFlush()返回缓冲区满时,是自动清空还是抛出异常
    8 void close()关闭输出流
    运用:

  <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <h1>out内置对象</h1>
    <% 
       out.println("<h2>静夜思</h2>");
       out.println("床前明月光<br>");
       out.println("疑是地上霜<br>");
       out.flush();
       //out.clear();//这里会抛出异常。
       out.clearBuffer();//这里不会抛出异常。
       out.println("举头望明月<br>");
       out.println("低头思故乡<br>");

    %>
        缓冲区大小:<%=out.getBufferSize() %>byte<br>
        缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
       是否自动清空缓冲区:<%=out.isAutoFlush() %><BR>    
  </body>
</html>
  • request对象
    首先介绍表单的get提交与post提交方式的区别。
    1.get提交
    get提交以明文的方式通过URL提交数据,提交的数据最多不超过2KB,安全较低但效率比post高,适合提交数据量不大,安全性不高的数据,比如:搜索,查询功能。
    post提交是将用户提交的信息封装在HTML HEADER内,适合用于提交数据量大,安全性高的用户信息,比如:注册,修改,上传等功能。
    客户端请求的信息被封装在request对象中,通过它才能了解客户的需求,做出响应,它是httpSerlvetRequest类的实例。request对象具有请求作用域,即完成客户端请求之前,该对象一直有效。
    常用方法:
    void setAttribute(String name,Object):设置名字为name的request 的参数值
    Object getAttribute(String name):返回由name指定的属性值
    getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例
    getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组
    getCharacterEncoding() :返回请求中的字符编码方式
    getContentLength() :返回请求的 Body的长度
    getHeader(String name) :获得HTTP协议定义的文件头信息
    getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例
    getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例
    getInputStream() :返回请求的输入流,用于获得请求中的数据
    getMethod() :获得客户端向服务器端传送数据的方法
    String getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值
    getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实

    String[] getParameterValues(String name):获得有name指定的参数的所有值
    String getProtocol():获取客户端向服务器端传送数据所依据的协议名称
    getQueryString() :获得查询字符串
    getRequestURI() :获取发出请求字符串的客户端地址
    getRemoteAddr():获取客户端的 IP 地址
    getRemoteHost() :获取客户端的名字
    getSession([Boolean create]) :返回和请求相关 Session
    String getServerName() :获取服务器的名字
    String getContentType:得到请求体的MIME类型
    getServletPath():获取客户端所请求的脚本文件的路径
    getServerPort():获取服务器的端口号
    removeAttribute(String name):删除请求中的一个属性

实例
实现用户表单提交

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'login.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
     <h1>用户登录</h1>
    <hr>
    <form action="request.jsp" method="post">
    <table>
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"/></td>
        </tr>
         <tr>
        <td>爱好:</td>
        <td>
           <input type="checkbox" name="favorite" value="read">读书
           <input type="checkbox" name="favorite" value="music">音乐
           <input type="checkbox" name="favorite" value="movie">电影
           <input type="checkbox" name="favorite" value="internet">上网
        </td>
      </tr>
      <tr>
         <td colspan="2"><input type="submit" value="提交"/></td>
      </tr>
    </table>
    </form>
    <br>
    <br>
    <a href="request.jsp?username=李四">测试URL传参数</a>
  </body>
</html>

request.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'request.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
   <h1>request内置对象</h1>
    <% 
       request.setCharacterEncoding("utf-8"); 
       //解决中文乱码问题,无法解决URL传递中文出现的乱码问题。
       //解决URL传递中文乱码需到tomcat下的server.xml内加入URIEncoding="utf-8"
       request.setAttribute("password", "123456");

    %>
        用户名:<%=request.getParameter("username") %><br>   
        爱好 :<% 
           if(request.getParameterValues("favorite")!=null)
           {
               String[] favorites = request.getParameterValues("favorite");
               for(int i=0;i<favorites.length;i++)
               {
                  out.println(favorites[i]+"&nbsp;&nbsp;");
               }
            }
        %> <br>
         密码:<%=request.getAttribute("password") %><br> 
         请求体的MIME类型:<%=request.getContentType() %><br>
         协议类型及版本号:  <%=request.getProtocol() %><br>
         服务器主机名 :<%=request.getServerName() %><br>
         服务器端口号:<%=request.getServerPort() %><BR>
         请求文件的长度 :<%=request.getContentLength() %><BR>
         请求客户端的IP地址:<%=request.getRemoteAddr() %><BR>
         请求的真实路径:<%=request.getRealPath("request.jsp") %><br>
         请求的上下文路径:<%=request.getContextPath() %><BR>         


  </body>
</html>

解决URL传递中文乱码:
打开tomcat->conf->server.xml
加入:URIEncoding=”utf-8”
这里写图片描述

  • response对象
    response是HttpSerlvetResponse类的实例,response对象具有页面作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其他页面的response对当前页面无效。
    常用方法:
    String getCharacterEncoding()返回响应用的是何种字符编码
    void setContentType(String type)设置响应MIME类型
    PrintWrite getWrite()返回可以向客户端输出字符的一个对象
    sendRedirect(java.lang.String location)重新定向客户端的请求
    实例
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%
    response.setContentType("text/html;charset=utf-8"); //设置响应的MIMI类型

    out.println("<h1>response内置对象</h1>");
    out.println("<hr>");
    //out.flush();

    PrintWriter outer = response.getWriter(); //获得输出流对象
    outer.println("大家好,我是response对象生成的输出流outer对象");
    response.sendRedirect("login.jsp");//请求重定向
    //请求重定向
    //response.sendRedirect("request.jsp");
    //请求转发
   // request.getRequestDispatcher("request.jsp").forward(request, response);
%>

请求转发与请求重定向的区别:
请求重定向:客户端行为,response.sendRedirect();从本质上讲,相当于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变。如上例子从login.jsp表单提交到response.jsp,页面调用response.sendRedirect(“request.jsp”)(取消注释);则地址栏是request.jsp,且提交的对象未保存。

请求转发:request.getRequestDispatcher().forward(request, response);
是一次请求,请求对象会保存,地址栏的url地址不会变。如上例子从login.jsp表单提交到response.jsp,页面调用request.getRequestDispatcher(“request.jsp”).forward(request, response)(取消注释);则地址栏是response.jsp,提交的对象保存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章