当前位置: 首页 > news >正文

Servlet原理

注:以下内容均是以纯手动的方式来模拟开发javaweb项目的过程,通过这个过程来理解servlet的执行原理,不需要idea开发工具

1.什么是servlet?
servlet是一套开发javaweb项目的规范,也就是javaEE中的一部分,这个规范中说明了webapp开发要遵循什么
servlet中规定了一个javaweb项目里必须有WEB-INF文件夹和.html的页面

servlet中规定WEB-INF里面有classes,用来放置编译后的.class文件

servlet中规定WEB-INF里面有web.xml,用来配置请求和要执行的类文件的对应关系

servlet中规定WEB-INF中还有lib文件夹,用于存放jar文件,lib的名称也是规定的

servlet中规范了一个web项目的项目结构和文件结构

2.开发一个servlet规范的webapp步骤

2.1.在Tomcat服务器中找到webapps,在webapps中创建一个项目test,test就是项目的根

2.2..在crm项目中创建WEB-INF文件夹和index.htnl页面

注:这个WEB-INF文件夹名称不可改,页面名称可改

这里的html页面中我写入了一个a标签
(下面的跳转路径需要在注册servlet的时候,也就是配置web.xml文件更改)

<!doctype html> <html> <head> <mate charset="utf-8"> <title>index</title> </head> <body> <!--<a href="http://127.0.0.1:8080/test/a/b/c">servlet</a >--> <!--端口号及之前的内容可以省略--> <a href="/test/a/b/c">servlet</a> </body> </html>

2.3.在WEB-INF中创建classes文件夹和lib文件夹和web.xml文件

这里的web.xml是从其他项目中复制过来的,有以下代码即可

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> </web-app>

2.4.在classes文件夹中创建com/bjpowernode/servlet/HelloServlet.java文件(前面创建的分包也是为了模拟servlet),这个类就是我们要开发的逻辑程序,该类必须实现Servlet接口,因为该类是一个复合servlet规范的实现类,该类层级如下

类中程序如下

package com.bjpowernode.servlet; //导入servlet包中的接口 //现在用的是javaEE8-的版本,包名为javax.servlet.*; //如果是javaEE9+的版本,包名为jakarta.servlet.*; import javax.servlet.*; import java.io.IOException; import java.io.PrintWriter; //我们自己的类必须实现Servlet接口 public class HelloServlet implements Servlet{ //实现了servlet接口中的5个方法 public void init(ServletConfig config) throws ServletException{} //调用时会自动执行service方法,main()方法在servlet中,不需要我们写 public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{ //打印文本信息在Tomcat控制台 System.out.println("hello,my servlet!"); //指定响应的内容类型为文本或html代码,必须写流前面 response.setContentType("text/html"); //创建一个流来把文本信息输出在浏览器中 PrintWriter out=response.getWriter(); //打印在浏览器中 out.print("print my servlet."); //打印在浏览器中,浏览器会自动解析html标签 out.print("<h1>one servlet</h1>"); } public void destroy(){} public String getServletInfo (){ return ""; } public ServletConfig getServletConfig() { return null; } }

2.5.编译HelloServlet.java文件找到该文件,在地址栏输入cmd回车,进入dos命令窗口

输入javac HelloServlet.java,回车编译,编译成功后会在同一位置有一个HelloServlet.class可执行文件

2.6.注册servlet,即配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <!--配置请求路径和响应的servlet类之间的关系--> <!--servlet的响应信息--> <servlet> <!--servlet的名称 名称自定义,见名知意即可--> <servlet-name>ServletTest</servlet-name> <!--servlet请求加载的类 相当于加载类的路径--> <servlet-class>com.bjpowernode.servlet.HelloServlet</servlet-class> </servlet> <!--servlet的映射信息--> <servlet-mapping> <!--servlet的名称 和上方的名称要相同--> <servlet-name>ServletTest</servlet-name> <!--servlet的映射路径--> <url-pattern>/a/b/c</url-pattern> </servlet-mapping> </web-app>

注:在浏览器中输入的地址ULR:http:127.0.0.1:8080/test/a/b/c会通过解析请求路径,找到web.xml文件中的对应路径,那么就找到了servlet的名称是ServletTest,再找到ServletTest对应的请求加类HelloServlet,即可执行该类中的servlet()方法

2.7.启动Tomcat服务器:在dos中输入startup.bat

