sun公司制定的一种用来扩展web服务器功能的组件规范(服务器端的Java应用程序)。具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其它HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层
1.用来扩展web服务器功能(生成动态的Web页面)以前的CGI效率不高,用servlet来扩展替换CGI
客户端发送请求给web服务器,web服务器启动并调用servlet。servlet容器负责解析数据包,也包括网络通讯相关的一些处理。然后将解析之后的数据交给servlet来处理。
注意:可以不使用服务器,而直接向servlet容器发送请求。因为servlet容器也有通信模块,所以可以直接把servlet容器当作web服务器来使用。
2.组件规范(1)组件:是符合一定规范,并且实现部分功能的可以单独部署的软件模块。组件必须部署到容器中才能运行。
(2)容器:也是符合一定规范,并且提供组件的运行环境的程序。
注意:单个的组件,单个的容器都没有意义。只有放在一起才能运行
Tomcat就是一个servlet容器也是一个web服务器
3.servlet容器是怎么运行的:浏览器箱web服务器发送请求web服务器接收数据发送servlet容器然后实例化servlet调用init方法初始化然后调用service方法利用doget或者dopost处理
servlet将处理的结构返回给web服务器然后发送给客户端
servlet的优点只创建一个实例只初始化一次但是可以被调用多次。不同GCI创建多个实例,servlet存在线程安全问题。servlet效率比较高
servlet的创建publicclassservletestextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicservletest(){super();}
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html");PrintWriterout=response.getWriter();out.println("!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.01Transitional//EN\"");out.println("HTML");out.println("HEADTITLEAServlet/TITLE/HEAD");out.println("BODY");out.print("Thisis");out.print(this.getClass());out.println(",usingtheGETmethod");out.println("/BODY");out.println("/HTML");out.flush();out.close();
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html");PrintWriterout=response.getWriter();out.println("!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.01Transitional//EN\"");out.println("HTML");out.println("HEADTITLEAServlet/TITLE/HEAD");out.println("BODY");out.print("Thisis");out.print(this.getClass());out.println(",usingthePOSTmethod");out.println("/BODY");out.println("/HTML");out.flush();out.close();web.xml的配置
?xmlversion="1.0"encoding="UTF-8"?web-appxmlns:xsi="