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

Servlet学习

项目结构

MyServlet/
├── src/
│   └── com/
│       └── example/
│           └── MyServlet.java
└── web/
├── WEB-INF/
│   ├── web.xml
│   ├
│   └ lib/ (存放Servlet API等JAR)
│
└── index.html
(1)什么是Servlet?

:::warning
1、Servlet 是 JavaEE 规范之一。规范就是接口

2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。

3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

:::

创建一个servlet类

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 设置响应的内容类型为 HTMLresponse.setContentType("text/html;charset=UTF-8");// 获取输出流,用于向客户端发送响应PrintWriter out = response.getWriter();// 写入动态生成的 HTML 内容out.println("<html>");out.println("<head><title>My First Servlet</title></head>");out.println("<body>");out.println("<h1>Hello, this is my first servlet!</h1>");out.println("</body>");out.println("</html>");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 如果是 POST 请求,可以在这里处理表单数据等doGet(request, response); // 这里简单地调用 doGet 方法}
}

2. 传统映射配置方式(web.xml)

如果使用Servlet 3.0以下版本或想使用传统配置,在WEB-INF/web.xml中添加:

  <servlet><servlet-name>MyServlet</servlet-name><servlet-class>com.guigu.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/my</url-pattern></servlet-mapping>

现在配置 Servlet

import javax.servlet.annotation.WebServlet;@WebServlet(name = "myServlet", urlPatterns = {"/my"})
public class MyServlet extends HttpServlet {// 代码和上面一样
}

访问Servlet(URL类比于网址)

启动Tomcat后,通过以下URL访问:

http://localhost:8080/HelloServlet/hello

Servlet生命周期理解

  1. 加载和实例化:容器首次访问时加载Servlet类并创建实例
  2. 初始化:调用init()方法,只有在服务器启动的时候执行初始化一次
  3. 处理请求:调用service()方法,根据请求类型分发到doGet()/doPost(),一次请求就会执行一次,这是 Servlet 生命周期中最频繁调用的方法。

如果请求是 GET 类型,service() 方法会调用 doGet() 方法。

如果请求是 POST 类型,service() 方法会调用 doPost() 方法。

如果请求是其他类型(如 PUT、DELETE 等),service() 方法会调用 doGet() 或 doPost() 方法,具体取决 于 Servlet 的实现。

  1. 销毁:调用destroy()方法 ,只有在项目销毁的时候执行一次
package com.atguigu.servlet;import jakarta.servlet.*;import java.io.IOException;public class HelloServlet implements Servlet {public HelloServlet() {System.out.println("1 构造器方法");}@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2 init初始化方法");}@Overridepublic ServletConfig getServletConfig() {return null;}//service方法是专门用来处理请求和响应的@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3 service == HelloService 被访问了");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {System.out.println("4 destroy销毁方法");}
}
(1)GET 和 POST 请求的分开处理
用户访问服务器时,提交数据的请求方式:get和post
服务器要对这两种请求方式分开处理
public class HelloServlet implements Servlet {//...//service 方法是专门用来处理请求和响应的@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {//要获得请求的方式,使用ServletRequest接口的子接口HttpServletRequest//因为HttpServletRequest有获得请求方式的方法 getMethod()//所以要进行强制转换HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;// 获取请求的方式String method = httpServletRequest.getMethod();if ("GET".equals(method)) {doGet();} else if ("POST".equals(method)) {doPost();}}/*** 做 get 请求的操作*/public void doGet(){System.out.println("get 请求");System.out.println("get 请求");}/*** 做 post 请求的操作*/public void doPost(){System.out.println("post 请求");System.out.println("post 请求");}
}
ctrl+h 可以查看该类/接口有多少子类/子接口

通过继承 HttpServlet 实现 Servlet 程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。1、编写一个类去继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、到 web.xml 中的配置 Servlet 程序的访问地址Servlet 类的代码:
package com.atguigu.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;public class HelloServlet2 extends HttpServlet {//get请求时调用@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloServlet2 的doGet()方法");}//post请求时调用@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloServlet2 的doPost()方法");}
}

Servlet 类的继承体系

http://www.lryc.cn/news/581412.html

相关文章:

  • Spring--循环依赖以及三级缓存详解
  • Chat Model API
  • Altium Designer使用教程 第一章(Altium Designer工程与窗口)
  • Eureka和Nacos都可以作为注册中心,它们之间的区别
  • Java类变量(静态变量)
  • 【论文】微服务架构下分布式事务一致性解决方案设计与实践
  • 《数据维度的视觉重构:打造交互式高维数据可视化的黄金法则》
  • Java教程——深入学习guava之并发编程
  • 如何使用backtrace定位Linux程序的崩溃位置
  • Python练习Day1
  • 【C语言刷题】第十一天:加量加餐继续,代码题训练,融会贯通IO模式
  • 双倍硬件=双倍性能?TDengine线性扩展能力深度实测验证!
  • 类(JavaBean类)和对象
  • BM6 判断链表中是否有环(牛客)
  • Linux安装java后没法运行
  • 西门子PLC博图软件学习(一)
  • 手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
  • .NET9 实现排序算法(MergeSortTest 和 QuickSortTest)性能测试
  • LinkedList 链表数据结构实现 (OPENPPP2)
  • 前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
  • AI智能体革命:从对话机器到自主决策的进化之路 **——当AI长出“手和脑”,一场人机协作范式转移正在发生
  • AI小智项目全解析:软硬件架构与开发环境配置
  • 图灵完备之路(数电学习三分钟)----解码器
  • Pytest 测试发现机制详解:自动识别测试函数与模块
  • 理想汽车6月交付36279辆 第二季度共交付111074辆
  • 比较两个csv文件的内容是否一致
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • HTML初学者第三天
  • centos 7.6安装mysql8
  • 基于大模型的肾积水全周期预测与诊疗方案研究报告