首页 > 代码库 > 开启 J2EE(三)—Servlet

开启 J2EE(三)—Servlet


一、Servlet是什么?

 

 1、J2EE规范之一


  ServletJ2EE13个规范之一,最初由SUN公司制定,规定了Web应用与Web服务器进行协作的一系列标准Java接口(Java Servlet API)和规约。

包括规定了:

  Web服务器可以访问任意一个Web应用中实现Servlet接口的类。

  Web应用中用于被Web服务器动态调用的程序代码位于Servlet接口的实现类中。

 

 2、Web服务器之一

  

  准确的说是Servlet容器,在Servlet规范中,把能够发布和运行JavaWeb应用的Web服务器称为Servlet容器,他的最主要特征动态执行Servlet的实现Servlet容器有TomcatWeblogic,Jboss等等。

 

 3、服务端的Java应用程序

  

  对于开发人员,Servlet是用Java编写的服务器程序(按照Servlet规范),运行在服务端上的,它没有main方法(详见下面的实例),不能够独立的运行,需要由Servlet容器调用和执行

所以对于Java程序的Servlet要运行在Servlet容器中,并由容器管理从创建到销毁的整个过程。

 

 

二、简单实例


我们来实现一个简单的ServletHelloServlet类,简单的输出"HelloServlet"。(通过Tomcat实现,Tomcat的配置这里就不在详解了。

通过Servlet输出页面

   
package examples.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
    
  @WebServlet(name="helloServlet", urlPatterns="/servlet/example")
    public class HelloServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                    this.doPost(request, response);
                }
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
                    response.setContentType("text/html");
                    PrintWriter out = response.getWriter();
                    out.println("Hello Servlet");
                
                    out.flush();
                    out.close();
                }
    
        public void destroy() {
            System.err.println(getServletName()+"生命周期结束");;
        }
        
        public void init() throws ServletException {
            System.out.println(getServletName()+"执行初始化");
        }
    }


说明:

@WebServlet(name="helloServlet",urlPatterns="/servlet/example")

Servlet3.0后的新特性,Servlet3.0支持使用注解配置Servlet。我们只需在Servlet对应的类上使用@WebServlet进行标注,我们就可以访问到该Servlet了,而不需要再在web.xml文件中进行配置。

 

 

运行结果

   


 

三、体系结构


Servlet容器将Servlet动态地加载到服务器上。HTTP Servlet使用HTTP请求和HTTP响应与客户端进行交互。


四、生命周期(工作流程)



 

全过程详解(结合上面代码):

1.加载和实例化  

  Servlet容器负责加载和实例化Servlet,这个过程就是Servlet容器要知道Servlet类的位置,然后加载到容器中,容器在创建Servlet的实例。(其实就是类的实例化)

 

2.初始化

  实例化之后,容器将调用Servletinit()方法初始化这个对象

  初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。(对于每一个Servlet实例,init()方法只被调用一次。)

 

3.处理请求

首先Servlet容器调用Servletservice()方法对请求进行处理。

然后service()方法根据不同的请求类型进行处理,常用的处理方法有doGet()doPost()

ServletRequest:得到客户端的相关信息和请求信息,对请求进行处理;

ServletResponse:设置响应信息。

 

4.退出

容器通过调用Servlet实例的destroy()方法。调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。

 

五、关系对比


 ServletJSP

 ServletJSP经常放在一起讨论,主要是它们都可以动态的生成页面内容;

 --就其代码的表现形式看,JSP是在HTML中插入了Java代码实现的动态页面,Servlet是通过Java动态添加HTML实现的;

 --从发展上看,JSP是Servlet技术的扩展,JSP的出现弥补了Servlet效率低下的问题。本质上是Servlet的简易方式

 具体的JSP实现会在后面的学习中继续研究。

 

 Servletashx

 Servlet给我的感觉就是ASP.NET里的.ashx,它们都可以动态的生成页面内容

 .ashx在IIS下运行,利用其编译器运行,执行生成html代码,以http方式传送到客户端,客户端浏览器来解析执行。

 而Servlet则是在Servlet容器下(如Tomcat)运行,过程还都是一样的。

 

 

六、总结


   Servlet作为J2EE的规范之一,对于实现动态网页,是用于Web开发的基本技术。弄明白Servlet对于J2EE的学习是非常重要的。Servlet的规范也在更新,我们的学习也要跟上,从.NET过渡到J2EE,新事物不断映入(当然很多东西只是表现的不同,实现的原理是很相似的),J2EE真的打开了另一片新的Sky。