JSP (三) ---[JSP九大内置对象 & 请求转发与重定向]



内置对象


JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。在JSP页面中,可以通过存取JSP内置对象实现与JSP页面和Servlet环境的相互访问。每个内部对象均有对应所属的ServletAPI类型。在jsp页面中可以不加声明和创建就可以在脚本中使用

内置对象简要说明
out向客户端输出
request封装用户请求
response向用户做出响应
session客户和服务器间的会话
application于服务器启动时开始运行,用来存放全局变量,在用户间共享
pageContext用于访问page的各种对象
exception异常
config初始化要用的参数
pageJSP页面本身

在一般的页面不含有exception对象;需要在page指令中定义 isErrorPage属性为true;
当jsp文件编译为servlet文件时.这些内置对象都存在定义;所以直接在 jsp 文件中调用即可.

pageContext中的属性默认在当前页面是共享的;session中的属性在当前session中是共享的;application对象中的属性则对所有页面都是共享的;request中的属性在同一个请求中是共享的


out对象


Out对象是javax.servlet.jsp.JspWriter类的实例。代表JSP页面的输出流;
主要用于向客户端浏览器输出数据

常用方法说明
print()将指定类型的数据输出到 HTTP 流,不换行
println( )将指定类型的数据输出到 HTTP 流,并输出一个换行符
newline输出换行字符
flush()刷新输出流

request对象


request对象是javax.servlet.http.HttpServletRequest的实例,

  • request对象封装了一次请求,客户端的请求参数都被封装在该对象里
  • 主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。比如表单中的数据、网页地址后带的参数等。
  • 每当客户端请求一个JSP页面时,JSP就会创建一个新的request对象来代表这个请求。
返回值类型方法注释
voidsetAttribute(String name,Object obj)设置属性的属性值
ObjectgetAttribute(String name)返回指定 name的属性值,若不存在,则返回 null 值
voidremoveAttribute(String name)删除请求中的一个属性
StringgetParameter(String name)获取客户端传送给服务器端的参数
EnumerationgetAttributeNames()返回 request 对象的所有属性的集合
EnumerationgetParameterNames()获取客户端传送的所有参数的集合
StringgetParameterValues(String name)获取指定name的所有值
StringgetCharacterEncoding()返回请求正文中所使用的字符编码
intgetContentLength()获取请求数据的长度(字节数),若不确定则返回 -1
StringgetContenType()获取请求体的数据类型(MIME 类型)
ServletlnputStreamgetInputStream()获取请求的输入流,显示请求中的数据
StringgetProtocol()获取客户端向服务器端传送数据的协议名称
StringgetMethod()获取客户端向服务器端传送数据的参数方法,(get/post)
StringgetServerName()获取服务器的主机名
StringgetRemoteAddr()获取客户端的网络地址
StringgetRemoteHost()获取发送请求的客户端主机名
StringgetRealPath(String path)获取指定路径的真实路径
cookie[]getCookies()获取所有 Cookie 对象
booleanisSecure()判断当前请求是否使用安全协议
booleanisRequestedSessionldPromCookie()判断会话是否使用 Cookie 管理会话 ID
booleanisRequestedSessionIdFromURL()判断会话是否使用 URL 管理会话ID
booleanisRequestedSessionldFromVoid()判断请求的会话 ID 是否合法
intgetServerPort()获取服务器的端口号

response对象


Response对象是javax.servlet.http.HttpServletResponse类的实例。

  • 代表响应对象,主要用于向客户端发送数据
  • 包含了响应客户请求的有关信息。
返回值类型方法注释
voidsengRedirect(java.lang.String location)将响应发送到另一个位置进行处理
voidaddCookie(Cookie cookie)添加指定参数Cookie
voidaddHeader(String name,String value)添加 HTTP 文件指定的头信息
StringencodeURL(String url)将 URL 进行指定编码,返回包含 Session ID 的 URL
voidflushBuffer()将缓冲区内容发送到客户端
intgetBufferSize()获取响应所使用的实际缓冲区大小,若无缓冲区则返回 0
voidsetBufferSize(int size)设置响应体的首选缓冲区大小
booleanisCommitted()判断响应是否已提交;(提交的响应包含状态码和报头)
voidreset()清除缓冲区存在的数据,包括状态码和报头
ServletOutputStreamgetOutputStream()获取传到客户端的输出流对象
voidsendError(int errnum)向客户端发送错误信息
voidsetCotentType(String type)设置响应的 数据类型(MIME 类型)
voidsetHeader(String name,String value)设置指定name的 HTTP文件头信息
voidsetCotentLength(int len)设置响应头长度

请求转发与重定向


当 servlet 逻辑处理后,将处理结果交给 jsp ,由jsp向客户端进行响应;这里有两种解决方式

  • 使用request进行请求转发;
  • 使用response进行重定向.

实际上,两种方式本质上的结果,还是 jsp 进行编译.(即其中的字符输出流方式)

请求转发

请求转发是指将请求再转发到另一资源。此过程在同一个请求范围内,转发后浏览器地址栏内容不变


请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应。

例如 A 向 B 借钱; B 悄悄地借了 C 的钱,把这个钱借给了 A ;但是 A 并不知道这是 B 借来的;
整个过程是属于一次请求

整个过程是属于一次请求;浏览器的地址不发生变化. 转发的动作在服务器内完成,客户端并不知晓.

在转发的过程中还可以传输数据;

简图:

在这里插入图片描述


重定向

重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址。


重定向是通过HttpServletResponse对象sendRedirect()方法实现,该方法相当于浏览器重新发送一个请求

例如 A 向 B 借钱,这一次 B直接回复A;你去找 C 借钱吧; 然后 A 跑去找 C 借钱;借到了钱;
整个过程包括两次请求

整个过程属于两次请求;地址栏的地址发生变化,在第二次请求时不会的得到第一次请求的数据.

简图:

在这里插入图片描述


这里使用一个简单的登录页面跳转案例,分别看看请求转发和重定向.

(1)请求转发的方式

  • 编写LoginServlet类文件
//使用注解方式配置servlet
@WebServlet(name = "login",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求编码格式;
        req.setCharacterEncoding("utf-8");

        //获取页面中对应name的值;
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");

        //servlet处理请求后交给jsp;由jsp向客户端响应;
        //两种方式: request请求转发; response重定向;

        //这里仅仅是用equals方法进行了判断;
        if (account.equals("张三") && password.equals("123456")) {

            //将上面获取到的account的值设置给名为 name的属性;(以键值对的形式);
            req.setAttribute("name",account);
            //将请求转发到页面loginSuccess.jsp,(此时 request对象的数据也发过去了; )
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("loginSuccess.jsp");
            requestDispatcher.forward(req,resp);
        } else {
            //对于账号错误的情况,也请求发送;
            //设置属性名为 errorMsg 的值为 "账号或密码错误!"
            req.setAttribute("errorMsg","账号或密码错误!");
            //将请求发送到页面 login.jsp ;
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("login.jsp");
            requestDispatcher.forward(req,resp);
        }
    }
}
  • 登录页面 login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<div>
    <%--获取到转发过来的request对象的,属性名为 errorMsg 的值 ;若不存在,则返回 null--%>
    <%--在没有登录时;(请求转发之前);这个request对象是属于login.jsp的request对象--%>
<%
    Object errorMsg = request.getAttribute("errorMsg");
    out.print(errorMsg);
%>
</div>
<form action="login" method="post">
    账号:<input type="text" name="account"/><br/>
    密码:<input type="password" name="password"/><br/>
    性别:<input type="radio" name="sex" value="男" checked="checked" /><br/>
         <input type="radio" name="sex" value="女"/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>
  • 登陆成功页面loginSuccess.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
<%--在没有登录时;(请求转发之前);这个request对象是属于loginSuccess.jsp的request对象--%>

<%--此时的request对象,正是LoginServlet请求中转发过来的request对象--%>
<%--通过getAttribute方法获取到指定的参数名(account)对应的值;若不存在,则返回 null--%>
<%
    String account = (String) request.getAttribute("name");
%>
<%
    out.print(account);
%>
你来了!
</body>
</html>
  • 启动服务器
    登录页面(注意到 null;这时 request 对象是属于login.jsp 的 request 对象;那么调用 getAttribute 方法获取名为 name 的值是不存在的,则为 null );此时页面为login.jsp.

在这里插入图片描述

输入正确账号密码后;(注意到url的地址并不是loginSuccess.jsp)

在这里插入图片描述

输入错误账号;(注意到url的地址并不是login.jsp)

在这里插入图片描述

而直接访问loginSuccess.jsp时;(这时的request对象不是转发过来的,所以也就没有包含name数据信息值)

在这里插入图片描述


(2)重定向

  • 编写LoginServlet类文件
//使用注解方式配置servlet
@WebServlet(name = "login",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求编码格式;
        req.setCharacterEncoding("utf-8");

        //获取页面中对应name的值;
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");

        //servlet处理请求后交给jsp;由jsp向客户端响应;
        //两种方式: request请求转发; response重定向;

        //这里仅仅是用equals方法进行了判断;
        if (account.equals("张三") && password.equals("123456")) {

            //将上面获取到的account的值设置给名为 name的属性;(以键值对的形式);
            req.setAttribute("name",account);
            //将页面重定向到 loginSuccess.jsp
            resp.sendRedirect("loginSuccess.jsp");

        } else {
            //对于账号错误的情况,也也进行重定向处理;
            //设置属性名为 errorMsg 的值为 "账号或密码错误!"
            req.setAttribute("errorMsg","账号或密码错误!");
            //将页面重定向到 login.jsp
            resp.sendRedirect("login.jsp");

        }
    }
}
  • 登录页面login.jsp和登陆成功页面loginSuccess.jsp不变
  • 启动服务器

在这里插入图片描述

  • 输入正确账号密码后;(注意到url的地址已经是loginSuccess.jsp;但是本来应该显示用户名的位置为null值;也就是说那个request对象没有转发过来);
  • 使用F12,注意到网络地址有login地址,但是状态码为302,即请求重定向.

在这里插入图片描述

  • 输入错误账号;(注意到url的地址已经是login.jsp ;但是显示错误提示消息的位置显示为null值)

在这里插入图片描述


session对象


Session 对象是javax.servlet.http.HttpSession类的实例。
主要用来保持在服务器与一个客户端之间需要保留的数据,比如在会话期间保持用户的登录信息等,会话状态维持是Web应用开发者必须面对的问题。

作用/功能:session对象在第一个JSP页面被装载时自动创建,完成会话期管理。;使用了会话跟踪技术 , 存储管理数据(session对象在同一个会话中是共享的 : 在同一个浏览器进行访问 ;使用同一个根目录地址时,(即同一个项目)).

会话:由客户端打开浏览器并连接到服务器 ; 会话开始 ; 到客户端关闭浏览器离开这个服务器时 ; 会话结束. ; 会话是个过程.


  • Servlet API中,定义了HttpSession接口,用来封装会话对象。
  • HttpSession是接口,会话对象是Web容器创建的,在Servlet中使用HttpServletRequest中的方法获得会话对象。
  • public HttpSession getSession():获取跟当前请求相关的session,如果不存在session,就创建一个新的session对象返回。
  • JSP文件可使用会话对象的方法; JSP文件中有内置对象session,可以直接调用HttpSession接口中任意方法。

HttpSession接口中定义的部分方法

返回值类型方法注释
voidsetAttribute(String key,Object value)以key/value的形式保存对象值
ObjectgetAttribute(String key)通过key获取对象值
voidremoveAttribute(String key)通过key删除属性
intgetMaxInactiveInterval( )获取session的有效非活动时间,以秒为单位
voidsetMaxInactiveInterval (int interval )设置session的最大非活动时间,以秒为单位,超时将被销毁。如果参数是负数,表示永远不失效。
longgetCreationTime( )获取 session 的创建时间,以毫秒为单位
longgetLastAccessedTime( )获取 session 中客户端最近一次请求的时间。(以毫秒为单位),由 1970年1月1日起。可计算用户在站点上停留的时间
StringgetId( )获取session对象的会话ID
voidinvalidate( )设置session对象失效,销毁session对象
booleanisNew( )判断该session对象是不是一个新创建的会话对象
EnumerationgetAttributeName( )获取 session 对象全部属性的名字

session实现会话机制的过程

在这里插入图片描述

会话机制过程

  • 客户端发出请求时,服务器创建session对象,生成一个随机的会话ID , 并且将ID值封装为 JSESSIONID的session,响应给客户端.
  • 客户端会将响应过来的会话ID存储起来,每次访问服务器时的请求中,会附带会话ID.
  • 调用request.getSession,获得会话对象时,服务器从request中获取会话ID(JSESSIONID值);查找匹配的session对象.
  • 浏览器关闭时,session对象销毁,此时若有客户端发来请求,但是根据会话ID匹配不到对应的session对象,那么就会重新创建session对象,生成随机的会话ID.

当客户端关闭网站的所有网页或关闭浏览器时,session对象中保存的数据会自动清除。由于Htp协议是一个无状态协议,不保留会话间的数据,因此通过session对象扩展了htp的功能。比如用户登录一个网站之后,登录信息会暂时保存在session对象中,打开不同的页面时,登录信息是可以共享的,一旦用户关闭浏览器或退出登录,就会清除session对象中保存的登录信息。


通过一个简单的案例查看session对象的工作机制

  • (1)编写jspforSession.jsp 页面
<%--
  Created by IntelliJ IDEA.
  User: 小智
  Date: 2021/8/2
  Time: 16:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>session</title>
</head>
<body>
关于session工作机制
</body>
</html>
  • (2)浏览器第一次访问服务器时;生成随机的会话ID;
    JSESSIONID=B9D084300FB777A993A567ED492938B1

在这里插入图片描述

  • (3)当浏览器第二次访问服务器时,客户端请求头的会话ID值就是服务器之前响应过来的值.
    JSESSIONID=B9D084300FB777A993A567ED492938B1

在这里插入图片描述

  • (4)现在,关闭服务器;然后再启动服务器;使用浏览器访问jspforSession.jsp;服务器生成新的会话ID;
    JSESSIONID=6D161381FDB57B6C2166518923D300B4

在这里插入图片描述


获取session的两种方式
  • (1)在jsp中, 使用方法 getId( )
  • (2)在servlet中,使用方法 getSession( )
通过一个案例看看这两种获取session方式;
  • LoginServlet类
//使用注解方式配置servlet
@WebServlet(name = "login",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求编码格式;
        req.setCharacterEncoding("utf-8");
            //获取页面中对应name的值;
            String account = req.getParameter("account");
            String password = req.getParameter("password");
            String sex = req.getParameter("sex");

            //创建session对象;
             HttpSession session;

            //这里仅仅是用equals方法进行了判断;
            if (account.equals("张三") && password.equals("123456")) {
                //从请求对象中获取对应的session对象;
                session = req.getSession();
                //将上面获取到的account的值设置给名为 name的属性;(以键值对的形式);
                session.setAttribute("name",account);
                //若符合条件,则重定向到页面LoginSuccess.jsp;
                resp.sendRedirect("loginSuccess.jsp");
            } else {
                //从请求对象中获取对应的session对象;
                session=req.getSession();
                //设置属性名为 errorMsg 的值为 "账号或密码错误!"
                session.setAttribute("errorMsg", "账号或密码错误!");
               //将页面重定向到login.jsp;
                resp.sendRedirect("login.jsp");
            }
       }
}
  • 登录页面Login.jsp;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<div>
    <%--获取到session对象中属性名为 errorMsg 的值 ;若不存在,则返回 null--%>
    <%--此时获取到的session对象和客户端访问服务器的是同一个;(都在同一个浏览器)--%>
<%
    String errorMsg =(String) session.getAttribute("errorMsg");
    out.print(errorMsg+"<br/>");
    out.print("此时会话ID为==>"+session.getId()+"<br/>");

%>
</div>
<form action="login" method="post">
    账号:<input type="text" name="account"/><br/>
    密码:<input type="password" name="password"/><br/>
    性别:<input type="radio" name="sex" value="男" checked="checked" /><br/>
         <input type="radio" name="sex" value="女"/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>
  • 登录成功页面LoginSuccess.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
<%--通过getAttribute方法获取到指定的参数名(name)对应的值;若不存在,则返回 null--%>
<%--此时获取到的session对象和客户端访问服务器的是同一个;(都在同一个浏览器)--%>
<%
    String account = (String) session.getAttribute("name");
%>
<%
    out.print("用户==> "+account+"你来了!"+"<br/>");
    out.print("此时会话ID为==>"+session.getId()+"<br/>");
%>
</body>
</html>
  • 页面jspforSession.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>session</title>
</head>
<body>
<%
    session.getId();
    out.print("此时会话ID为==>"+session.getId()+"<br/>");
    out.print("是否为新的会话ID: "+session.isNew());
    out.print("用户==>"+session.getAttribute("name")+"你又来了!");
%>
</body>
</html>
  • 启动浏览器;

在这里插入图片描述

  • 登录成功时;重定向到LoginSuccess.jsp;会话ID不变.

在这里插入图片描述

  • 登录失败时,重定向到login.jsp,会话ID不变.

在这里插入图片描述

  • 同一个浏览器;新开一个窗口;打开jspforSession.jsp ;会话ID也没变,判断是否为新的Session对象为false;

在这里插入图片描述


那么,也就是说
session对象在同一个会话中是共享的 : 在同一个浏览器进行访问 ;使用同一个根目录地址时,(即同一个项目)


会话对象的生命周期

会话对象创建:
会话开始时,在服务器创建.

会话对象销毁
有三种情况:
(1) 服务器关闭时,session对象销毁;
(2)在客户端长时间没有与服务器发生交互时,服务器会自动销毁session对象;
Tomcat服务器默认30分钟自动销毁session对象;
(3)需要安全退出;调用 invalidate( )方法;强制销毁session对象.


关于会话对象销毁处理设置会话时间(客户端与服务器发生交互的时间),可使用两种方式
  • 在jsp中调用HttpSession接口的setMaxInactiveInterval (int interval )方法;设置session的最大非活动时间,以秒为单位,超时将被销毁。如果参数是负数,表示永远不失效。

  • 在web.xml文件中进行配置会话失效时间;(注意是设置以分钟为单位)

<!--配置会话失效时间-->
<session-config>
    <session-timeout>设置的时间(单位为分钟)</session-timeout>
</session-config>

案例:设置会话对象销毁

(1)首先看看setMaxInactiveInterval (int interval )方法的效果;

  • 在页面jspSessionDie_01.jsp中;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>使用设置客户端与服务器交互时间</title>
</head>
<body>
<%
    out.print("此时的会话ID为"+session.getId()+"<br/>");
    out.print("是否为新的会话ID(true:是|false:否)=>"+session.isNew()+"<br/>");
%>
<h3>使用setMaxInactiveInterval (int interval )方法</h3>
<%
   session.setMaxInactiveInterval(20);
   out.print("刚才设置的服务器与客户端最大交互时间==>"+session.getMaxInactiveInterval()+"秒"+"<br/>");
%>
</body>
</html>
  • 启动服务器;访问页面;看到此时会话ID;为新的会话;

在这里插入图片描述

  • 再进行访问请求;会话对象还是之前那个;

在这里插入图片描述

  • 20秒后,再次访问页面;之前的会话对象已经被销毁;此时已创建了新的会话对象.

在这里插入图片描述


(2)在web.xml文件配置会话失效时间;

  • web.xml文件中;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置会话失效时间为1分钟-->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>
</web-app>
  • 在页面jspSessionDie_02.jsp中;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>使用设置客户端与服务器交互时间</title>
</head>
<body>
<%
    out.print("此时的会话ID为"+session.getId()+"<br/>");
    out.print("是否为新的会话ID(true:是|false:否)=>"+session.isNew()+"<br/>");
%>
<h3>在web.xml文件中进行配置</h3>
<%
    out.print("设置的服务器与客户端交互时间==>"+session.getMaxInactiveInterval()+"秒"+"<br/>");
%>
</body>
</html>
  • 启动服务器,访问页面;查看此时会话ID;为新ID;

