欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javaweb之servlet篇

程序员文章站 2024-02-04 13:36:58
...

学习servlet是javaweb非常关键的一步

首先你要知道什么是servlet?

servlet简单来说就是一段处理请求与响应的一段java代码,sun公司为了方便编程,高效的处理浏览器的请求与响应,就设计了一个servlet接口。

那么servlet怎么工作的呢?

javaweb之servlet篇

 1、init函数进行初始化

2、处理对service的调用处理

3、servlet死亡

初始化阶段:

当客户端向tomcat发送http请求访问servelt程序,tomcat首先会解析请求,检查内存中是否已经有了该servlet对象:

如果直接使用对应的servlet对象;如果没有就创建servlet实例对象,然后通过调用init() 方法实现Servlet的初始化工作。

需要注意的是,在整个servlet的生命周期内,init方法只被调用了一次。

执行阶段:

 在这个阶段,tomcat服务器会为这个请求 创建 代表HTTP请求的ServletRequest对象 和 代表HTTP响应的 ServletResponse对象,然后将他们作为参数传递给service() 方法。servcie() 方法从ServletRequest对象获取请求的信息并做出处理;通过ServletResponse 对象生成响应的结果。在servlet的整个生命周期内,对于servlet的每一次访问请求,tomcat都会调用servlet的service方法,并且创建新的ServletRequest对象和ServletResponse对象。也就是说service() 方法会servlet的生命周期内会被调用多次。

doGet和’doPost由service方法调用

销毁阶段

当服务器关闭时,servlet会随着Web应用的销毁而销毁。

在销毁serlvet之前,tomcat 会调用Servlet的destory方法,以便让Servlet对象释放他所占用的资源

 

sevelet模块代码:

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 DemoServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //之间写上接收相应的参数
        
        //调用service层进而service调用dao层操作数据库 最终结果return到servlet层
   
        //结果返回给相应页面

	}

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

 

servlet的生命周期

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet

(2)创建:通过调用servlet构造函数创建一个servlet对象

(3)初始化:调用init方法初始化

(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求

(5)卸载:调用destroy方法让servlet自己释放其占用的资源

 

另外:servlet获取参数的三种方法:

 String

getParameter(String name) 
         
根据name 获取对应的值

 Map

getParameterMap() 
          
参数名作为key,参数值作为value,封装到map中。

 String[]

getParameterValues(String name) 
          
获取name相同的所有value 例如复选框。

 

另外:

servlet在多线程下其本身并不是线程安全的。

如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全