【JavaWeb学习】servlet及生命周期

servlet介绍

servlet是一个运行在web服务器上的小Java程序,Servlet接收来自web客户端的请求并响应,通常通过http协议。

你可以继承javax.servlet.GenericServlet普通的servlet或者javax.servlet.http.HttpServlet一个http servlet

servlet生命周期

servlet定义了五个方法,说到这5个方法就要先说一下servlet的生命周期了。

servlet在客户端第一次调用的时候创建,创建时会调用init方法,然后执行service方法,当再次有请求该servlet时,不需要重新创建,也就是servlet是单例的,会存在线程安全问题,所以不建议在servlet中定义类变量,而要定义局部变量。那么servlet什么时候销毁呢?servlet实例会常驻内存当中,除非重新启动了服务器,servlet会通过垃圾回收,并且调用destory方法。

  • init(ServletConfig config):servlet容器一旦创建了servelt就会创建调用init,并把包含servlet的配置和初始化信息的ServletConfig 传递给init
  • ServletConfig getServletConfig():返回ServletConfig,包含了servlet初始化参数和启动参数
  • service:接收并响应web客户端的方法
  • getServletInfo: 返回servlet的信息,例如作者,版本号,版权
  • destroy:servlet销毁方法。
servlet继承图

在这里插入图片描述
Servlet是一个接口,而GenericServlet定义了一个普通,无协议依赖的servlet.当然你可以继承HttpServlet来实现一个基于HTTP协议的servlet.GenericServlet继承了ServletConfig接口和Servlet接口。GenericServlet让写servelt变得更加容易,它提供了最简单版本的生命周期方法,init方法和destory方法。以及定义在ServletConfig接口里的方法。如果继承该类,那么需要你重写service方法。

HttpServlet提供了适用与web网站的servlet.子类必须重写至少一个方法,doGet和doPost等,分别对应http请求的get和post方法。继承该类就无需重写service方法,service方法已经根据标准的HTTP请求方法把请求分发给具体的doGet等方法。由于Servlet是单实例,线程安全需谨记。

搭建实例

新建一个servlet,让其直接继承HttpServlet

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public LoginServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.print("get");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

然后在web.xml中配置这个servlet,以变让web容器能否找到它。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>HelloWord</display-name>
	<servlet>
		<servlet-name>login</servlet-name>
		<servlet-class>com.controller.LoginServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/login</url-pattern>
	</servlet-mapping>
</web-app>

/login是请求路径,支持通配符*进行模糊匹配,*可以匹配任意的字符。然后匹配成功后,找到对应的servlet名称,根据这个servlet名称找到对应的servlet类,并构建servlet.注意,前面我们说过servlet只有第一次访问的时候才会构建,然后一直存在于内存中,知道web容器重启才清除。

参考文章

代理设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值