一、什么是Servlet?
从大和小的两个方面来说,大的就是它是一个在Web中生成动态内容的标准,即是用于开发Web应用程序的基本技术;从小的方面来说它是Java提供的一个接口Servlet,我们也把实现这个接口的类称为Servlet。它和CGI相对,但是它不向CGI一样每次接受一个Http请求都会创建一个进程(想想Chrome),它每次执行完它的第一个请求之后都会驻留在内存中,等待后续的请求。
小的就是一个Servlet应用包过很多个Servlet,而Servlet有运行在Servlet容器中,那什么是Servlet容器啊,在我的理解就是实现Servlet的规范然后暴露出了一些可以让我们写逻辑运行代码的接口,所以每个Servlet类都要实现Servlet接口,它能够生成动态的内容,不向Web服务器一样,只是提供静态资源。更细节的内容看如下的相关文章。Servlet容器将用户的请求传给Servlet应用程序,并将Servlet应用程序的响应回传给用户。比较流行的Servlet容器有Tomcat和Jetty。这两个本质上是Servlet容器 ,而不是Web服务器,但是它们把Web服务器要做的工作也集成到容器中了,所以不需要额外的Web服务器。
二、Servlet的API
我使用的是Servlet的3.1.0版本,有4个Java包:javax.servlet和javax.servlet.http和javax.servlet.annotation和javax.servlet.descriptor
Servlet最核心的技术当然是Servlet接口,它提供与Servlet相关的方法,每个自定义的类都要实现此接口,在这个接口中写出了Servlet是怎么被Servlet容器调用的。
public class TextServlet implements Servlet {
privatetransientServletConfig servletConfig;
public void init(ServletConfig config) throws ServletException {
this.servletConfig = config;
System.out.println("我只是一开始启动的时候才会被调用哦");
}
public Servlet Config getServletConfig() {
return servletConfig;
}
public void service(ServletRequest req, ServletResponse res)throwsServletException, IOException {
System.out.println("快来编写你的业务逻辑吧");
}
public String getServletInfo() {
returnthis.servletConfig.getServletName();
}
public void destroy() {
System.out.println("我要销毁啦");
}
}
当然了web应用嘛,除了应用我们还要想办法去访问到我的Servlet,访问推荐两种方法,1:通过注解的方法访问
@webServlet(name="textServlet" urlpatterns="/textServlet" )
public class TextServlet implements Servlet {}
第二种方法:通过web.xml配置文件来配置
<servlet>
<servlet-name>textServlet</servlet-name>
<servlet-class>om.javaservlet.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>textServlet</servlet-name>
<url-pettern>/textServlet<url-pettern>
</servlet-mapping>
*注意在配置url-pettern是可以给一个Servlet配置多个url,也就是说可以通过多个URL访问一个servlet
Servlet的三个方法的生命周期(常用)
1、init:刚启动Servlet容器时不会调用这个方法,当第一次请求来的时候才会调用该方法
2、service:请求过来后执行的核心业务逻辑
3、destroy:销毁Servlet的时候,Servlet容器自己会调用这个方法