关于Servlet讲解

本文介绍了Servlet相关知识。Servlet是运行在服务器上的Java程序,包含servlet、filter、listener三个技术点。阐述了简单servlet实现步骤,介绍了Servlet的API和生命周期,还讲解了web.xml配置、服务器启动实例化servlet配置,以及ServletContext对象的概念、生命周期和作用。

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

1.什么是servlet?

servlet是运行在服务器上的java程序,是sun公司提供的一种规范(接口),用来处理客户端的请求,响应给浏览器的动态资源;servlet的实质依然是java;

2.servlet中包含的三个技术点:

servlet技术,filter(过滤器)以及listener(监听器)。

3.一个简单的servlet的实现步骤:

创建类实现servlet接口,覆盖未实现的方法—service(),对web.xml进行servlet配置;

一般的实际开发中,我们通常不会采用实现servlet接口的方式来书写一个servlet,而是通过继承HttPServlet类,覆盖doget()和dopost()方法,再通过web.xml进行配置;

每次访问service()方法都会创建一对新的request和response对象,他们两个是成对存在的。

4.Servlet中的API(生命周期)

Servlet接口中的方法:

init(ServletConfig config)初始化方法,执行时期:在servlet对象创建时期执行;ServletConfig代表该servlet对象配置信息

service(ServletRequest req,ServletResponse res)

执行时期:每次访问的时候都会去执行,ServletRequest、ServletResponse分别代表请求和响应;

Destroy()销毁方法:执行时期:服务器关闭时候

HttpServlet中的方法:

Init()

doGet(HttpServletRequest req,HttpServletResponse res)

doPost(HttpServletRequest req,HttpServletResponse res)

destroy()

5.Servlet的生命周期:

Servlet什么时候被创建?

默认第一次访问servlet时创建该对象

Servlet什么时候被销毁?

服务器关闭的时候销毁

每次访问时必执行的方法

service(ServletRequest req,ServletResponse res)

如果对一个servlet访问了10次,那么我们可以得出结论:

对该servlet中的init()访问一次,destory()访问一次,service()访问10次,request对象和response对象创建了10个。

6.关于web.xml的最基本配置:

<servlet>

  <servlet-name>DemoServlet01</servlet-name>

  <servlet-class>com.servlet.DemoServlet01</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>DemoServlet01</servlet-name>

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

  </servlet-mapping>

<servlet>里面主要配置了servlet的一些信息, <servlet-name>标签定义了servlet的名称,以便在其他地方起作用;<servlet-class>指出来了servlet类的路径,<servlet-mapping>标签定义了servlet的URL路径映射信息,即在浏览器中访问该servlet的URL路径。其中<servlet-name>标签指定了要映射的servlet类,<url-pattern>标签则定义了访问该servlet的URL相对路径

其中url-pattern的配置有三种方式:

完全匹配:访问的资源与配置的资源完全相同才能访问到

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

目录匹配:格式:虚拟的目录/*   *代表目录

<url-pattern>/aa/bbb/cc/*</url-pattern>

扩展名匹配:格式:*.扩展名

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

注意:第二种和第三种不能混用

7.服务器启动实例化servlet配置:

Servlet的创建时间:默认第一次访问的时候创建,为什么是默认?

当在servlet的配置时 加上一个配置 <load-on-startup> servlet对象在服务器启动  时就创建

缺省servlet,在url-pattern后面配置一个 / 即可;代表 servlet是缺省的servlet

什么是缺省?当你访问的资源地址所有的servlet都不存在时,缺省的servlet负责处理;其实servlet中所有的资源的响应都是由servlet来负责,包括静态资源;

8.ServletContext对象:

什么是ServletContext对象?servletContext代表一个web应用的环境对象,它的内部封装该web应用的信息,并且,在一个web应用中ServletContext对象只有一个。

比较:一个web应用可以拥有多个servlet对象,但是却只能拥有一个ServletContext对象。

9.ServletContext对象的生命周期:

创建:服务器启动或者发布web应用,web应用被加载;

销毁:服务器关闭,web应用被卸载;

如何获取ServletContext对象?

通过init中的ServletConfig config调用getServletContext获取

ServletContext servletContext = config.getServletContext();

ServletContext servletContext = this.getServletContext();

获取到web应用中全局的初始化参数

 
 

web.xml中配置初始化参数

 
 

(2)获得web应用中任何资源的绝对路径

方法一:String path = context.getRealPath(相对于该web应用的相对地址);

方法二:利用类加载器的方式,注意这里需要用到的依然是相对路径(相对于classes而言的)

具体详细代码如下:

	@Override
	public void init(ServletConfig config) throws ServletException {		
		//1.获取<servlet-name>DemoServlet01</servlet-name>中的name信息
		String servletName = config.getServletName();
		System.out.println(servletName);//DemoServlet01
		//2.获取该servlet的初始化参数
		String initParameter = config.getInitParameter("url");
		System.out.println(initParameter);//jdbc:mysql:///mydb
		//3.获得servletcontext对象两种方式
		ServletContext servletContext = config.getServletContext();
		//ServletContext servletContext = this.getServletContext();
		System.out.println("这一个初始化方法正在运行!");
		//4.获取全局的初始化参数,不属于某一个标签里面的
		String initParameter2 = servletContext.getInitParameter("driver");
		System.out.println(initParameter2);//com.mysql.jdbd.Driver
		//5.获取web应用中任何资源的绝对地址(方法一)
		String realPathA = servletContext.getRealPath("/a.txt");
		System.out.println(realPathA);
		String realPathB = servletContext.getRealPath("/WEB-INF/b.txt");
		System.out.println(realPathB);
		String realPathC = servletContext.getRealPath("/WEB-INF/classes/c.txt");
		System.out.println(realPathC);
		//d.txt永远访问不到
		//6.利用类加载器来获取资源中的绝对地址(方法二)
		//利用类加载器getResource("c.txt"),中的变量值仍然是一个相对路径,此时的路径是相对于classes而言,上一种方式不一样,上一种是相对于web应用而言
		String path = DemoServlet01.class.getClassLoader().getResource("c.txt").getPath();
		System.out.println(path);
	}

ServletContext是域对象。

什么是域对象以及什么是域?域,即区域;所谓的域对象就是存贮数据的区域

ServletContext域对象的作用范围:整个web应(所有的web资源都可以随意向  servletcontext域中存取数据,数据可以共享)

域对象的通用的方法:

setAtrribute(String name,Object obj);

getAttribute(String name);

removeAttribute(String name);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值