显示服务器启动后即可,但是不要关掉服务器,也就是别给下面这个窗口叉了

2.8.启动成功后在浏览器地址栏中输入URL:http:127.0.0.1:8080/test/a/b/c

在Tomcat后台就会打印:hello,my servlet!

2.9.也可以通过网页在实现跳转

启动Tomcat后,在浏览器地址栏输入URL:http//localhost:8080/crm/index.html

就可以进入我们一开始写的和WEB-INF同级的index.html页面了

点击链接后跳转

开发一个webapp,其实就是写了一个实现Servlet接口的类,然后在web.xml中配置该类和请求路径的事件的关系即可调用

JavaEE版本

  • JavaEE目前最高的版本是JavaEE8

  • JavaEE被Oracle捐献了,Oracle将JavaEE规范捐献给Apache了

  • Apache把JavaEE换名了,叫JakartaEE

  • 以后没有javaEE了,只有jakartaEE

  • JavaEE8升级之后的"JavaEE9",不再是"JavaEE9"这个名字了,叫JakartaEE9(雅加达EE9)

  • javaEE8的时候对应的Servlet类名是:java.servlet.Servlet

  • JakartaEE9的时候对应的Servlet类名是:jakarta.servlet.Servlet(包名都换了)

  • 如果你之前的项目还是再使用javax.servlet.Servlet,那么你的项目无法直接部署到Tomcat10+版本上。你只能部署到Tomcat9上,以及9之前的版本都能够识别javax.servlet这个包

http://www.jsqmd.com/news/662590/

相关文章:

  • 不止于显示:深入MATLAB机器人工具箱,从URDF模型提取质量、惯量、重心等动力学参数
  • Matlab 2019 Simulink仿真下的双馈风机:自励与他励风机结合实现MPPT,三侧...
  • 优雅地使用MUI组件:去除最后一个分隔线
  • 2026届必备的AI论文工具横评
  • 嵌入式流程安全架构
  • 为什么DeepMind放弃通用智能路径,而华为盘古、通义千问坚持AGI架构?——基于17家机构2023–2024技术路线图的逆向推演(含未公开专利链分析)
  • Swoole协程 vs Go协程:PHP开发者一看就懂的实战对比
  • Rockchip RK3588 利用ddrbin_tool 优化DDR变频与调试串口配置
  • STM32仿真器无法识别内核?可能是这些原因在作祟
  • 别再只玩小球追踪了!用OpenMV做个智能小车巡线,从环境搭建到完整代码(附避坑指南)
  • Redis Cluster 节点分布与同步机制
  • AGI倒计时进入“工程化攻坚年”(2026–2027双年冲刺指南):从算法层到部署层的7类卡点与企业级应对清单
  • (实战指南)STM32L431RCT6串口DMA通信:从CubeMX配置到IDLE中断接收的完整流程
  • 5分钟快速上手:如何用douyin-downloader高效批量下载抖音无水印视频?
  • 别再傻傻分不清了!一文搞懂激光雷达里的‘零差’和‘外差’探测(附FMCW/ToF对比)
  • Matlab折线图进阶:从基础绘制到自定义样式(附完整代码)
  • 通过GitLab API动态触发特定Job并传递参数
  • linux 中 将plink --distance square 1-ibs生成IBS矩阵转换为三元组的形式
  • 优秀的浙江宋式古建公司
  • Rockchip RK3588 DTS实战:PCIE与SDIO双模WiFi/蓝牙配置详解
  • 2026年3月排污泵直销厂家哪家强?国内优质厂家推荐,行业内排污泵怎么选择津德隆供水设备诚信务实提供高性价比服务 - 品牌推荐师
  • Ludusavi:PC游戏存档备份的终极完整指南 [特殊字符]
  • Matlab助力特性曲线调参指南:如何让EPS系统既省电又灵敏?
  • VFS: Cannot open root device 内核启动故障排查指南
  • HTML打包EXE工具数据加密功能详解 - 加密保护HTML/JS/CSS资源
  • 面试高频问题:从浏览器请求到PHP响应:完整流程拆解
  • Python 潮流周刊#147:Python 和 Ruby 的 JIT 故事
  • 2026最权威的五大降AI率神器解析与推荐
  • 暗黑破坏神2存档编辑器:重塑你的游戏体验
  • STM32 Flash Timeout 报错全解析:从芯片锁死到安全烧录的实战指南