javaweb之servlet篇

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

首先你要知道什么是servlet?

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

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

猜你喜欢

转载自blog.csdn.net/qq_36776216/article/details/81043333