JSP入门——Application对象

407 阅读2分钟

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

前言

大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍JSP脚本中的9个内置对象中的application对象。

1. JSP脚本中的9个内置对象

JSP脚本中包含9个内置对象,这九个内置对象其实就是JSP页面对应生成的Servlet类中的_jspService()方法中的形参或局部变量。

来看看什么是_jspService方法:

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
​
    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
      return;
    }
​
    final javax.servlet.jsp.PageContext pageContext;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;

所以可以直接在JSP脚本中调用这些对象。

1.1 application对象

application对象用来操作application范围内的数据。application范围是整个Web应用,JSP和Servlet将数据放入到application中,该数据可以被整个Web应用下的Jsp和Servlet使用。

application对象的作用:

  1. 使得整个Web应用的JSP和Servlet可以共享数据。
  2. 可以访问web应用的配置参数。

1.1.1 共享数据

application对象通过使用setAttribute(String attrName,Object value)方法来设定共享数据的属性(attrName)和值(value)。

JSP和Servlet访问属性值需要使用getAttribute(String attrName)。

实例展示:

在index.jsp中定义变量并使用setAttribute来设置属性和值,并输出值。

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
  <title>JSP - Hello World</title>
</head>
<body>
<%!
  int num;
%>
<%application.setAttribute("age",String.valueOf(++num));%>
<%=num%>
</body>
</html>

在test.jsp页面中使用getAttribute来获取对应属性的值并输出。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%=application.getAttribute("age")%>
</body>
</html>

image-20211125215057967

image-20211125215116530

applocation就相当于一个Map容器,把数据根据键(属性)放入到容器中,其他JSP和Servlet根据键来获取对应的值。

使用Servlet来获取属性值和JSP获取有些区别,使用Servlet来获取需要先创建ServletContext实例。

ServletContecxt sc = getServletConfig().getServletContext();
sc.getAttribute("age");

1.1.2 获得Web应用配置参数

使用application对象的getInitParameter(String paramName)方法来获取web应用的配置参数。

web应用的配置参数在web.xml中使用context-param元素配置。

格式如下:

<context-param>
    <param-name>name</param-name>
    <param-value>value</param-value>
</context-param>

所以在使用getInitParameter(String paramName)方法来获取参数之前,需要先配置应用参数。

小结

以上就是关于JSP的九大内置对象之一的Application对象,希望能对读者有所帮助,如有不正之处,欢迎留言评论。