JSP内置对象
Posted 小调~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP内置对象相关的知识,希望对你有一定的参考价值。
一、内置对象简介
JSP内置对象是WEB容器创建的一组对象,这些内置对象不需要开发人员实例化,不使用new关键字就可以使用的内置对象,在所有的JSP页面直接使用内置对象。JSP内置对象包括out、request、response、session、application、config、exception、page和pageContext。
二、九大内置对象
1、out对象
out对象是javax.servlet.jsp.JspWriter类的实例,是向客户端输出内容常用的对象。考虑out对象时,基于缓冲区理解。
out对象常用的方法表
方法 | 说明 |
void clear() | 清除缓冲区的内容,若如果在flush之后调用会抛出异常 |
void clearBuffer() | 清除缓冲区的当前内容,若如果在flush之后调用会抛出异常 |
void flush() | 清空流 |
int getBufferSize() | 返回缓冲区一字节数的大小,如不设缓冲区则为0 |
int getRemaining() | 返回缓冲区还剩多少可用 |
boolean isAutoFlush() |
返回缓冲区满时,是自动清空还是抛出异常 |
void printlin() | 向客户端打印字符串 |
void close() | 关闭输出流 |
代码示例
<body> <h1>out内置对象</h1> <% out.println("<h2>静夜思</h2>"); out.print("——李白<br>"); out.print("床前明月光<br>"); out.print("flush前缓冲区容量:"+out.getRemaining()+"<br>"); out.flush(); out.print("flush后缓冲区容量:"+out.getRemaining()+"<br>"); out.println("疑是地上霜<br>"); out.println("举头望明月<br>低头思故乡<br>"); %> 缓冲区大小:<%=out.getBufferSize() %>byte<br> 缓冲区剩余大小:<%=out.getRemaining() %>byte<br> 是否自动清空缓冲区:<%=out.isAutoFlush() %><br> </body>
运行结果截图:
注:在默认情况下:服务器端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中,只有在下面三种情况下,才会把该缓冲区的内容输出到客户端:
(1)该JSP网页完成信息的输出
(2)输出缓冲去已满
(3)JSP中调用out.flush()或response.flushbuffer()
2、request对象 获取页面的一些标签属性和属性值
客户端的请求信息被封装在request对象中,通过它才能了解客户端的需求,然后做出响应。它是HttpServletRequest的实例,javax.http.HttpServletRequest接口继承自javax.servlet.ServletRequest接口。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。
request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。request对象是从客户端向服务器发送请求,包括用户提交的信息及客户端的一些信息。客户端可通过html表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据。request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。
request对象常用的方法表
方法 | 说明 |
getAttribute(String name) | 返回name指定的属性值,如不存在则返回null |
getAttributeNames() | 返回name指定属性集合,其结果是一个枚举实例。 |
getCookies() | 返回客户端的所有Cookie对象,结果为一个Cookie数组。 |
getCharacterEncoding() | 返回请求中的字符编码方式。 |
getHeader(String name) | 获得HTTP协议定义的文件头信息。 |
getHeaders(String name) | 返回所有指定名字的request Header的所有值,其结果是一个枚举实例。 |
getInputStream() | 返回请求的输入流,用于获得请求中的数据。 |
getMethod() | 获得客户端向服务器端传送数据的方法,如 GET、POST、HEADER、TRACE等。 |
getProtocol() | 获得客户端向服务器端传送数据所依据的协议名称。 |
getParameter(String name) | 获得客户端传送给服务器端的参数值,可以获得GET和POST提交的参数。 |
getParameterNames() | 获得客户端传送给服务器端的所有参数名字,其结果为一个枚举实例。 |
getParameterValues(String name) | 获得指定参数的所有值。 |
getSession([Boolean create]) | 回和请求相关的session,create为可选参数,当有参数create且为true时,如果此时客户端没有创建session,则创建一个新的session。 |
getServerName() | 获得服务器的名字。 |
getServletPath() | 获得客户端所请求的脚本文件的文件路径。 |
getServerPort() | 获取服务器的端口号。 |
removeAttribute(String name) | 删除请求中的一个属性。 |
setAttribute(String name, java.lang.Object objt) | 设置名字为name的request参数的值,该值是由java.lang.Object类型的objt指定的。 |
代码示例:
index.jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" isErrorPage="true" errorPage="error.jsp" isThreadSafe="true" session="true" buffer="8kb" autoFlush="true" info="..." %> <% 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>用户注册</h1> <br> <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"/>电影 </td> </tr> <tr> <td><input type="submit" value="提交"/></td> </tr> </table> </form> <br> <a href="request.jsp?username=小帅">测试URL传参</a> </body> </html>
request.jsp代码
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%> <%@ 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传递中的中文乱码问题 request.setAttribute("password", "123654");//对未创建的属性,先创建后赋值 out.println("<h2>原来的username为:"+request.getParameter("username")+"</h2>"); request.setAttribute("username", "女神");//对已有的属性重新赋值 %> 爱好:<% if(request.getParameterValues("favorite")!=null) { String []favorites=request.getParameterValues("favorite"); for(int i=0;i<favorites.length;i++) { out.println(favorites[i]+" "); } } %> <br> 密码:<%=request.getAttribute("password") %><br> 现在的username:<%=request.getAttribute("username") %><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>
运行截图:
点击提交按钮后的结果截图:
点击超链接后的截图:
注:(1)request.setAttribute()方法可以对已有属性进行重新赋值,也可以对不存在的属性进行先创建后赋值。
(2)URL传值的乱码问题需要,通过配置server.xml文档解决。
在标签<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>中添加红色部分,然后重启tomocate服务器。
配置完成后的运行截图:
3、response对象
response对象对客户的请求作出动态的响应,向客户端发送数据,用户可以使用该对象将服务器的数据以HTML的格式发送到用户的浏览器,它与request组成一对接收、发送数据的对象。一般在JSP文件中很少使用到response。
response对象包含客户请求的相关信息,它是HttpServletResponse类的实例,javax.http.HttpServletResponse接口,继承于javax.servlet.ServletResponse接口。
response对象常用的方法表
方法 | 说明 |
String getCharacterEncoding() | 返回响应应用的是何种字符编码 |
ServletOutputStream getOutputStream() | 返回响应的一个二进制输出流 |
PrintWriter getWriter() | 返回可以向客户端输出字符的一个对象 |
void setContenLength(int len) | 设置响应头长度 |
void setContentType(String type) | 设置响应的MIME类型 |
sendRedirect(java.lang.String.location) | 重新定向客户端的请求 |
void addCookie() | 添加cookies记录 |
代码示例:
response.jsp代码
<%@page import="java.io.PrintWriter"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+pathJsp九大内置对象