JSP内置对象(一)
2016-12-25 21:23
225 查看
JSP中9种内置对象
out对象:负责管理对客户端的输出。request对象:负责得到客户端的请求信息。
response对象:负责向客户端发出响应。
session对象:负责保存同一客户端一次会话过程中的一些信息。
application对象:表示整个应用的环境的信息。
exception对象:表示页面上发生异常,可以通过它获得页面异常信息。
page对象:表示的是当前JSP页面本身,就像Java类定义中的this一样。
pageContext对象:表示的是此JSP的上下文。
config对象:表示此JSP的ServletConfig。
out对象
(对应类型:javax.servlet.jsp.JspWriter)
1.out输出的两种方法:
void print()void println()
2.out对象与管理缓冲区有关的函数:
void close():关闭输出流,从而可以强制终止当前页面的剩余部分向浏览器输出。void clearBuffer():清除缓冲区里的数据,并且把数据写到客户端去。
void clear():清除缓冲区里的数据,但不把数据写到客户端去。
int getRemaining():获取缓冲区中没有被占用的空间的大小。
void flush():输出缓冲区的数据,out.flush()函数也会清除缓冲区中的数据,但是此函数先将之前缓冲区的数据输出至客户端,然后再清除缓冲区的数据。
int getBufferSize():获得缓冲区的大小。
request对象
(对应类型:javax.servlet.http.HttpServletRequest)
request的主要方法:
String getMethod():得到提交方式.String getRequestURI():得到请求的URL地址。
String getProtocol():得到协议名称。
String getServletPath():获得客户端请求服务器文件路径。
String getQueryString():得到URL的查询部分,对post请求来说,该方法得不到任何信息。
String getServerName():得到服务器的名称。
String getServerPort():得到服务器端口号。
String getRemoteAddr():得到客户端的IP地址。
String getParameter(String name):获得客户端传送给服务器的name参数的值。当传递给此函数的参数名没有实际参数与之对应时,则返回null。
String[] getParameterValues(String name):以字符串数组的形式返回指定参数所有值。
例子:requestTest.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> 提交方式:<%=request.getMethod() %><br> 请求的URL地址:<%=request.getRequestURI() %><br> 协议名称:<%=request.getProtocol() %><br> 客户端请求服务器文件的路径:<%=request.getServletPath() %><br> URL的查询部分:<%=request.getQueryString() %><br> 服务器的名称:<%=request.getServerName() %><br> 服务器端口号:<%=request.getServerPort() %><br> 远程客户端的IP地址:<%=request.getRemoteAddr() %><br> </body> </html>
获取信息如下:
这里出现了”0:0:0:0:0:0:0:1”而不是”127.0.0.1”,原因:
0:0:0:0:0:0:0:1是ipv6的表现形式,对应ipv4来说相当于127.0.0.1,也就是本机如果项目部署在本机win7系统,访问时是通过 localhost 来访问,用java获取ip地址可能会出现该问题,这时获取的ip将是 0:0:0:0:0:0:0:1
解决方法(暂时):直接url用127.0.0.1代替localhost。
response对象
(对应类型:javax.servlet.http.HttpServletResponse)
1. 利用response对象进行重定向
方法:response.sendRedirect(目标页面路径);例子:responseTest1.jsp->responseTest2.jsp->responseTest3.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> <!-- responstTest1.jsp --> <form action="responseTest2.jsp"> <input type="submit" value="提交"> </form> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> <!-- responstTest2.jsp --> <!-- <jsp:forward page="responseTest3.jsp"/> --> <% //相对路径 response.sendRedirect("responseTest3.jsp"); %> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> <!-- responseTest3.jsp --> 这里是responseTest3.jsp </body> </html>
2.redirect与forward的比较:
从浏览器的地址显示上来看forward方法:服务器端去请求资源,服务器直接访问目标地址,并对该目标地址的响应内容进行读取,再把读取的内容发给浏览器,因此客户端浏览器的地址不变。
redirect方法:告诉客户端,使浏览器知道去请求哪一个地址,相当于客户端重新请求一遍,所以地址显示栏会变。
从数据共享来看
forward方法:转发的页,以及转发到的目标页面能够**共享**request里面的数据。
redirect方法:转发的页以及转发到的目标页面**不能共享**request里面的数据。
例子:输入学生姓名,查询其资料(页面1),单击后提交到页面2,页面2重定向到页面3.要求要在页面3显示出输入的姓名来。
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> <!-- 页面1 --> <form action="responseTest5.jsp"> 请输入学生姓名:<input type="text" name="stuname"> <input type="submit" value="查询"> </form> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> <!-- 页面2 --> <jsp:forward page="responseTest6.jsp"></jsp:forward> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> <!-- 页面3 --> <% out.println("学生姓名为:"+request.getParameter("stuname")+"<br>"); %> </body> </html>
将页面2改为如下:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <html> <body> <!-- 页面2 --> <% response.sendRedirect("responseTest6.jsp"); %> </body> </html>
3. 从功能来看
redirect方法:能够重定向到当前应用程序的其他资源,而且还能够重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。例如:
<% response.sendRedirect("https://www.baidu.com"); %>
forward方法只能在同一个Web应用程序内的资源之间转发请求,可以理解为服务器内部的一种操作。例如下面代码将出错:
<jsp:forward page="https://www.baidu.com"></jsp:forward>
4.从效率来看
forward方法:效率较高,因为跳转仅发生在服务器端。
redirect方法:相对较低,因为类似于再进行了一次请求。
3.其它重定向
sendError():向客户端发送HTTP状态码的出错信息。(少用)<% response.sendError(404); %>
常见错误代码:
400:Bad Request,请求出现语法错误。
401:Unauthorized,客户试图未经授权访问受密码保护的页面。
403:Forbidden,资源不可用。
404:Not Found,无法找到指定位置的资源。
500:Internal Server Error,服务器遇到了无法预料的情况,不能完成客户的请求。
2.利用response设置HTTP头
方法:response.setHeader(“”,”“)。例如:
response.setHeader("Prama","No-cache"); response.setHeader("Refresh","5");//客户端浏览器每5秒钟定期刷新一次
相关文章推荐