在这里插入图片描述

  • 再进行访问请求;会话对象还是之前那个;

在这里插入图片描述

  • 经过1分钟后,再次访问页面;之前的会话对象已经被销毁;此时已创建了新的会话对象.

在这里插入图片描述


(3)安全退出; 调用 invalidate( )方法;强制销毁session对象.

  • 先把之前的两种情况的配置都注释掉,保证这次的效果.
  • 页面jspSessionDie_exit.jsp设置invalidate( )方法;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>设置强制销毁会话对象</title>
</head>
<body>
<h3>使用invalidate()方法,强制销毁会话</h3>
<%
    session.invalidate();
%>
</body>
</html>
  • 页面jspSessionDie_03.jsp;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>查看会话对象是否失效</title>
</head>
<body>
<h3>使用invalidate()方法;强制销毁会话</h3>
<%
   out.print("此时会话ID为=>"+session.getId()+"<br/>");
   out.print("是否为新的会话ID(true:是|false:否)=>"+session.isNew());
%>
</body>
</html>
  • 启动服务器,访问页面jspSessionDie_03.jsp;此时为新的会话ID;

在这里插入图片描述

  • 访问页面jspSessionDie_exit.jsp

在这里插入图片描述

  • 再次访问页面jspSessionDie_03.jsp;此时已经创建了新的会话对象;生成了新的会话ID

在这里插入图片描述



application对象


Application对象是javax.servlet.ServletContext类的实例。
主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享。

在一个应用程序中只有一个servletContext对象;存储整个应用程序共享的数据信息;在服务器启动时就创建,在服务器关闭时才会销毁.

常用方法

返回值类型方法注释
ObjectgetAttribute( String name)获取 application 对象中含有参数name的对象
EnumerationgetAttributeNames( )获取 application 对象的所有参数名字
intgetMajorVersion( )获取服务器支持 Servlet 的主版本号
intgetMinorVersion( )获取服务器支持 Servlet 的从版本号
voidremoveAttribute(java.lang.String name)根据参数name删除 application 对象的参数
voidsetAttribute(String key,Object obj)将参数 Object 指定的对象 obj 添加到 application 对象中,添加的对象指定一个索引关键字

application对象中的属性则对所有页面都是共享的.

案例:

  • 页面jspApplication_01.jsp;在这里为设置属性 name 的值为杰杰哥;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jspappication_01</title>
</head>
<body>
<%
    //设置属性name的值为杰杰哥;
    application.setAttribute("name","杰杰哥");
    //获取属性name的值;
    out.print("姓名==>"+application.getAttribute("name")+"<br/>");
    out.print("由于application对象中的属性则对所有页面都是共享的.");
%>
</body>
</html>
  • 启动服务器,在第一个浏览器访问页面jspApplication_01.jsp;

在这里插入图片描述

  • 切换浏览器,用别的浏览器访问该页面;同样的也拿到了属性 name 的值;

在这里插入图片描述


pageContext对象


PageContext对象是javax.servlet.jsp.PageContext类的实例。
用来管理当前网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由JSP容器来完成的。

常用方法

返回值类型方法注释
voidforward(String relativeUrlPath)将页面转发到另一个页面或者 Servlet 组件上
ExceptiongetException( )获取当前页面 Exception 对象
ServletRequestgetRequest( )获取当前页面 request 对象
ServletResponsegetResponse( )获取当前页面 response 对象
ServletConfiggetServletConfig( )获取当前页面 ServletConfig 对象
HttpSessiongetSession( )获取当前页面 session 对象
ObjectgetPage( )获取当前页的面page 对象
ServletContextgetServletContext( )获取当前页面 application 对象
ObjectgetAttribute(String name)获取指定参数name属性值
ObjectgetAttribute(String name,int scope)在指定的范围内获取属性值
voidsetAttribute(String name,Object attribute)设置指定属性及属性值
voidsetAttribute(String name,Object obj,int scope)在指定范围内设置属性及属性值
voidremoveAttribute(String name)删除指定的name 属性
voidremoveAttribute(String name,int scope)在指定范围内删除某属性
voidinvalidate( )获取 servletContext 对象,然后全部销毁

