Servlet

静态资源 / 动态资源

  • 静态资源:无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源。例如:html、css、js、img,音频文件和视频文件;
  • 动态资源:- 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如 Servlet、Thymeleaf 等;

Servlet简介

用来接收、处理客户端请求、响应给浏览器的动态资源。在整个 Web 应用中,Servlet 主要负责处理请求、协同调度功能以及响应数据。可以把 Servlet 称为 Web 应用中的控制器

  1. tomcat 接收到请求后,会将请求报文的信息转换为一个HttpServletRequest对象,该对象中包含了请求中的所有信息:请求行、请求头、请求体。
  2. tomcat 同时创建了一个HttpServletResponse对象,该对象用于承载要响应给客户端的信息,后面,该对象会被转换成响应的报文:响应行、响应头、响应体。
  3. tomcat 根据请求中的资源路径找到对应的 servlet,将 servlet 实例化,调用service方法,同时将HttpServletRequestHttpServletResponse对象传入。

Servlet开发流程

  1. 创建一个 JavaWeb 项目
  2. 开发一个 UserServlet
java 复制代码
public class UserServlet extends HttpServlet { 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 获取请求中的键值对参数 key=value 
    String username = req.getParameter("username"); 
    if ("atguigu".equals(username)) { 
        // 通过响应对象响应信息 
        resp.getWriter().write("NO"); 
    } else { 
        resp.getWriter().write("YES"); 
    } 
  } 
}
自定义一个类,要继承`HttpServlet`类; 
重写`service`方法,该方法主要就是用于处理用户请求的服务方法; 
`HttpServletRequest`代表请求对象,是由请求报文经过Tomcat转换而来的,通过该对象可以获取请求中的信息; 
`HttpServletResponse`代表响应对象,该对象会被Tomcat转换为响应的报文,通过该对象可以设置响应中的信息; 
Servlet对象的生命周期(创建、初始化、处理服务、销毁)是由Tomcat管理的,无需自己`new`; 
`HttpServletRequest`、`HttpServletResponse`两个对象也是由Tomcat负责转换,在调用`service`方法时传入给我们用的;
  1. 在 web.xml 为 UseServlet 配置请求的映射路径:
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"   
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <!--给UserServlet起一个别名,用于关联请求的映射路径-->
        <servlet-name>userServlet</servlet-name>
        <!--用于高速 Tomcat 要实例化的 Servlet 类-->
        <servlet-class>com.atguigu.servlet.UserServlet</servlet-class>
    </servlet> 
    <servlet-mapping> 
        <!--关联别名和映射路径--> 
        <servlet-name>userServlet</servlet-name> 
        <!--可以为一个Servlet匹配多个不同的映射路径,但是不同的Servlet不能使用相同的url-pattern--> 
        <url-pattern>/userServlet</url-pattern> 
        <!-- <url-pattern>/userServlet2</url-pattern>--> 
        <!-- 
            / 表示通配所有资源,不包括jsp文件 
            /* 表示通配所有资源,包括jsp文件 
            /a/* 匹配所有以a前缀的映射路径 
            *.action 匹配所有以action为后缀的映射路径 
        -->
        <!-- <url-pattern>/*</url-pattern>--> 
    </servlet-mapping> 
</web-app>
  1. 开发一个表单页面
html 复制代码
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="userServlet"> 
            请输入用户名:<input type="text" name="username" /> <br> 
            <input type="submit" value="校验"> 
        </form> 
    </body> 
</html>
相关推荐
她的男孩1 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
爱读源码的大都督1 小时前
Claude Code源码分析(三):为什么系统提示词中需要有tools呢?
前端·人工智能·后端
爱勇宝1 小时前
Claude Code 被曝暗藏“隐形检测”代码:封代理不是最可怕的,可怕的是你根本不知道它在干什么
前端·后端·程序员
ITOM运维行者1 小时前
从零搭建企业级服务器监控体系:踩坑实录与架构设计
前端·后端
用户4099322502122 小时前
Vue状态管理入门第四章:组合式store和SSR风险
前端·vue.js·后端
用户34232323763172 小时前
SPI 通信与高速外设驱动详解
后端
魏祖潇2 小时前
SDD 完整指南——Spec 端打底、Story 端交付、留白区
人工智能·后端
feelmylife592 小时前
消息队列可靠投递与幂等消费 -- 从"消息丢了"到"消息别重复"的完整工程实践
后端
雪隐2 小时前
个人电脑玩AI-10让5060 Ti给你打工——部署 Odysseus:终于有个能打的"AI管家"了
人工智能·后端
copyer_xyf3 小时前
FastAPI 如何连接 MySQL
后端·python