Java Web复习——task03:JSP 内置对象和生命周期

文章目录

  • 前言
  • 一、JSP内置对象
    • 1.1 HttpServletRequest类和Request对象
    • 1.2 HttpServletResponse类和Response对象
    • 1.3 JspWriter类的out对象
    • 1.4 HttpSession类的session对象
    • 1.5 ServletContext类的application对象
    • 1.6 PageContext类的PageContext对象
    • 1.7 ServletConfig类的Config对象
    • 1.8 Object类的Page对象
    • 1.9 Exception对象
  • 二、生命周期
    • 2.1 理解JSP底层功能的关键就是去理解它们所遵守的生命周期
    • 2.2 JSP编译
    • 2.3 JSP初始化
    • 2.4 JSP清理
    • 2.5 JSP执行
  • 三、Servlet的配置方法
    • 3.1 web.xml中Servlet的注解
    • 3.2 注解访问Servlet


前言

为了简化 Web 程序的开发过程,JSP 提供了由容器实现和管理的内置对象,也可以将其称为固有对象,隐含对象。这些内置对象在所有的 JSP 页面中都可以直接使用,不需要 JSP 页面编写者来实例化。JSP页面的内置对象被广泛应用与 JSP 的各种操作中,例如应用 request对象来处理请求、应用 out 对象向页面输出信息,应用 session 对象来保存数据等。


一、JSP内置对象

1.1 HttpServletRequest类和Request对象

代表请求对象,主要用户接受用户端通过HTTP协议连接传输服务器的数据

1.2 HttpServletResponse类和Response对象

代表响应对象,主要用于向客户端发送数据

1.3 JspWriter类的out对象

主要用于向客户端输出数据,out的基类是jspWriter

1.4 HttpSession类的session对象

主要用来分别保存每个月的信息与请求关联的会话;会话状态的维持是web应用开发者必须面对的问题

1.5 ServletContext类的application对象

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

1.6 PageContext类的PageContext对象

管理网页属性,为jsp页面包装页面的上下文,管理对属于jsp的特殊可见部分中已经命名对象的访问,它的创建和初始化都是由容器来完成的

1.7 ServletConfig类的Config对象

代码片段配置对象,标识Servlet的配置

1.8 Object类的Page对象

处理jsp页面,是object类的一个实例,指的是jsp实现类的实例

1.9 Exception对象

处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true

二、生命周期

2.1 理解JSP底层功能的关键就是去理解它们所遵守的生命周期

JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。

以下是JSP生命周期中所走过的几个阶段:

  1. 编译阶段:
    servlet容器编译servlet源文件,生成servlet类

  2. 初始化阶段:
    加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

  3. 执行阶段
    调用与JSP对应的servlet实例的服务方法

  4. 销毁阶段
    调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

很明显,JSP生命周期的四个主要阶段和servlet生命周期非常相似,下面给出图示:
Java Web复习——task03:JSP 内置对象和生命周期_第1张图片

2.2 JSP编译

当浏览器请求JSP页面时,JSP引擎首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

编译的过程包括三个步骤:

  • 解析JSP文件
  • 将JSP文件转为servlet
  • 编译servlet

2.3 JSP初始化

容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法就行了,就像下例:

public void jspInit(){
     
	//初始化代码
}

一般来讲程序只初始化一次,servlet也是如此,通常情况下我们可以在jspInit() 方法中初始化数据库连接、打开文件和创建查询表。

2.4 JSP清理

JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

jspDestory()文件在JSP中等价于servlet中的销毁方法。

jspDestory()方法的格式如下:

public void jspDestory(){
     
	//清理代码
}

2.5 JSP执行

格式如下:

void_jspService(HttpServletRequest request, HttpServletResponse response)
{
     
	// 服务端处理代码
}

_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生7个HTTP方法的反应,比如GET、POST、DELETE等等。

三、Servlet的配置方法

3.1 web.xml中Servlet的注解

