一、定义
Servlet是在服务器端运行的一个小程序,实际上一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的servlet程序。主要用来处理客户端请求、响应给浏览器的动态资源。
二、最基础的Servlet类(直接实现Servlet接口)
1.HelloServlet类
public class HelloServlet implements Servlet{
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet...");
}
@Override
public void destroy() {}
@Override
public String getServletInfo() {return null;}
@Override
public ServletConfig getServletConfig() {return null;}
@Override
public void init(ServletConfig config) throws ServletException {}
@Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {}
}
2.web.xml注册这个Servlet
<!-- 通知tomcat,应用里面有个Servlet,名字叫做HelloServlet,具体的路径是com.mark.servlet.HelloServlet -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.mark.servlet.HelloServlet</servlet-class>
</servlet>
<!-- 注册servlet的映射,servletName:找到上面注册的具体servlet,url-pattern:在地址栏上的path一定要以/开头 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
三、通用Servlet类写法(继承于Servlet的实现类HttpServlet)
可以把具体方法写在doGet()方法中,在doPost()方法中调用执行。这样,无论你提交的是post还是get方法都可以在doGet方法中执行
public class HelloServlet0 extends HttpServlet {
//Get请求会进入这个方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get----");
}
//POST请求会进入这个方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post----");
}
}
public class HelloServlet0 extends HttpServlet {
//Get请求会进入这个方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//具体方法
}
//POST请求会进入这个方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
四、生命周期
1.init(ServletConfig config) 初始化执行一次
执行时间:在创建该Servlet的实例时,就执行该方法。一个Servlet只会初始化一次, init方法只会执行一次。默认情况下是初次访问该servlet,才会创建实例。
默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。 那么这个时候,初次访问,可能会在init方法中逗留太久的时间。我们可以在配置的时候, 使用load-on-startup元素来指定启动时机, 给定的数字越小,启动的时机就越早。 一般不写负数, 从2开始即可
<load-on-startup>1(2,3,4....)</load-on-startup> 数字代表优先级,数字越小,优先级越高
ServletConfig : 代表的是该Servlet对象的配置信息
2.service(ServletRequest req,ServletResponse resp)每次请求
执行时间:每次请求都会执行,一次请求,对应一次service方法的调用。
ServletRequest :代表请求,认为ServletRequest内部封装的是HTTP请求的信息
ServletResponse :代表响应,认为要封装的是响应的信息
3.destroy() 销毁执行
执行时间:Servlet销毁的时候执行,将项目从tomcat的里面移除,正常关闭tomcat就会执行