• JSP中Out和Request对象详解


      内置表示不需要new便可直接使用。

    一、基础知识

      1.缓冲区:IO最原始是一个一个字节的读取,这就像吃米饭的时候一粒一粒的吃,很没有效率,这时候就有了碗,一碗一碗的吃,岂不痛快。

      2.Get提交不能超过2k,安全性不高,查询、搜索时做,效率高,Post提交的信息在Html header里,信息量大,在注册、修改、上传时候。

    二、out内置对象

      向客户端输出信息,是JspWriter的对象,常用的有println、flush和clear和clearbuffer,后两者的区别是,潜着在flush调用后会抛出异常,前者不会....抛出异常部分后面的代码都不会被执行,还有getBufferSize(缓冲区大小,如果不设置则为0),getRemaining(缓冲区剩余大小),isAutoFlush(缓冲区满时是否自动刷新)。

    三、Request对象

      是HttpServletRequest的实力,客户端请求完成之前,一直存在。

     1 <%@ page language="java" contentType="text/html; charset=utf-8"%>
     2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     3 <html>
     4 <head>
     5 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     6 <title>Insert title here</title>
     7 </head>
     8 <body>
     9     <form name="regiserForm" action="mainPage.jsp" method="post">
    10     <table>
    11         <tr>
    12             <td>姓名</td>
    13             <td>
    14                 <input type="text" name="userName">
    15             </td>
    16         <tr>
    17         <tr>
    18             <td>爱好</td>
    19             <td>
    20                 <input type="checkbox" name="favourite" value="羽毛球">羽毛球
    21                 <input type="checkbox" name="favourite" value="篮球">篮球
    22                 <input type="checkbox" name="favourite" value="网球">网球
    23                 <input type="checkbox" name="favourite" value="足球">足球
    24             </td>
    25         </tr>
    26         <tr>
    27             <td colspan=2>
    28                 <input type="submit" value="提交">
    29             </td>
    30         </tr>
    31     </table>
    32     </form>
    33 </body>
    34 </html>

      这是注册页面,第一点需要注意的是

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    

      charset在contentType里面(看冒号),单独写的话提示找不到属性。第二点是布局问题,名字和input分别占用一个td,工两个td,所以下面的提交是colspan=2。

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <%
        request.setCharacterEncoding("UTF-8");
        String userName= request.getParameter("userName");
        String[] favourite = request.getParameterValues("favourite");
        out.println("姓名&nbsp&nbsp&nbsp"+userName);
        out.print("爱好");
        for (int i=1; i<favourite.length; i++) {
            out.println("&nbsp&nbsp&nbsp"+favourite[i]);
        }
    %>
    
    </body>
    </html>

      由于页面编码方式都是UTF-8,但是参数传输方式默认是ISO-8859-1,所以现浏览器里的结果是乱码。在接受参数之前加入

     request.setCharacterEncoding("UTF-8");
    

      

      下面测试Get传递参数

    1 <!-- 直接这样会出现空指针异常,因为并没有传递爱好属性,而mainPage直接去获取爱好,所以空指针,因此需要判断一下 -->
    2     <a href="mainPage.jsp?userName=李四">测试Get方法(URL传参数)</a>

    ..........................

        request.setCharacterEncoding("UTF-8");
    
        String userName= request.getParameter("userName");
        out.println("姓名&nbsp&nbsp&nbsp"+userName);
        if(request.getParameterValues("favourite")!=null) {
            String[] favourite = request.getParameterValues("favourite");
            
            out.print("爱好");
            for (int i=1; i<favourite.length; i++) {
                out.println("&nbsp&nbsp&nbsp"+favourite[i]);
            }
        }

      按理说这种方式传递中文不论地址栏还是现实的结果都会是乱码,但是我这竟然没有,如果有的话

       <Connector port="9999" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" URIEncoding="UTF-8"/>

      配置Tomcat下的server.xml,第一个Connector,可以修改端口号,同事最后加入URIEncoding这个属性。或者

    String str= request.getParameter("userName");
    String userName = new String(str.getBytes("ISO-8859-1"),"UTF-8");

      还有一种就是为Connector 节点添加useBodyEncodingForURI="true" 属性即可。

      还可以在request对象里setAttribute('"password","123456")下面通过getAttribute("password")来获得,原来是getParameter。

      getContentType:或者MIME类型

      getProtocol:协议类型和版本号

      getServerPort:服务器端口号

      getRemoteAddr:客户端的IP地址

      真是的IP地址因为是动态IP,所以找不到真是的。

  • 相关阅读:
    python之SSH远程登录
    Visual Studio 2010發行Windows Form應用程式後,出現【System.ArgumentNullException 未處理】的解決方式
    VS中CreateImageFromResources函数的“null”的值对于“stream”无效的错误
    IIS发布网站后局域网中无法访问
    World2013中三个减号或等号再回车产生的分割线的删除和设置
    在Sql Server 数据库还原出现 3154错误
    批处理命令(bat)设置环境变量
    Markdown首行缩进
    站在数学之巅沐浴计算机的阳光
    MarkDown(LaTex) 数学公式
  • 原文地址:https://www.cnblogs.com/hxsyl/p/5553485.html
Copyright © 2020-2023  润新知