服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|

服务器之家 - 编程语言 - JAVA教程 - servlet基础知识_动力节点Java学院整理

servlet基础知识_动力节点Java学院整理

2020-12-07 10:52fjdingsd JAVA教程

这篇文章主要为大家详细介绍了servlet基础的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

servlet基础知识_动力节点Java学院整理

从这个对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基础知识_动力节点Java学院整理servlet基础知识_动力节点Java学院整理

因为自己编写的servlet是由服务器调用,因此我们所创建的servlet实现类一定要是公共的,开始说了,我们没必要实现servlet的全部方法,因此我们向客户端传数据只需要复写service()方法即可,那么我们只需要继承servlet的实现类,接着取得相应对象servletresponse的输出流servletoutputstream就可以向客户端输出数据了,同时因为输出是字节流,所以需要将字符转换成字节数组,再手动写入自定义包名和要导入的java包:

?
1
2
3
4
5
6
7
8
9
10
11
12
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包:

servlet基础知识_动力节点Java学院整理

所以我们在cmd中应该先进行这一步设置环境变量:set classpath = %classpath% ; 路径/servlet-api.jar

servlet基础知识_动力节点Java学院整理

接着就可以对刚才的java程序进行编译了:javac –d . 程序名.java

(“-d”代表后面一个命令为.class文件存放目录,“.”代表当前目录)

编译成功后可以再看web应用所在目录中已经有了字节码文件和包名了:

servlet基础知识_动力节点Java学院整理

当然,现在已经有了servlet的程序,但是浏览器还不能来访问,因为这个servlet程序还没设置对外访问路径。那么从哪里将我们刚刚创建好的servlet字节码文件配置成浏览器能访问到的路径呢?

答案就是在这个web应用中的web.xml文件中,现在我们只取最简洁的格式,如 《tomcat详细学习方法(三)》中所说,将tomcat的web.xml这个“模板”中的头和尾复制进自己的web.xml文档中,还要复制一些,见下图:

servlet基础知识_动力节点Java学院整理

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

servlet基础知识_动力节点Java学院整理

这时候,将tomcat服务器开启,就能在浏览器中访问刚才写好的servlet程序了,输入的格式为:主机名:端口(80不需要)/web应用名/对外访问路径

servlet基础知识_动力节点Java学院整理

如果是对于servlet的访问,那么只需要写到对外访问路径即可,如果写了servlet的名称也是无法访问的,如下图:

servlet基础知识_动力节点Java学院整理

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

servlet基础知识_动力节点Java学院整理

servlet基础知识_动力节点Java学院整理

因此,不同的servlet请在自定义web.xml中配置不同的对外访问路径。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