- Servlet概述
- 执行原理
- 配置
- 生命周期
Servlet
Servlet全称server applet(java Servlet),用于java编写的服务器程序。主要功能未交互式地浏览和修改数据,生成动态地Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。
Servlet运行于支持Java的应用服务器中,用来扩展基于HTTP协议的Web服务器。
执行原理
1.客户端发送一个http协议至服务器让其接收响应信息
2.服务器启动调用servlet,servlet根据http请求生成响应内容并传给服务器
3.服务器将响应放回给客户端展示
编写一个servlet步骤:
-
定义一个类,实现Servlet接口(或继承HttpServlet)
-
实现接口中的抽象方法(覆写doPost()和doGet)
-
配置Servlet
为了不覆盖不需要的方法,简便代码书写,方便程序员编写,就有了HttpServlet,HttpServlet在应用程序中被广泛使用。
HttpServlet抽象类是继承于GenericServlet抽象类而来的,而GenericServlet又实现了Servlet和ServletConfig接口。使用HttpServlet抽象类时,还需要借助分别代表Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。
代码实现如下:
package cn.sunzoom.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletDemo2")
public class ServletDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("<h1>hello world</h1>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
浏览器访问
输出:
配置
两种配置方法:
- 在web.xml中配置
<!--配置Servlet-->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.srgzoom.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
- 用注释来配置
@WebServlet() -------Servlet3.0之后支持注解配置
@WebServlet("/demo1")
生命周期
(Servlet生命周期的三个方法:init(),servive(),destroy())
- init():当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,我们可以利用init( )方法来执行相应的初始化工作。
- service( ):每当请求Servlet时,Servlet容器就会调用这个方法。第一次请求时,Servlet容器会先调用init( )方法初始化一个Servlet对象出来,然后会调用它的service( )方法进行工作,但在后续的请求中,Servlet容器只会调用service方法了。
- destory():当要销毁Servlet时,Servlet容器就会调用这个方法,在卸载应用程序或者关闭Servlet容器时,就会发生这种情况,一般在这个方法中会写一些清除代码。
package cn.sunzoom.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo1 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Servlet初始划.....");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet.....");
}
@Override
public void destroy() {
System.out.println("Servlet销毁......");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
运行结果顺序如下:
参考https://blog.youkuaiyun.com/qq_19782019/article/details/80292110