Servlet是运行在服务器端的java类,负责处理请求和构造响应信息;
Servlet运行在Servlet容器中,并能使用Servelt容器中的服务;
当有一个Http请求发来时,如果请求的是静态资源,那么Web服务器将资源返回,如果请求的是Servlet,那么会将请求交给Servlet容器;
针对同一次Servlet请求,如果Servlet第一次收到Http请求的话,那么Servlet容器将会创建一个Servlet实例,并创建一个线程处理请求;如果是第n次请求,那么Servlet容器将不会重复创建Servlet实例,而是使用多个线程处理请求;
多线程执行Servlet可提高Web容器的性能,降低Web服务器的负担;
HttpServlet是Java Web编程中一个更加具体的Servlet类,实现了Servlet接口。它提供了一些处理HTTP协议的方法,例如doGet()、doPost()等方法,使得Servlet更加灵活、易用。与Servlet接口不同的是,HttpServlet类为每个HttpServletRequest提供了一个HttpServletResponse对象。
HttpServlet接口定义了以下几个方法:
doGet(HttpServletRequest req, HttpServletResponse resp):处理HTTP GET请求。
doPost(HttpServletRequest req, HttpServletResponse resp):处理HTTP POST请求。
doPut(HttpServletRequest req, HttpServletResponse resp):处理HTTP PUT请求。
doDelete(HttpServletRequest req, HttpServletResponse resp):处理HTTP DELETE请求。
service(HttpServletRequest req, HttpServletResponse resp):根据请求方法的不同,分别调用doGet()、doPost()、doPut()、doDelete()方法。
init()方法: 用于初始化。
destroy()方法: 用于销毁。
当然还有独立于协议的抽象类GenericServlet,但不常使用。
Servlet运行在Servlet容器中,其生命周期有Servlet容器进行管理,Servlet生命周期主要有四个阶段:实例化,初始化,处理请求,服务终止4个阶段。
1、加载和实例化
当Servlet容器启动或者用户请求时,Servlet容器会负责加载Servelt类,并使用默认的构造方法创建Servlet实例。
2、初始化
在Servlet实例化后,Servelt容器会调用Servlet类的init()方法初始化Servlet对象;每个Servelt实例只能初始化一次
3、处理请求
Service容器使用service方法处理请求并返回响应,Servlet容器会将Servlet容器创建的两个参数传给service方法——ServletRequest,ServletResponse
4、服务终止
当Servlet容器检测到Servlet实例从服务中被移除时,Servlet容器调用Servelt的destroy()方法,释放所有的资源。
1、HttpServletRequest,HttpServletResponse
HttpServletRequest和HttpServletResponse接口用来处理HTTP请求和响应。它们在http请求的时候被Servlet容器创建,其中HttpServletRequest封装了http的请求信息,它继承了HttpRequest。
HttpServletResponse封装了http的响应信息,继承了HttpResponse。
2、ServletConfig
ServletConfig是Servlet在初始化时从Web容器中获取初始化参数的一个对象。
常用方法:
String getServletName():返回Servlet的名称。
ServletContext getServletContext():返回ServletContext对象。
String getInitParameter(String name):返回指定名称的初始化参数值。
Enumeration
3、ServletContext
它代表着一个Web应用程序运行时的环境。ServletContext是容器在初始化Web应用程序时创建的一个对象,它在整个Web应用程序内部都是共享的。
常用方法
getInitParameter(String name):获取初始化参数的值。
setAttribute(String name, Object object):向ServletContext中添加一个属性。
getAttribute(String name):获取ServletContext中的指定属性值。
getRealPath(String path):获取一个路径的真实路径。
getResourceAsStream(String path):获取一个Java资源作为输入流。
getRequestDispatcher(String path):获取一个请求分派器。
4、HttpSession
HttpSession提供了一种在多个HTTP请求/响应之间共享数据的机制,允许在客户端和服务器之间保持状态信息,它只在一个用户第一次请求时创建。
以下是HttpSession提供的一些常用方法:
setAttribute(String name, Object value):将指定名称的属性设置为指定的值。
getAttribute(String name):返回与指定名称关联的属性值。
removeAttribute(String name):删除指定名称的属性。
invalidate():使此会话无效。
getId():返回指定会话的唯一ID。
HttpSession的工作原理是在服务器端为每个会话创建一个唯一的ID,并将这个ID发送到客户端浏览器中。客户端每次向服务器发送请求时,都会包含这个ID。服务器使用这个ID,找到对应的会话,并从中检索或存储数据。