栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaWeb(三)Servlet基础

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb(三)Servlet基础

文章目录

一、Servlet生命周期

1.1.1生命周期方法执行过程1.1.2 Servlet特征1.1.3Web容器启动时创建Servlet实例1.1.4 Web容器中的两个Map1.1.5关于getServletInfo()方法 1.2 ServletConfig

1.2.1 什么是 ServletConfig?1.2.2获取ServletConfig对象

是连接Web服务端与Java程序的协议 ,是自重通信规范。
其主要功能是很具客户提交的请求,调用服务器相关Java代码,完成对请求的处理与运算。

一、Servlet生命周期 1.1.1生命周期方法执行过程

Servlet生命周期是指Servlet对象的创建,初始化,服务的执行及最终的销毁整个过程。

Alt+Shift+S+O 生成带参构造
Alt+/ 生成无参构造
建立SomeServlet类

package com.faith.servlets;

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class SomeServlet implements Servlet {
	public SomeServlet() {
//		super();
		System.out.println("创建SomeServlet实例");
	}
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("销毁SomeServlet实例");
	}

	@Override
	public ServletConfig getServletConfig() {
		return null;
	}

	@Override
	public String getServletInfo() {
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("初始化SomeServlet实例");
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("执行SomeServlet实例的service方法");
	}

}

请请求映射为Servlet
在web.xml种写如下代码:
注册Servlet:
(1)Servlet类2的注册
(2)url映射关系注册;缺一不可

弄了半年,
destroy()在不在使用当前servlet时执行,即当服务器停止时。
停止服务器的两种方式:

不会出现destroy()执行

在这里属于正常终止,会执行destroy()方法
(1)项目部署后启动服务器,发现并没有执行Servlet的无参构造器,说明在Web容器启动时并没有创建Servlet对象。
(2)用户请求提交后,马上可以看到无参构造器,init()方法,service()方法均执行。
(3)刷新页面,只会执行

1.1.2 Servlet特征

(1)Servlet是单例多线程的。
(2)一个Servlet实例指挥执行一次无参构造器与init()方法,并且是在第一次访问时执行。
(3)用户每提交一次对当前Servlet的请求,就会执行一次service()方法。
(4)一个Servlet实例指挥执行一次destroy()方法,在应用停止时执行。
(5)由于Servlet是单例多线程的(多个浏览器页面可以同时访问),所以为了保证其线程安全性,一般情况下是不为Servlet类定义可修改的成员变量的。因为每个线程均可以修改这个成员变量,会出现线程安全问题。
(6)默认情况下,Servlet在Web容器启动时是不会实例化的。

1.1.3Web容器启动时创建Servlet实例

修改web.xml文件

1

类似于执行优先级

1.1.4 Web容器中的两个Map

servet实例核创建好后,会将该servdet实例的引用存放到一个 Map集合中,该Map集含的’key为URI,而value 则为 servet实例的引用,即 Map。当web容器从用户请求中分离出URl后,会首先到这个Map中查找是否存在其所对应的value若存在,则直接调用其 servicel方法。若不存在,则需要创建该Servet实例。
若请求的serviet实例不存在,web容器又是根据什么创建这个Servlet实例的呢?在web容器的内存中,还存在一个Map集合。该Map集合的key为 URl,而value 0则为web.xml中配用的与之对应的 servet的全限定性类名,即-Map 当web容器从用户请求中分离出URI后,到第一个Map中又没有找到其所对应的Serwlet实例,则会马上查找这第二个 Map,从中找到其所对应的英名,再根据反射机制,创建这个servlet实例。然后再将这个创建好的servlet的引用放入到第一个Map中。

1.1.5关于getServletInfo()方法

servlet接口中的方法getServletInfo(),是程序设定自己定义饿有关当前servlet的一些基本信息,不属于servlet生命周期中的方法。对程序的运行没有任何影响与作用。仅仅是返回一些让他人阅读的信息。

1.2 ServletConfig 1.2.1 什么是 ServletConfig?

在servlet接口的init()方法中具有唯一的一个参数ServletConfig。ServletConfig是一个接口,就是servlet配置,即在web.xml中对当前servlet类的配置信息,Servlet规范将servlet的配置信息全都封装到ServletConfig接口对象中。
在web容器调用init()方法时,web容器首先会将web.xml中当前servlet类的配置信息封装为一个对象。这个对象的类型实现了ServletConfig接口,web容器会将这个对象传递给init()方法中的ServletConfig参数。

1.2.2获取ServletConfig对象

由于ServietConfig中可以获取到Senvdet 的打始化参数,获取到 SenletContext对象,而这些参数与对象在进行业务逻辑处理时,即执行 service()方法时需要经常访问,很重要,所以servletConfig对象也就显得很重要了。
由于servletConfig对象是web容器通过init()方法传选给当前servlet类的,而init()方法只会在 servlet对象初始化时调用一次。所以,需要在init方法中将servletConfig 对象传递给servlet的servletConfig 成员变量,这样service方法即可使用SerdetConfig对象了。也就是说,我们需要在servlet中声明一个 ServdetConfig 成员变量。-

private ServletConfig config;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		this.config = config;
		System.out.println("config = " + config);
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778644.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号