但行好事
莫论前程❤

Javaweb基础(六)JSP的四大作用域九大内置对象

什么是Java Server Pages?

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

1.Servlet的三大作用域对象

Web组件在跳转的时候可以共享数据(信息共享),Web组件信息共享必须依赖作用域对象. 我们是把共享的信息先存放在共享对象中再做传递,在目标里面从共享对象中获取数据.

​ Servlet1 ————>作用域对象(数据)———–> Servlet2

根据作用域的大小分成三种:

作用域对象名称对象的类型对象描述
requestHttpServletRequest请求对象,每次新的请求都会创建新的request.
sessionHttpSession会话对象,每次打开新的浏览器,再访问(可以包含多个请求).30分钟
servletContext(application)ServletContext应用对象,描述了这一个Web应用(项目),启动Tomcat创建ServletContext对象,关闭Tomcat销毁该对象.(包含多次会话)

作用域对象如何来共享数据(把数据存放到作用域,从作用域取出数据,修改/删除数据):
所有作用域对象的操作方法都是相同的:

  • 设置共享数据: 作用域对象.setAttribute(String name,Object value)
  • 获取共享数据: Object val = 作用域对象.getAttribute(String name);
  • 删除共享数据: 作用域对象.removeAttribute(String name);

注意:从哪一个作用域中设置共享数据,就只能从该作用域中取出共享数据.
如果需要共享请求中的数据,只能使用请求转发(forward).

img

在request对象中:getParameter/getAttribute分不清:
String getParameter(String name):获取用户输入的参数.
Object getAttribute(String name):获取request中的共享数据,该共享数据是程序猿设置的(setAttribute).

  • ServletConfig的解析;
/**
 * 在javax.servlet包中,定义了ServletConfig接口。
 * Servlet容器使用ServletConfig对象在Servlet初始化时向其传递配置信息。
 *所谓的Serlvet配置信息,就是在Web应用程序中web.xml文件中配置有关Servlet的内容。
 *
 *一个ServletConfig对象对应web.xml中一对<serlvet></servlet><servlet-mapping></servlet-mapping>
 *其生命周期:是一个servlet的实例化,初始化,就绪,销毁
 *相比较与servletContext来说较短
 */
public class ServletConfig_Test extends HttpServlet{

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         ServletConfig servletConfig = getServletConfig();

        //getInitParameter(String name)方法:返回指定名称的初始化参数的值,如果参数不存在则返回null值。
         String blog = servletConfig.getInitParameter("blog");
         //getServletName()方法:获取web.xml文件中配置的Servlet名称。
         String servletname = servletConfig.getServletName();

    }

}
  • ServletContext
/**
 * servletContext对象是Servlet三大域对象之一,每个Web项目都拥有且唯一的一个ServletContext对象,
 * 该对象是Web项目的全局对象或者上下文。Tomcat服务器在启动web项目时,会自动创建一个ServletContext对象,
 * 在关闭时,会自动销毁这个ServletContext对象。ServletContext对象可以在整个Web应用中共享数据资源。
 * 
 * 由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象
 * 实现通讯。
 * 
 *1) 实现数据共享
 *2) 获取全局配置参数
 *3) 请求转发
 *a) 拿取请求转发器,然后转发
 *4) 获取资源文件
 *5) 用来获得文件的MIME的类型.
 * 
 */
public class ServletContext_text extends HttpServlet{
        ServletContext sc ; 

         @Override
         public void init(ServletConfig config) throws ServletException {
             super.init(config) ;
             sc = config.getServletContext() ;//1.
         }

         public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              //第二种方式
              ServletContext sc1 = this.getServletContext() ;
              System.out.println(sc);
              System.out.println(sc1 == sc);
              //第三种方式
              ServletContext sc2 = request.getSession().getServletContext() ;
              System.out.println(sc2 == sc);
          }

         public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              doGet(request, response);
          }

}

