热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要为大家详细介绍了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文档中,还要复制一些,见下图:

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

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

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

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

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

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


推荐阅读
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 本文介绍如何将自定义项目设置为Tomcat的默认访问项目,使得通过IP地址访问时直接展示该自定义项目。提供了三种配置方法:修改项目路径、调整配置文件以及使用WAR包部署。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
author-avatar
饥饿的饮水机
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有