java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要为大家详细介绍了 servlet 基础的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Servlet 是一门专门用于开发动态 web 资源的技术,Sun 公司在其 API 中提供了一个 Servlet 接口 (当然,我们不会去直接实现这个接口,而是去继承其实现类会更好),因此,狭义的 Servlet 是指这个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类。 使用 Servlet 开发一个动态 web 资源,其实就是开发一个 Java 程序向浏览器输出数据。
Servlet 其实就是一个运行在服务器上得 Java 程序,Servlet 是 J2EE 十三门技术中的一种,因此我们不能去看 J2SE 的 API 文档,如果是初学者,最好能看专门 Servlet 的 API 文档。我们来看 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(ServletTequest req , ServletResponse res) 方法来看,不仅 service()方法是由服务器调用执行,连 ServletTequest 请求对象和 ServletResponse 响应对象也是由服务器提供,如果我们要写一个简单的数据给客户端,就可以在 service() 方法中操作 ServletResponse 响应对象:
作为入门,那么我们先不用开发工具 IDE 来写 Servlet,而是先手工编写,这样有助于理解 Servlet 的底层原理。在 Tomcat 的【webapps】目录下建立我的 web 应用,web 应用所在目录为【myservlet】,我们先在【myservlet】目录下创建【WEB-INF】,并且再在【WEB-INF】中创建【classes】目录,【lib 目录】和 web.xml 文件,在【classes】目录中,建立我的 Java 程序:FirstServlet.java
因为自己编写的 Servlet 是由服务器调用,因此我们所创建的 Servlet 实现类一定要是公共的,开始说了,我们没必要实现 Servlet 的全部方法,因此我们向客户端传数据只需要复写 service()方法即可,那么我们只需要继承 Servlet 的实现类,接着取得相应对象 ServletResponse 的输出流 ServletOutputStream 就可以向客户端输出数据了,同时因为输出是字节流,所以需要将字符转换成字节数组,再手动写入自定义包名和要导入的 Java 包:
- 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());
- }
- }
使用 cmd 对这个 Java 程序进行编译,但要注意,"javac" 这个只是默认导入了 J2SE 的包,而没有 J2EE 的包。那么我们去哪里找 J2EE 的 Servlet 包呢?其实,因为 Tomcat 支持 Servlet 所以 Tomcat 的【lib】目录包含了 Servlet 的 JAR 包:
所以我们在 cmd 中应该先进行这一步设置环境变量:set classpath = %classpath% ; 路径 / servlet-api.jar
接着就可以对刚才的 Java 程序进行编译了:javac –d . 程序名. java
("-d" 代表后面一个命令为. class 文件存放目录,"." 代表当前目录)
编译成功后可以再看 web 应用所在目录中已经有了字节码文件和包名了:
当然,现在已经有了 Servlet 的程序,但是浏览器还不能来访问,因为这个 Servlet 程序还没设置对外访问路径。那么从哪里将我们刚刚创建好的 Servlet 字节码文件配置成浏览器能访问到的路径呢?
答案就是在这个 web 应用中的 web.xml 文件中,现在我们只取最简洁的格式,如 《Tomcat 详细学习方法 (三)》中所说,将 Tomcat 的 web.xml 这个 "模板" 中的头和尾复制进自己的 web.xml 文档中,还要复制一些,见下图:
这里就有比较重要的知识点了,
这时候,将 Tomcat 服务器开启,就能在浏览器中访问刚才写好的 Servlet 程序了,输入的格式为:主机名:端口 (80 不需要)/web 应用名 / 对外访问路径
如果是对于 Servlet 的访问,那么只需要写到对外访问路径即可,如果写了 Servlet 的名称也是无法访问的,如下图:
还有一个问题,如果对于多个 Servlet 在 xml 文件中的对外访问路径都配置一样的话,同样不能访问,如下图:
因此,不同的 Servlet 请在自定义 web.xml 中配置不同的对外访问路径。
来源: http://www.phperz.com/article/18/0101/355988.html