2.servletcontext:ServletContext接口和常用方法

1).ServletContext接口,表示Servlet的上下文(环境).

​ ServletContext其实表示的就是当前应用对象,在一个应用中,有且只有一个ServletContext对象,我们习惯吧该对称application. 该对象在Tomcat启动的时候就创建,在关闭Tomcat的时候该对象被销毁. 可以被所有的Web组件共享数据.

2).如何获取ServletContext对象:
  • 方式1:ServletContext ctx = request对象.getServletContext();(Tomcat7才支持)
  • 方式2:ServletContext ctx = request对象.getSession().getServletContext();
  • 方式3:在Servlet类中: :ServletContext ctx = super.getServletContext();
    getServletContext方法是ServletConfig接口中的,而ServletConfig接口是HttpServlet类的父接口.
    获取的ServletContext都是相同的.
3).常用方法:
  • 1):String getContextPath():获取当前应用的上下文路径(<Context path=”XXXX”/>)
    和request.getContextPath是相同的.
  • 2):String getRealPath(String path):返回当前资源名称的真实路径(绝对路径).
  • 3):之前讲解初始化参数,是在<servlet>元素中做的配置,如此一来,该初始化参数就只能当前Servlet使用.
    如果有N个Servlet有相同的初始化参数配置,就得重复配置N次,很不爽,——>全局初始化参数.
    全局初始化参数:可以供所有的Web组件共享,配置如下图图.
    如何获取全局初始化:就只能使用ServletContext对象.getInitParameter(String name)

    img

1).JSP的九大内置对象

JSP中预先定义好的九个Java对象.

查看:JSP翻译成Servlet代码之后,_jspService方法中的九个局部变量.

对象名称对象类型对象描述
pageContextPageContextJSP的四大作用域对象:表示当前JSP页面的作用域.
requestHttpServletRequestJSP的四大作用域对象:表示每一个请求对象.
sessionHttpSessionJSP的四大作用域对象:表示一个会话对象.
applicationServletContextJSP的四大作用域对象:表示当前Web应用对象.
responseHttpServletResponse响应对象.
configServleConfig表示Servlet的配置信息对象.
outJspWriter表示字符输出流对象.
pageObject表示当前JSP翻译成Servlet的对象.
execeptionThrowable异常对象(必须给当前JSP设置为:isErrorPage=”true”)
2).JSP的四大作用域对象:
对象名称对象类型对象描述
pageContextPageContextJSP的四大作用域对象:表示当前JSP页面的作用域.
requestHttpServletRequestJSP的四大作用域对象:表示每一个请求对象.
sessionHttpSessionJSP的四大作用域对象:表示一个会话对象.
applicationServletContextJSP的四大作用域对象:表示当前Web应用对象.

域对象的作用:保存数据,获取数据,共享数据.

保存数据:
pageContext.setAttribute("内容");//默认保存到page域  
pageContext.setAttribute("内容",域范围常量);//保存到指定域中  
//四个域常量  
PageContext.PAGE_SCOPE  
PageContext.REQUEST_SCOPE  
PageContext..SESSION_SCOPE  
PageContext.APPLICATION_SCOPE  
获取数据:
pageContext.getAttribute("内容");  
<p>pageContext.getAttribute("name",<span style="font-family:宋体;">域范围常量</span><span style="font-family:Calibri;">);</span></p>//自动在四个域中搜索数据  
pageContext.findAttribute("内容");//在四个域中自动搜索数据,顺序:page域->request域->session域->application域(context域)  
域作用范围: 
page域: 只能在当前jsp页面使用 (当前页面) 
request域: 只能在同一个请求中使用 (转发) 
session域: 只能在同一个会话(session对象)中使用 (私有的) 
context域: 只能在同一个web应用中使用 (全局的)
赞(0) 打赏
未经允许不得转载:刘鹏博客 » Javaweb基础(六)JSP的四大作用域九大内置对象
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