Servlet原理

张开发
2026/5/11 3:09:50 15 分钟阅读
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中创建一个项目testtest就是项目的根2.2..在crm项目中创建WEB-INF文件夹和index.htnl页面注这个WEB-INF文件夹名称不可改页面名称可改这里的html页面中我写入了一个a标签下面的跳转路径需要在注册servlet的时候也就是配置web.xml文件更改!doctype html html head mate charsetutf-8 titleindex/title /head body !--a hrefhttp://127.0.0.1:8080/test/a/b/cservlet/a -- !--端口号及之前的内容可以省略-- a href/test/a/b/cservlet/a /body /html2.3.在WEB-INF中创建classes文件夹和lib文件夹和web.xml文件这里的web.xml是从其他项目中复制过来的有以下代码即可?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 metadata-completetrue /web-app2.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 outresponse.getWriter(); //打印在浏览器中 out.print(print my servlet.); //打印在浏览器中浏览器会自动解析html标签 out.print(h1one 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 version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 metadata-completetrue !--配置请求路径和响应的servlet类之间的关系-- !--servlet的响应信息-- servlet !--servlet的名称 名称自定义见名知意即可-- servlet-nameServletTest/servlet-name !--servlet请求加载的类 相当于加载类的路径-- servlet-classcom.bjpowernode.servlet.HelloServlet/servlet-class /servlet !--servlet的映射信息-- servlet-mapping !--servlet的名称 和上方的名称要相同-- servlet-nameServletTest/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目前最高的版本是JavaEE8JavaEE被Oracle捐献了Oracle将JavaEE规范捐献给Apache了Apache把JavaEE换名了叫JakartaEE以后没有javaEE了只有jakartaEEJavaEE8升级之后的JavaEE9不再是JavaEE9这个名字了叫JakartaEE9雅加达EE9javaEE8的时候对应的Servlet类名是java.servlet.ServletJakartaEE9的时候对应的Servlet类名是jakarta.servlet.Servlet(包名都换了)如果你之前的项目还是再使用javax.servlet.Servlet,那么你的项目无法直接部署到Tomcat10版本上。你只能部署到Tomcat9上以及9之前的版本都能够识别javax.servlet这个包

更多文章