Servlet

MVC工作流程

Controller接收用户的请求,并决定调用哪个Model来进行处理

Model用逻辑处理用户的请求并返回数据

View将返回的数据呈现给用户

image-20220514134047211

Servlet

Servlet 其实是在 Java Web 容器中运行的小程序。用户通常使用 Servlet 来处理一些较为复杂的服务器端的业务逻辑。

Servlet的配置

基于web.xml

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

<servlet>
    <servlet-name>snoop</servlet-name>
    <servlet-class>SnoopServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>snoop</servlet-name>
    <url-pattern>/snoop</url-pattern>
</servlet-mapping>

基于注解方式

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

@WebServlet(urlPatterns={"/test"})
public class test extends HttpServlet{
	...
}

Servlet的访问流程

image-20220514155142978

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

Servlet的接口方法

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

  1. init()接口

    在 Servlet 实例化后,Servlet容器会调用 init() 方法来初始化该对象,主要是使 Servlet 对象在处理客户请求前可以完成一些初始化工作,例如建立数据库的连接,获取配置信息等工作。 init() 方法在第一次创建 Servlet 时被调用,在后续每次用户请求时不再被调用。

    init() 方法的定义如下:

    public void init() throws ServletException{
    	// 初始化代码
    }
    
  2. service()接口

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

    service()方法的定义如下:

    public void service(ServletRequest request,ServletRequest response) throws ServletException,IOException{
    	// 处理用户请求的代码
    }
    
  3. doGet()/doPost()等接口

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

    此类方法的定义如下:

    public void doGet(ServletRequest request,ServletRequest response) throws ServletException,IOException{
    	// 处理不同HTTP请求的代码
    }
    
  4. destroy()接口

    当Servlet容器检测到一个Servlet对象应该从服务种被移除时,会调用destroy()方法,以便Servlet对象释放它所使用的资源,保存数据到持久存储设备中。例如将内存中的数据保存到数据库中、关闭数据库连接、停止后台线程,把Cookie列表或单击计数器写入磁盘,并执行其他类似的清理活动等。destroy()方法与init()方法相同,只会被调用一次。

    destroy()方法定义如下:

    public void destroy(){
    	// 终止操作的代码
    }
    
  5. 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>
    

    可在 Servlet 中通过 getServletConfig() 获得一些初始化的参数。

  6. getServletInfo()接口

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

Servlet的生命周期

image-20220514231903790

Servlet生命周期指的是Servlet从创建直到销毁的整个过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值