您的位置:首页 > Web前端 > JavaScript

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秒钟定期刷新一次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: