Servlet

基于web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml">
	<display-name>manage</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>
		<description></description>
		<display-name>user</display-name>
		<servlet-name>user</servlet-name>
		<servlet-class>com.sec.servlet.UserServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>user</servlet-name>
		<url-pattern>/user</url-pattern>
	</servlet-mapping>
</web-app>

在web.xml中,Servlet的配置在Servlet标签中,Servlet标签是由Servlet和Servlet-mapping标签组成,两者通过在Servlet和Servlet-mapping标签中相同的Servlet-name名称实现关联,标签的含义如下:

<servlet>:声明Servlet配置入口
<description>:声明Servlet描述信息
<display-name>:定义Web应用的名字
<servlet-name>:声明Servlet名称以便在后面的映射时使用
<servlet-class>:指定当前servlet对应的类的路径
<servlet-mapping>:注册组件访问设置的路径入口
<servlet-name>:指定上文配置的Servlet的名称
<url-pattern>:指定配置这个组件的访问路径

基于注解方式

在Servlet3.0以上的版本中,开发者无须在web.xml里面配置Servlet,只需要添加@WebServlet注解即可修改Servlet的属性

基于注解方式的注解参数

属性名类型描述
nameString指定Servlet的name属性,等价于servlet-name
valueString[]等价于urlPatterns属性
urlPatternsString[]指定一组Servlet的URL匹配模式,等价于url-pattern标签
loadOnStartupint指定Servlet的加载顺序,等价于load-on-startup标签
asyncSupportedboolean声明Servlet是否支持异步操作模式,等价于async-supported标签
initParamsWebInitParam[]指定一组Servlet初始化参数,等价于init-param标签
descriptionStringServlet的描述信息,等价于description标签
displayNameStringServlet的显示名,通常配合工具使用,等价于display-name标签

Servlet的访问流程

在这里插入图片描述

首先在浏览器地址栏中输入user,即访问url-pattern标签中的值;然后浏览器发起请求,服务器通过servlet-mapping标签中找到文件名为userurl-pattern,通过其对应的servlet-name寻找servlet标签中servlet-name相同的servlet;再通过servlet标签中的servlet-name,获取servlet-class参数;最后得到具体的class文件路径,继而执行servlet-class标签中class文件的逻辑。

从上述过程中可以看出,servlet和servlet-mapping中都含有<servlet-name></servlet-name>标签,其主要原因是通过servlet-name作为纽带,将servlet-classurl-pattern构成联系,从而使URL映射到servlet-class所指定的类中执行相应逻辑。

Servlet的接口方法

HTTP有8种请求方法,分别为GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE以及CONNECT方法。Servlet接口中也对应着相应的请求接口:GET、POST、HEAD、OPTIONS、PUT、DELETE以及TRACE,这些接口对应着请求类型,service()方法会检查HTTP请求类型,然后在适当的时候调用doGet、doPost、doPut、doDelete等方法。

init()接口

在Servlet实例化后,Servlet容器会调用init()方法来初始化该对象,主要是使Servlet对象在处理客户请求前可以完成一些初始化工作。init()方法在第一次创建Servlet时被调用,在后续每次用户请求时不再被调用。

public void init() throws ServletException{
	//此处内容为开发者定义的初始化代码
}

service()接口

service()方法是执行实际任务的主要方法。Servlet容器调用service()方法来处理来自客户端的请求,并将格式化的响应写回给客户端,每次服务器接收到一个Servlet请求时,服务器都会产生一个新的线程并调用服务。在service()方法被Servlet容器调用之前,必须确保init()方法正确完成。

public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException
{
	//此处内容为开发者处理客户请求的代码
}

doGet()/doPost()等接口

doGet()等方法根据HTTP的不同请求调用不同的方法。如果HTTP得到一个来自URL的GET请求,就会调用doGet()方法;如果得到的是一个POST请求,就会调用doPost()方法

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
	//此处内容为开发者处理GET请求的代码
	//以此类推,若是POST请求,则调用public void doPost方法
}

destroy()接口

当Servlet容器检测到一个Servlet对象应该从服务中被移除时,会调用该对象的destroy()方法,以便Servlet对象释放它所使用的资源,保存数据到持久存储设备中。destroy()方法与init()方法相同,只会被调用一次。

public void destroy()
{
	//此处内容为开发者进行终止操作的代码
}

getServletConfig()接口

getServletConfig()方法返回Servlet容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含Servlet的初始化参数。开发者可以在Servlet的配置文件web.xml中,使用<init-param>标签为Servlet配置一些初始化参数。

<servlet>
	<servlet-name>servlet</servlet-name>
	<servlet-class>org.test.TestServlet</servlet-class>
	<init-param>
		<param-name>userName</param-name>
		<param-value>panda</param-value>
	</init-param>
	<init-param>
		<param-name>E-mail</param-name>
		<param-value>test@test.net</param-value>
	</init-param>
</servlet>

getServletInfo()接口

getServletInfo()方法会返回一个String类型的字符串,包括关于Servlet的信息,如作者、版本及版权等。

Servlet生命周期

在这里插入图片描述
Sevlet生命周期指的是Servlet从创建知道销毁的整个过程。在一个生命周期中,Servlet经历了被加载、初始化、接收请求、响应请求以及提供服务的过程。

当用户第一次向服务器发起请求时,服务器会解析用户的请求,此时容器会加载Servlet,然后创建Servlet实例,再调用init()方法初始化Servlet,紧接着调用服务的service()方法处理用户GET、POST或者其他类型的请求。当执行完Servlet中对应class文件的逻辑后,将结果返回给服务器,服务器再响应用户请求。当服务器不再需要Servlet实例或重新载入Servlet时,会调用destroy()方法,释放掉所有在init()方法中申请的资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值