2026/1/18 12:29:05
网站建设
项目流程
制作一个景点的网站,蚂蚁币是什么网站建设,中企动力科技股份有限公司常州分公司,丹阳网络营销认识Servlet
本质#xff1a;
运行在web服务器#xff08;如Tomact#xff09;上的Java类#xff1b;专门用于接受客户端的HTTP请求#xff0c;处理业务逻辑#xff08;如查询数据库#xff0c;验证登录#xff09;#xff0c;生成动态HTTP响应#xff08;如返回HT…认识Servlet本质运行在web服务器如Tomact上的Java类专门用于接受客户端的HTTP请求处理业务逻辑如查询数据库验证登录生成动态HTTP响应如返回HTML页面JSON数据。定位Javaweb开发的核心组件是连接客户端浏览器/APP与后端服务数据库/业务逻辑的桥梁所以Javaweb框架如SpringMVC的底层都依赖Servlet。版本关联Servlet6.0是JakartaEE 10 规范的一部分包名从传统的javax。servlet改为jakarta.servlet这是新版与旧版的核心区别适配Tomact10。快速创建JavaWeb项目项目基本结构项目名/ # 项目根目录 ├─ src/ # 源代码目录核心 │ ├─ main/ # 主程序目录 │ │ ├─ java/ # Java源代码核心业务逻辑 │ │ │ └─ com/yourcompany/ # 包路径如Servlet类、工具类 │ │ │ ├─ servlet/ # 存放Servlet类如LoginServlet.java │ │ │ └─ service/ # 存放业务逻辑类如UserService.java │ │ └─ webapp/ # Web资源目录前端配置 │ │ ├─ index.jsp # 默认首页访问项目根路径时显示 │ │ ├─ static/ # 静态资源CSS/JS/图片 │ │ │ ├─ css/ │ │ │ ├─ js/ │ │ │ └─ img/ │ │ └─ WEB-INF/ # 受保护目录客户端无法直接访问 │ │ ├─ web.xml # Web应用配置文件Servlet映射、过滤器等 │ │ └─ classes/ # 编译后的class文件Maven自动生成无需手动放 │ └─ test/ # 测试代码目录可选 │ └─ java/ # 测试类如Servlet的单元测试 ├─ pom.xml # Maven核心配置文件依赖管理、打包方式等 └─ target/ # 构建输出目录Maven自动生成 └─ 项目名/ # 打包后的Web应用目录与Tomcat部署结构一致 └─ WEB-INF/ # 对应src/main/webapp/WEB-INF访问地址http://localhost:8080出现以上页面表示项目初始化成功。编写第一个Servlet程序Servlet3.0之前写法import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; import java.io.PrintWriter; // 继承HttpServlet类 public class FirstServlet extends HttpServlet { // 处理GET请求 Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType(text/html;charsetUTF-8); // 获取输出流 PrintWriter out response.getWriter(); // 输出HTML内容 out.println(html); out.println(head); out.println(title第一个Servlet/title); out.println(/head); out.println(body); out.println(h1Hello, Servlet!/h1); out.println(p这是通过XML配置映射的第一个Servlet程序/p); out.println(/body); out.println(/html); } // 处理POST请求简单转发到GET处理 Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }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 !-- 配置Servlet -- servlet !-- Servlet的名称自定义需唯一 -- servlet-nameFirstServlet/servlet-name !-- Servlet的完整类名包名类名 -- servlet-classcom.example.servlet.FirstServlet/servlet-class /servlet !-- 配置Servlet映射路径 -- servlet-mapping !-- 与上面的servlet-name保持一致 -- servlet-nameFirstServlet/servlet-name !-- 访问路径在浏览器中通过此路径访问 -- url-pattern/hello/url-pattern /servlet-mapping /web-app3.0之后的写法使用注解代替xmlimport jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; // 最简配置仅指定访问路径value等同于urlPatterns WebServlet(/simple) public class SimpleServlet extends HttpServlet { Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(text/html;charsetUTF-8); PrintWriter out response.getWriter(); out.println(h1最简Servlet访问路径 /simple/h1); } }掌握Servlet生命周期阶段触发时机核心方法作用与特点1. 实例化Tomcat 启动时配置loadOnStartup或首次接收请求时无参构造方法容器创建 Servlet 实例单实例一个 Servlet 类仅创建一个对象供所有请求共享2. 初始化实例化后立即执行仅 1 次init()初始化资源如数据库连接池、配置参数可通过WebInitParam获取初始化参数3. 服务每次收到匹配的 HTTP 请求时service()及doGet()/doPost()等自动根据请求方法GET/POST调用对应doXxx()方法处理业务逻辑并返回响应4. 销毁Tomcat 正常关闭时destroy()释放资源如关闭连接池避免内存泄漏测试代码/** * servlet的生命周期 */ WebServlet(urlPatterns /live,loadOnStartup 1) public class LiveServlet extends HttpServlet { //1.实例化阶段容器调用无参构造 public LiveServlet(){ System.out.println(Instantiation); } //2.初始化阶段容器调用init方法 Override public void init() { System.out.println(init); } //3.服务阶段容器调用service方法处理GET请求 Override protected void doGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws ServletException, IOException { System.out.println(service); } //4.销毁阶段容器调用destroy方法 Override public void destroy() { System.out.println(destroy); } }测试结果Connected to server [2025-12-24 10:08:30,538] Artifact JavaWebDemo:war exploded: Artifact is being deployed, please wait... Instantiation init [2025-12-24 10:08:30,771] Artifact JavaWebDemo:war exploded: Artifact is deployed successfully [2025-12-24 10:08:30,771] Artifact JavaWebDemo:war exploded: Deploy took 233 milliseconds service 24-Dec-2025 10:08:40.235 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\apache-tomcat-10.1.50\webapps\manager] 24-Dec-2025 10:08:40.269 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[D:\apache-tomcat-10.1.50\webapps\manager]的部署已在[34]毫秒内完成什么是HttpServletRequest其是用来封装客户端请求的数据常见方法如下方法作用示例getParameter(String name)获取单个请求参数GET/POSTrequest.getParameter(username)getParameterValues(String name)获取多个请求参数如复选框request.getParameterValues(hobby)getRequestURI()获取请求 URI 路径/servlet-demo/hellogetMethod()获取请求方法GET/POST/PUT/DELETErequest.getMethod()→ GETgetSession()获取当前会话Sessionrequest.getSession().getAttribute(user)实例代码//3.服务阶段容器调用service方法处理GET请求 Override protected void doGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws ServletException, IOException { String name request.getParameter(name); int age Integer.parseInt(request.getParameter(age)); response.setContentType(text/html;charsetUTF-8); response.getWriter().write(h1Hello, name age /h1); System.out.println(service); }什么是HttpServletResponse方法其是封装服务端响应的数据常用方法方法作用示例setContentType(String type)设置响应类型与编码response.setContentType(text/html;charsetUTF-8)setStatus(int sc)设置响应状态码response.setStatus(404)未找到sendRedirect(String path)重定向客户端跳转URL 变化response.sendRedirect(/servlet-demo/login)getWriter()获取字符输出流返回文本 / HTML/JSONresponse.getWriter().write(success)测试代码//3.服务阶段容器调用service方法处理GET请求 Override protected void doGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws ServletException, IOException { response.setContentType(application/json;charsetUTF-8); String json {\code\:200,\msg\:\success\,\data\:{\name\:\张三\,\age\:20}}; response.getWriter().write(json); System.out.println(service); }什么是JsonJson是一种轻量级的数据交换格式它基于ECMAScriptJS规范的子集但独立于编程语言几乎所以主流编程语言都支持JSON的解析和生成JSON的设计目标是简洁易读易解析常用于前后端数据传输列如浏览器于服务器之间API通信配置文件存储等场景。核心特点特点说明文本格式以纯文本形式存储任何文本编辑器都可查看 / 编辑跨语言与编程语言无关Java、Python、JavaScript 等均支持轻量性相比 XML语法更简洁无冗余标签传输效率更高结构化数据以键值对和有序列表数组组织结构清晰JSON数据类型类型说明示例字符串用双引号包裹的文本不可用单引号name: 张三数字整数或浮点数无引号age: 20、score: 95.5布尔值只能是true或false无引号isStudent: true数组有序集合用[]包裹元素用逗号分隔hobbies: [篮球, 编程]对象无序键值对集合用{}包裹键必须是字符串双引号{name: 张三, age: 20}null表示空值无引号address: null合规JSON示例{ id: 1001, name: 张三, age: 22, isMale: true, hobbies: [足球, 游戏], address: { city: 北京, street: 中关村大街 }, score: null }序列化和反序列化序列化将内存中的对象转换为可传输/存储的JSON字符串的过程反序列化将JSON字符串转换为内存中的对象的过程操作输入输出核心目的序列化内存对象如 Java BeanJSON 字符串便于数据传输如网络传输或持久化如写入文件反序列化JSON 字符串内存对象如 Java Bean便于程序对数据进行逻辑处理如调用对象的方法常见工具FastJSON阿里巴巴轻量、快速JacksonSpring 框架默认集成GsonGoogle总结JSON 核心轻量级数据交换格式基于键值对和数组跨语言支持。序列化JSON.toJSONString(对象)FastJSON→ 将对象转 JSON。反序列化JSON.parseObject(JSON字符串, 类名.class)→ 将 JSON 转对象。