web_day34_servlet生命周期和配置详解

本文介绍Servlet的三种创建方式:实现Servlet接口、继承GenericServlet抽象类、继承HttpServlet抽象类;探讨Servlet的生命周期,包括创建、初始化、服务和销毁阶段;并讲解如何通过注解和XML配置进行Servlet的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、servlet创建的方式

  • 实现servlet接口,重写5个方法
package com.itheima.web.servlet;

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 AServlet implements Servlet {

	@Override
	public void init(ServletConfig config) throws ServletException {

	}

	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		System.out.println("servlet创建方式1:实现servlet接口,实现5个方法");
	}

	@Override
	public void destroy() {

	}

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

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

}
  • 继承GenericServlet抽象类,重写service方法
package com.itheima.web.servlet;

import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

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

	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		System.out.println("servlet创建方式2:继承GenericServlet抽象类,实现service方法");
	}

}
  • 继承HttpServlet抽象类
package com.itheima.web.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public CServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("servlet创建方式3:继承HttpServlet抽象类,根据需要(如果是get请求,书写doGet方法;如果是post请求,书写doPost方法)重写doXXX方法");
	}

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

}

注解取代XML配置的方式

package com.itheima.web.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="AServlet",urlPatterns="/AServlet")
public class AServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public AServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		System.out.println("调用成功");
	}

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

}

2、servlet生命周期

2.1 生命周期

一个对象的创建到销毁

2.2 创建的问题

与Servlet相关的对象,都由服务器tomcat来负责创建的

2.3 默认情况

  • 用户第一次发送请求,由服务器创建Servlet实例
    • 一种类型的Servlet只会创建一个实例对象
  • 服务器容器创建servlet实例的时候,会调用初始化方法init(ServletConfig config)
    • init方法在整个Servlet生命周期中只会被执行一次
  • 紧接着会调用服务方法service(ServletRequest request,ServletResponse response)
    • service方法在整个Servlet生命周期中会被调用多次
    • 用户发送一次请求,调用一次
  • 当正常关闭服务器或者将这个项目从服务器容器中移除的时候,调用销毁方法destory()
    • destory方法在整个Servlet生命周期中只会被调用一次
    • destory在关闭服务器之前调用

其他情况,比如配置配置

3、servlet相关配置

3.1 服务器启动时创建servlet(开发时很少用

除了默认情况(用户第一次发送请求),在web.xml文件中配置load-on-startup,让servlet在服务器启动的时候就被创建以及初始化

案例

<?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_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>web_day34</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	
	<servlet>
		<servlet-name>AServlet</servlet-name>
		<servlet-class>com.itheima.servlet.AServlet</servlet-class>
		<!-- 服务器启动的时候初始化 -->
		<load-on-startup>2</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>AServlet</servlet-name>
		<url-pattern>/AServlet</url-pattern>
	</servlet-mapping>

</web-app>
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class AServlet implements Servlet {

	@Override
	public void destroy() {

	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("AServlet被初始化了……");
	}

	/**
	 * 所有用户请求的代码写在service方法中
	 */
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		// 解决浏览器乱码问题
		response.setContentType("text/html;charset=utf-8");
		// 向浏览器输出数据
		response.getWriter().write("Servlet快速入门");
		System.out.println("这是我的一个servlet程序!");
	}

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

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

}

3.2 配置访问路径url-pattern

1. 完全匹配

<url-pattern>/DServlet</url-pattern>

2. 目录匹配

<url-pattern>/a/b/*</url-pattern>

只要是a目录下面的b目录下的任何内容

3. 扩展名匹配

<url-pattern>*.do</url-pattern>

只要后缀名是.do都可以匹配到

4. 匹配所有

<url-pattern>/*</url-pattern>

只要是这个项目下面的内容都可以匹配到这个servlet中去

5. 缺省的

<url-pattern>/</url-pattern>

访问的内容与配置的越接近,优先级越高

eclipse配置servlet模板

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ${primary_type_name} extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public ${primary_type_name}() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
	}

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值