pageContext中的属性默认在当前页面是共享的;


exception对象


Exception对象是java.lang.Throwable类的实例。
处理JSP文件执行时发生的错误和异常只有在JSP页面的page指令中指定isErrorPage=“true”后,才可以在本页面使用exception对象

常用方法

返回值类型方法注释
StringgetMessage( )返回异常信息字符串
StringtoString( )异常信息简单描述
voidprintStackTrace( )显示异常信息的栈执行轨迹
StringgetLocalizedMessage( )返回本地化的异常消息

案例:页面出现异常时,跳转,且打印异常信息;

  • 含有异常信息的页面jspexceptionpage.jsp
<%--errorPage: 当前页面出现异常时跳转到 exceptionpage.jsp 页面 ;属于请求转发 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="exceptionpage.jsp" %>
<html>
<head>
    <title>异常页面</title>
</head>
<body>
<%--这里写个数组越界异常--%>
<%
  int[] arr=new int[2];
  arr[2]=10;
%>
</body>
</html>
  • 跳转过去的打印异常信息字符串页面exceptionpage.jsp
<%--注意page指令设置isErrorPage属性为true,允许使用exception对象--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
    <title>跳转过来</title>
</head>
<body>
<h3>因为有异常,跳转过来</h3>
<%
 out.print("异常信息描述==>"+exception.getMessage());
%>
</body>
</html>
  • 启动服务器

在这里插入图片描述


config对象


Config对象是javax.servlet.ServletConfig类的实例。
config对象作为代码片段配置对象,表示Servlet的配置

常用方法

返回值类型方法注释
ServletContextgetServletContext( )获取所执行的 Servlet 的环境对象
StringgetServletName( )获取执行的 Servlet 的name
StringgetInitParameter(String name)获取指定name的初始参数值
EnumerationgetlnitParameterName( )获取JSP 中所有初始参数名

page对象


Page对象是javax.servlet.jsp.HttpJspPage类的实例。
用来处理JSP网页,它指的是JSP页面对象本身,或者说代表编译后的servlet对象,只有在JSP页面范围之内才是合法的。

常用方法

返回值类型方法注释
ClassgetClass( )获取当前 对象 的类
inthashCode( )获取 对象 的 hash 值
StringtoString( )输出当前对象
booleanequals(Object obj)判断当前对象与指定的对象是否相等
voidcopy (Object obj)将对象拷贝至指定对象中
Objectclone( )复制对象

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JSP(Java Server Pages)是一种基于Java语言的服务器端网页开发技术,其中包括九大内置对象和四大作用域。 九大内置对象是指在每一个JSP页面中,系统自动为开发者创建的九个对象,分别是: 1. request对象:用于获取HTTP请求的信息,如请求参数、请求头等。 2. response对象:用于设置HTTP响应的信息,如设置返回的内容、重定向等。 3. out对象:用于向客户端输出内容,可以通过该对象在页面中生成动态内容。 4. session对象:用于存储用户的会话信息,可以在不同的页面和请求之间共享数据。 5. application对象:用于存储全局的应用程序数据,可供所有用户访问。 6. config对象:用于获取当前JSP页面的配置信息,如JSP的初始化参数等。 7. page对象:代表当前JSP页面本身,可以用于调用页面的方法或属性。 8. exception对象:用于处理JSP页面中的异常,可以获取异常的相关信息。 9. pageContext对象:包含了对其他八个内置对象的引用,可用于简化代码的编写。 四大作用域是指在JSP中定义的存储数据的范围,分别是: 1. page作用域:数据的作用范围限定在当前JSP页面,即页面级别的作用域。 2. request作用域:数据的作用范围限定在一次HTTP请求与响应过程中,可供同一请求中的不同页面共享。 3. session作用域:数据的作用范围限定在用户的整个会话过程中,可供不同请求和页面共享。 4. application作用域:数据的作用范围限定在整个Web应用程序中,可供所有用户和所有请求共享。 通过合理的使用这九大内置对象和四大作用域,可以方便地处理页面间的数据传递和数据共享,提高JSP网页开发的效率和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小智RE0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值