天天看点

javaWeb项目之Servlet学习笔记----初识Servlet

1,介绍

Servlet是一门专门用于开发动态web资源的技术,Sun公司在其API中提供了一个Servlet接口(当然,我们不会去直接实现这个接口,而是去继承其实现类会更好),因此,狭义的Servlet是指这个接口,广义的Servlet是指任何实现了这个Servlet接口的类。 使用Servlet开发一个动态web资源,其实就是开发一个Java程序向浏览器输出数据。

  Servlet其实就是一个运行在服务器上得Java程序,Servlet是J2EE十三门技术中的一种,因此我们不能去看J2SE的API文档,如果是初学者,最好能看专门Servlet的API文档。我们来看Servlet的文档介绍:

javaWeb项目之Servlet学习笔记----初识Servlet

  从这个对Servlet接口的介绍就可以看出,如果要实现Servlet接口,就要实现其所有的方法,Servlet程序是运行在web服务器上得,用来接收和响应从客户端发来的请求。当然就像我之前说的,如果自己写一个类来实现Servlet接口,那么就要复写Servlet所有的方法,但是我们可以继承其实现类,例如GenericServlet类或者HttpServlet类,这样只需要复写我们想复写的方法即可。

  Servlet中的方法包括了其生命周期方法和非生命周期的方法。在Servlet中,生命周期方法包括:init(ServletConfig config)、destroy()、service(ServletRequest req , ServletResponse res),也就是Servlet初始化、对请求进行响应服务,和Servlet的销毁。

  除了Servlet的生命周期方法,还有非生命周期方法,如getServletConfig()和getServletInfo()方法,这两个方法可以获得有关该Servlet的一些信息。

  Servlet生命周期是指Servlet实例从创建到响应客户端请求,最后销毁的过程。具体过程如下:

  1,  Server创建一个Servlet的实例,也就是调用了init()方法;

  2,  一个客户端的请求(对象)到达Server;

  3,  Server将请求发送给Servlet;

  4,  Servlet生成对请求的响应(对象);

  5,  Server激活Servlet的service()方法,传递请求对象和响应对象作为参数;

  6,  Service()方法获得请求对象的信息,处理请求,访问资源,获得所需的信息;

  7,  Service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。Service方法还可能激活其他方法处理请求,如doGet()或者doPost()方法;

  8,  对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service方法,将这两个对象作为参数传递给它,无需再调用init()方法。一般Servlet只初始化一次。当Server不在需要Servlet时(一般是Server关闭),Server调用Servlet的destroy()方法销毁Servlet。

  从以上可以看出,Servlet生命周期上得三个方法是由服务器调用,可以说是在Servlet存在开始到销毁这个过程中的某个时刻(如果有事件触发)则必定会被执行的方法称为生命周期方法。

  因此,在Servlet中最重要的就是service()方法,要想从服务器端将资源传回客户端或者向客户端发送数据,都将在service()方法中进行。

  从service(ServletRequest req , ServletResponse res)方法来看,不仅service()方法是由服务器调用执行,连ServletRequest请求对象和ServletResponse响应对象也是由服务器提供,如果我们要写一个简单的数据给客户端,就可以在service()方法中操作ServletResponse响应对象:

  

第一个Servlet程序

package fjdingsd.web;

import java.io.*;
import javax.servlet.*;

public class FirstServlet extends GenericServlet{
     public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException
     {
          OutputStream out = res.getOutputStream();
          out.write("Hello Servlet".getBytes());
     }
}
           

配置web.xml

javaWeb项目之Servlet学习笔记----初识Servlet

这里就有比较重要的知识点了,<servlet>和<servlet-mapping>中的<servlet-name>必须保持一致,<servlet>中的<servlet-class>必须有完整包名和类名,而<servlet-mapping>中的<url-pattern>就是我们可以设置的对外访问路径了,可以自定义路径。这个路径的设置可以不写,则为缺省值,那么浏览器中的输入地址只要有web应用名即可,但是即使设为缺省值,在<url-pattern>中,内容也一定要有斜线:“/”。

javaWeb项目之Servlet学习笔记----初识Servlet

还有一个问题,如果对于多个Servlet在xml文件中的对外访问路径都配置一样的话,同样不能访问,如下图:

javaWeb项目之Servlet学习笔记----初识Servlet
javaWeb项目之Servlet学习笔记----初识Servlet

继续阅读