servlet基础知识_动力节点Java学院整理
发布时间 - 2026-01-11 02:31:02 点击率:次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文档中,还要复制一些,见下图:
这里就有比较重要的知识点了,<servlet>和<servlet-mapping>中的<servlet-name>必须保持一致,<servlet>中的<servlet-class>必须有完整包名和类名,而<servlet-mapping>中的<url-pattern>就是我们可以设置的对外访问路径了,可以自定义路径。这个路径的设置可以不写,则为缺省值,那么浏览器中的输入地址只要有web应用名即可,但是即使设为缺省值,在<url-pattern>中,内容也一定要有斜线:“/”。
这时候,将Tomcat服务器开启,就能在浏览器中访问刚才写好的Servlet程序了,输入的格式为:主机名:端口(80不需要)/web应用名/对外访问路径
如果是对于Servlet的访问,那么只需要写到对外访问路径即可,如果写了Servlet的名称也是无法访问的,如下图:
还有一个问题,如果对于多个Servlet在xml文件中的对外访问路径都配置一样的话,同样不能访问,如下图:
因此,不同的Servlet请在自定义web.xml中配置不同的对外访问路径。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# servlet
# 基础知识
# java网络编程基础知识介绍
# Java基础知识汇总
# Java基础知识精选 你答对了几道?
# java 基础知识之网络通信(TCP通信、UDP通信、多播以及NIO)总结
# java 基础知识之IO总结
# javaBean的基础知识及常见乱码解决方法
# Java 面试题基础知识集锦
# Java基础知识杂文
# 客户端
# 是由
# 只需要
# 是指
# 自定义
# 文档
# 就可以
# 我们可以
# 这两个
# 已经有了
# 如下图
# 自己的
# 器中
# 器上
# 是在
# 还没
# 在这个
# 目录下
# 多个
# 就有
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel怎么清理缓存_Laravel optimize clear命令详解
深圳网站制作培训,深圳哪些招聘网站比较好?
WordPress 子目录安装中正确处理脚本路径的完整指南
如何确认建站备案号应放置的具体位置?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Bootstrap整体框架之CSS12栅格系统
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
如何在阿里云购买域名并搭建网站?
如何在万网主机上快速搭建网站?
javascript日期怎么处理_如何格式化输出
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
如何在七牛云存储上搭建网站并设置自定义域名?
canvas 画布在主流浏览器中的尺寸限制详细介绍
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何实现建站之星域名转发设置?
如何自定义建站之星模板颜色并下载新样式?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
如何快速辨别茅台真假?关键步骤解析
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Python面向对象测试方法_mock解析【教程】
node.js报错:Cannot find module 'ejs'的解决办法
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
如何在橙子建站上传落地页?操作指南详解
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
Laravel如何创建自定义Facades?(详细步骤)
如何续费美橙建站之星域名及服务?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
网站制作壁纸教程视频,电脑壁纸网站?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
QQ浏览器网页版登录入口 个人中心在线进入
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
海南网站制作公司有哪些,海口网是哪家的?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
原生JS实现图片轮播切换效果
PHP正则匹配日期和时间(时间戳转换)的实例代码
公司门户网站制作流程,华为官网怎么做?
js实现获取鼠标当前的位置
浅谈redis在项目中的应用
Python数据仓库与ETL构建实战_Airflow调度流程详解
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】

