JSP中Out和Request对象详解

简介:   内置表示不需要new便可直接使用。 一、基础知识   1.缓冲区:IO最原始是一个一个字节的读取,这就像吃米饭的时候一粒一粒的吃,很没有效率,这时候就有了碗,一碗一碗的吃,岂不痛快。   2.Get提交不能超过2k,安全性不高,查询、搜索时做,效率高,Post提交的信息在Html header里,信息量大,在注册、修改、上传时候。

  内置表示不需要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,所以找不到真是的。

目录
相关文章
|
4月前
|
存储 前端开发 Java
JavaWeb基础6——Request,Response,JSP&MVC
Request继承体系、获取请求头行体的方法、IDEA使用模板创建Servlet、请求参数中文乱码解决、请求转发、Respones重定向、Response响应字节字符数据、JSP、EL 表达式、JSTL标签、MVC模式和三层架构
JavaWeb基础6——Request,Response,JSP&MVC
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 10
JSP隐式对象是预定义的Java对象,如request、response、out、session、application等,直接供开发者使用。out对象是JspWriter实例,用于向网页输出内容,类似PrintWriter但有缓存处理和抛出IOException。exception对象保存了页面的异常信息,用于错误处理。
47 3
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 5
JSP教程介绍了九个隐式对象,如request、response、out、session、application等,无需声明即可直接使用。out对象是JspWriter实例,用于向网页输出内容,可配置是否缓存。它扩展了PrintWriter功能,处理缓存并可能抛出IOException。session对象基于HttpSession,用于跨客户端请求的会话跟踪。
33 1
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 9
JSP隐式对象是预定义的Java对象,无需声明即可直接使用。包括9大对象:request(HttpServletRequest)、response(HttpServletResponse)、out(JspWriter,用于输出到网页)、session(HttpSession)、application(ServletContext)、config(ServletConfig)、pageContext(PageContext,访问所有对象和命名空间)、page(页面实例,等同于Java的this)和Exception(异常对象)。
48 0
|
8月前
|
缓存 Java 对象存储
JSP 教程 之 JSP 隐式对象 8
JSP隐式对象是预定义的Java对象,如request、response、out等,无需声明即可直接使用。out对象是JspWriter实例,用于向response输出内容,支持print和println方法,可抛出IOException。pageContext对象代表整个JSP页面,提供访问页面信息和不同scope的对象,如request、response、session等,并有removeAttribute()方法管理页面属性。
41 0
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 7
JSP隐式对象是预定义的Java对象,无需声明即可使用。包括9大对象:request、response、out、session、application、config、pageContext、page和Exception。其中,out对象用于输出内容到网页,基于JspWriter,支持print和println方法。config对象是ServletConfig的实例,提供访问Servlet初始化参数的途径,如获取servlet名称。
39 0
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 6
JSP隐式对象是预定义的Java对象,无需声明即可直接使用。包括:request(HttpServletRequest)、response(HttpServletResponse)、out(JspWriter,用于输出到网页)、session(HttpSession)、application(ServletContext)、config(ServletConfig)、pageContext(PageContext)、page(当前页面对象)和Exception。out对象基于JspWriter,用于内容输出,提供print和println方法。
36 0
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 4
JSP隐式对象是预定义的Java对象,无需声明即可直接使用。包括9大对象:request、response、out、session、application、config、pageContext、page和Exception。其中,out对象基于JspWriter,用于向response写入内容,具有缓存管理功能,并扩展了PrintWriter的方法。常用方法有print()、println()用于输出各种类型数据,以及flush()刷新输出流。
44 0
|
3月前
|
Java 容器
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
93 0
|
5月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上