代码:

<servlet>
		<!-- servlet的内部名称,自定义 -->
		<servlet-name>DemoAction</servlet-name>
		<!-- servlet的类全名:包名+类名 -->
		<servlet-class>com.uplooking.controller.DemoAction</servlet-class>
		<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
		<!-- servlet的内部名称,一定要和上面的内部名称保持一致 -->
		<servlet-name>DemoAction</servlet-name>
		<!-- servlet的映射路径(访问servlet的名称)-->
		<url-pattern>/DemoAction</url-pattern>
</servlet-mapping>
  1. 首先,从浏览器中发送请求,是从当前工程中的路径与servlet-mapping标签中的url-pattern的标签值进行匹配。
  2. 根据这个映射值,找到servlet-mapping标签中的servlet-name的值与servlet标签中的servlet-name进行匹配
  3. 匹配到以后,找到servlet标签中的servlet-class标签中对应的src文件夹下的全路径。
  4. 从而调用并执行相应的servlet类。

注意:

servlet-mapping标签中的servlet-name的值与servlet标签中的servlet-name必须相同。

初始化参数

<init-param>
			<param-name>abc</param-name>
			<param-value>123</param-value>
</init-param>

一个Servlet可以配置一个或多个初始化参数。

在应用程序中,可以使用Servlet的getInitParameter(String param)来读取初始化param对应的参数;若要读取所有的初始化参数名称,则可以使用getInitParameterNames()方法获得所有的参数名称,类型为枚举(Enumeration).
//获取所以初始化参数
Enumeration<String> strs=this.getInitParameterNames();
while(strs.hasMoreElements()){
     
	str=strs.nextElement();
	System.out.println(str+"   "+this.getInitParameter(str));
	//-->abc 123
	//-->aaa 111
	
}
这些初始化参数也可以由ServletConfig对象获取,Servlet提供getServletConfig()方法提供ServletConfig对象。由ServletConfig获取初始化参数和由Servlet获取初始化参数的方法是一样的。
//两种调用getInitParameter的情况,视情况而定
//this是指ServletConfig的对象config
String str=this.getInitParameter("abc");//第一种

String str=config.getInitParameter("abc");//第二种
初始化参数的一个有趣应用是进行单个文件的访问加密,原理是将用户名和密码写入初始化参数中,这样的好处是简单、方便,缺点是不灵活,安全性也不高,适用于临时性的措施。

上下文参数

<context-param>
		<param-name>root</param-name>
		<param-value>123</param-value>
</context-param>
获取context-param需要使用ServletContext对象。ServletContext对象可以通过在Servlet中的getServletConfig().getServletContext()方法获得。得到ServletContext对象后,使用getInitParameter(String param)方法获取名为param的参数值,通过getInitParameterNames()获取所有的context-param名称。
ServletContext context=this.getServletContext();
String root=context.getInitParameter("root");
System.out.println("root="+root);

3.2 注解访问Servlet

只需在对应的servlet类中添加servlet注解即可,从浏览器发送请求时,是用当前“工程”下的路径,会去对应servlet类的上面寻找是否存在对应url名称的@webServlet注解,存在的话,调用并执行对应的servlet类。

格式:

@WebServlet("/DemoAction")
public class DemoAction extends HttpServlet{
     
}

总结:

共同点:注解访问servlet和web配置文件访问servlet都能完成对servlet的访问。

注解访问servlet

优点:代码少,可读性强,易于理解。

缺点:如果大量使用servlet注解,servlet类文件数量过多,不便于查找和修改。

web配置文件访问servlet

优点:集中管理各servlet类路径的映射路径,便于修改和管理。

缺点:代码多,可读性不强,不易于理解。

注意:

有时候在服务器上运行的web程序数据不能及时更新,记得重启一下服务器或者清除浏览器缓存。


你可能感兴趣的:(JavaWeb期末复习,jsp,servlet,java,javaweb)