JavaWeb学习笔记--day09--Servlet

Servlet概述

	*什么是Servlet
		*Servlet是JavaWeb的三大组件之一,他输入动态资源。Servlet的作用是处理请求,服务器会把收到的请求交给Servlet来处理,在Servlet中通常需要:
			*接受请求数据
			*处理请求
			*完成响应
	*实现Servlet的三种方式
		*实现javax.servlet.Servlet接口
		*继承javax.servlet.GenericServlet类,与所有协议相关
		*继承javax.servlet.http.HttpServlet类,与HTTP协议相关
		通常我们会去继承HttpServlet类来完成我的们Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习
		Servlet.java
		public interface Servlet{
			public void init(ServletConfig config) throws ServletException;
			//获取Servlet的配置信息
			public ServletConfig getServletConfig();
			public void service(ServletRequest req,ServletResponse res)
				thorws ServletException,IOException;
			//获取Servlet的信息,一般没用
			public String getServletInfo();
			public void destory();
		}//五个方法

浏览器访问Servlet路径
要使浏览器与Servlet联系起来,需要配置web.xml文件
在这里插入图片描述
生命周期方法
void init(ServletConfig):出生之后(1次),第一次在浏览器被访问
void service(ServletRequest request,ServletResponse response):每次处理请求时会被调用
void destory():临死之前(1次),释放非内存资源,尽可能不在这里释放资源。关闭服务器。
特性
单例,一个类只有一个对象;当然可能会存在多个Servlet
线程是不安全的。
Servlet类由我们来写,但对象由服务器来创建,由服务器来调用相应方法

ServletConfig接口介绍
一个ServletConfig对象,对应一段web.xml中Servlet的配置信息servlet
在这里插入图片描述
API:
Sting getServletName(),获取的是servlet-name中的内容;
ServletContext getServletContext():获取Servlet上下文对象
String getInitParameter(Sting name):通过名称获取指定初始化参数的值,getInitParameter(“p1”);
Enumeration getInitParameterNames():获取所有初始化参数的名称,Enumeration是一个集合

GenericServlet

自己编写一个AServlet模拟GenericServlet
public class AServlet implements Servlet {
	/*
	 *模拟GenericServlet 
	 */
	private ServletConfig servletConfig;
	//需要就写,不需要就不写
	@Override
	public void destroy() {
		System.out.println("我要死额");
	}
	/*
	 * 请放心,这个方法一定会在init()方法之后被调用
	 */
	@Override
	public ServletConfig getServletConfig() {
		return servletConfig;
	}
	//没有用的东西,实现与否都可以
	@Override
	public String getServletInfo() {
		return "我是一个servlet";
	}
	//生命周期方法,由tomcat调用一次。
	//是这些方法中第一个被调用的,他会在构造器创建后第一个被调用。
	@Override
	public void init(ServletConfig servletConfig) throws ServletException {
		//把tomcat传递的ServeltConfig赋值给本类的一个成员
		this.servletConfig=servletConfig;
		init();//调用用户可能初始化的函数 init
	}
	
	/*
	 * 这个方法是本类自己定义的,不是Servlet本身的方法
	 */
	public void init() {
		//这里写用户自己想做的初始化
	}
	@Override
	public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
		System.out.println("每次处理请求都会被调用");
	}
	
	public ServletContext getServletContext() {
		return servletConfig.getServletContext();
	}
	
	public String getServletName() {
		return servletConfig.getServletName();
	}
	
	public String getInitParameter(String name) {
		return servletConfig.getInitParameter(name);
	}
}

编写一个AServlet的子类BServlet

public class BServlet extends AServlet{

	@Override
	//public void init(ServletConfig servletConfig) throws ServletException {
	public void init() {
		// TODO Auto-generated method stub
		System.out.println("初始化");
		/*
		 * 这个会覆盖AServlet里的init方法,导致下面方法空指针异常
		 * 解决方法:在AServlet中重新定义一个init()方法
		 * 这里重写无参init方法,服务器调用有参init。不由tomcat调用,不是生命周期方法
		 */
	}

	@Override
	public void service(ServletRequest servletRequest, ServletResponse servletResponse)
			throws ServletException, IOException {
		String value = getInitParameter("p1");
	}
	
}

GenericServlet子类CServelt

public class CServlet extends GenericServlet {
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("哈哈哈 初始化");
	}
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("Hello World");
	}
	private void destory() {
		// TODO Auto-generated method stub
		System.out.println("destory()");
	}
}

HttpServlet

在这里插入图片描述
在这里插入图片描述

Servlet细节

**Servlet与线程安全**
	因为同一个类型的Servlet只有一个实例对象,那么就有可能会出现一个Servlet同时处理多个请求。所以线程是不安全的,但也说明Servlet的工作效率很高
	所以
		轻易不要再Servlet中创建成员,创建局部变量即可
		可以创建无状态成员。没有成员只有一些方法的类
		可以创建有状态的成员,但状态必须为只读的。有只有get方法的成员的类

**让服务器启动时就创建Servlet**

在这里插入图片描述
url-pattern
充当过滤器的作用,现在已经有过滤器了,所以这个不常用了
在这里插入图片描述

web.xml文件的"继承"

在这里插入图片描述
jsp是由Tomcat的JspServlet处理的,详见tomcat里的web.xml
web中的servlet-class内容通过反射得到类

ServletContext

**ServletContext概述**

在这里插入图片描述
获取ServletContext
在这里插入图片描述
域对象的功能
在这里插入图片描述
获取应用初始化参数
在这里插入图片描述
获取资源相关方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网站访问量统计案例

在这里插入图片描述
获取类路径资源
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值