JSP内置对象(一)

JSP中9种内置对象

  1. out对象:负责管理对客户端的输出。
  2. request对象:负责得到客户端的请求信息。
  3. response对象:负责向客户端发出响应。
  4. session对象:负责保存同一客户端一次会话过程中的一些信息。
  5. application对象:表示整个应用的环境的信息。
  6. exception对象:表示页面上发生异常,可以通过它获得页面异常信息。
  7. page对象:表示的是当前JSP页面本身,就像Java类定义中的this一样。
  8. pageContext对象:表示的是此JSP的上下文。
  9. config对象:表示此JSP的ServletConfig。

out对象

(对应类型:javax.servlet.jsp.JspWriter)
1.out输出的两种方法:
  1. void print()
  2. void println()
2.out对象与管理缓冲区有关的函数:
  1. void close():关闭输出流,从而可以强制终止当前页面的剩余部分向浏览器输出。
  2. void clearBuffer():清除缓冲区里的数据,并且把数据写到客户端去。
  3. void clear():清除缓冲区里的数据,但不把数据写到客户端去。
  4. int getRemaining():获取缓冲区中没有被占用的空间的大小。
  5. void flush():输出缓冲区的数据,out.flush()函数也会清除缓冲区中的数据,但是此函数先将之前缓冲区的数据输出至客户端,然后再清除缓冲区的数据。
  6. int getBufferSize():获得缓冲区的大小。

request对象

(对应类型:javax.servlet.http.HttpServletRequest)
request的主要方法:
  1. String getMethod():得到提交方式.
  2. String getRequestURI():得到请求的URL地址。
  3. String getProtocol():得到协议名称。
  4. String getServletPath():获得客户端请求服务器文件路径。
  5. String getQueryString():得到URL的查询部分,对post请求来说,该方法得不到任何信息。
  6. String getServerName():得到服务器的名称。
  7. String getServerPort():得到服务器端口号。
  8. String getRemoteAddr():得到客户端的IP地址。
  9. String getParameter(String name):获得客户端传送给服务器的name参数的值。当传递给此函数的参数名没有实际参数与之对应时,则返回null。
  10. 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的比较:
  1. 从浏览器的地址显示上来看
    forward方法:服务器端去请求资源,服务器直接访问目标地址,并对该目标地址的响应内容进行读取,再把读取的内容发给浏览器,因此客户端浏览器的地址不变
    这里写图片描述
    redirect方法:告诉客户端,使浏览器知道去请求哪一个地址,相当于客户端重新请求一遍,所以地址显示栏会变
    这里写图片描述
  2. 从数据共享来看
    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秒钟定期刷新一次
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值