Servlet 学习(上)

概论

什么是 Servlet?(通俗定义)

ServletJava 编写的、运行在 Web 服务器(如 Tomcat、Jetty)上的服务器端小程序,它是 Java EE 规范的核心组件之一,专门用来处理客户端(浏览器 / APP)的 HTTP 请求,并返回动态响应

简单说:Servlet 就是后端处理网页请求的核心代码,是客户端和服务器业务逻辑之间的桥梁

补充:Servlet 不是前端页面(HTML/JSP),而是纯 Java 代码,负责后台逻辑处理;我们常用的 SpringMVC、SpringBoot 等框架,底层都是基于 Servlet 封装的

Servlet 的核心作用

Servlet 的核心使命就是处理 Web 请求、生成动态响应,具体分为 5 个关键作用:

1. 接收并解析 HTTP 请求

这是 Servlet 的入口工作:

  • 接收浏览器 / 客户端发送的 HTTP 请求(GET/POST/PUT 等请求方式)
  • 解析请求中的数据:请求参数(用户名、密码、查询关键词)、请求头、Cookie、表单数据等

2. 执行业务逻辑处理(核心功能)

这是 Servlet 最关键的作用,负责真正的后端业务

  • 调用业务层(Service)、数据访问层(DAO)代码
  • 操作数据库(增删改查:登录校验、数据查询、用户注册等)
  • 执行计算、逻辑判断、权限校验等操作

3. 生成并返回 HTTP 响应

处理完业务后,Servlet 会动态生成响应数据返回给客户端,响应内容可以是:

  • 网页(HTML)
  • 接口数据(JSON/XML,前后端分离常用)
  • 文件(下载、图片)
  • 状态码(404、500、200 等)

4. 会话管理

维护用户的登录状态,解决 HTTP 协议无状态的问题:

  • 创建 / 获取 Session(服务器端存储用户信息)
  • 读写 Cookie(客户端存储用户标识)
  • 实现登录、购物车、身份验证等功能

5. 请求控制与跳转

负责页面 / 接口的分发调度:

  • 请求转发(服务器内部跳转,地址栏不变)
  • 重定向(客户端重新请求,地址栏改变)
  • 统一拦截、权限控制

Servlet 的工作流程

  1. 浏览器输入网址,发送 HTTP 请求 到 Web 服务器(Tomcat);
  2. Tomcat 接收请求,根据配置找到对应的 Servlet
  3. Tomcat 调用 Servlet 的 doGet()/doPost() 方法处理请求;
  4. Servlet 执行业务逻辑(查数据库、计算等);
  5. Servlet 生成响应结果,返回给 Tomcat;
  6. Tomcat 将响应发送给浏览器,浏览器展示内容。

请添加图片描述

Servlet 的核心特点

  1. 基于 Java:跨平台,一次编写,多服务器运行;
  2. 服务器端运行:代码安全,不会暴露给客户端;
  3. 单例多线程:默认一个 Servlet 实例,同时处理多个请求,性能高效;
  4. 遵循 HTTP 协议:专门适配 Web 开发,是 Java Web 的基础标准。

实现

创建项目

请添加图片描述

注意:如果这个项目的webapp没有网络log,说明配置有问题,需要去设置配置。如果有log则说明正常。

请添加图片描述

点击设置点击项目结构

请添加图片描述

选择项目,点+号选择web

请添加图片描述

请添加图片描述

修改路径,选择至WEB-INF的路径然后点击应用确定

请添加图片描述

创建工件

请添加图片描述

选择工件**(需要装Tomcat服务器)**

请添加图片描述

请添加图片描述

写一个主页面index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>主界面</h1>
<h3>这两天热得很</h3>
</body>
</html>

后面代码访问方式为:运行对应代码启动的服务器后,在浏览器访问localhost:8080/servlet_s1_war/xx.jsp

入门案例:jsp组成

<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!--指令部分:规定了页面的编码、嵌入的语言、导包等信息-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML静态部分 -->
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--小脚本:嵌入的代码块-->
<%
    // 当前时间
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String formatDate = sdf.format(date);
%>
<!--声明部分-->
<%!
    int a = 3;
%>

<h3>当前时间是:</h3>
<b>
    <!--表达式-->
    <%=formatDate%>
    <%=a%>
</b>
</body>
</html>

JSP的九大内置对象

out(输出)对象
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--输出对象,类似于System.out.println("")-->
1.<%="输出的内容"%>
2.<%
  out.print("输出的内容");
%>
</body>
</html>
获取到请求的相关信息
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    // 获取到请求的相关信息
    String serverName = request.getServerName();
    int serverPort = request.getServerPort();
    out.println("服务器名称:" + serverName + "<br/>");
    out.println("服务器端口号:" + serverPort + "<br/>");
    String remoteHost = request.getRemoteHost();
    String remoteUser = request.getRemoteUser();
    String remoteAddr = request.getRemoteAddr();
    int remotePort = request.getRemotePort();
    String uri = request.getRequestURI();
    String protocol = request.getProtocol();
    out.print("浏览器:" + remoteHost + "," + remoteUser + "," + remoteAddr + "<br/>");
    out.println("浏览器端口号:" + remotePort + "<br/>");
    out.print("Uri:" + uri + "<br/>");
    out.print("协议:" + protocol);

%>
</body>
</html>
如何接受浏览器传递过来的内容*
发送给3-3
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="3-3.jsp" method="post">
    账号:<input type="text" name="username"/><br/>
    密码:<input type="password" name="password"/><br/>
    年龄:<input type="number" name="age"/><br/>
    爱好:<input type="checkbox" name="love" value="足球"/>⚽️
    <input type="checkbox" name="love" value="篮球"/>🏀
    <input type="checkbox" name="love" value="排球"/>🏐<br/>
    <button>提交</button>
</form>
</body>
</html>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.Arrays" %><%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--
 如何接受浏览器传递过来的内容 🌟🌟🌟🌟🌟🌟🌟
-->
<%
    // 必须在第一行输出
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    // 会获取到某个参数的值(单个) username:参数名称
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String age = request.getParameter("age");
    // 会获取到数组元素
    String[] loves = request.getParameterValues("love");
    // 获取到所有值
    Map<String, String[]> all = request.getParameterMap();
    out.print("username:" + username + "<br/>");
    out.print("password:" + password + "<br/>");
    out.print("age:" + age + "<br/>");
    out.print("loves:" + Arrays.toString(loves) + "<br/>");
    out.print("all:" + all.keySet() + "<br/>");
    out.print("all:" + all.values() + "<br/>");
%>
</body>
</html>
request对象(容器)
<%@ page import="java.util.Arrays" %><%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>3-4.jsp</h3>
<!--容器操作-->
<%
    // 存放
    request.setAttribute("A", 23);
    request.setAttribute("B", new Object());
    request.setAttribute("C", Arrays.asList("aa", "bb", "cc"));
    request.setAttribute("D", 23);
    // 覆盖
    request.setAttribute("B", "abc");
%>
<%
    // 删除
    request.removeAttribute("A");
%>
<%
    // 获取
    Object a = request.getAttribute("A");
    Object b = request.getAttribute("B");
    Object c = request.getAttribute("C");
    Object d = request.getAttribute("D");
    out.print(a + "," + b + "," + c + "," + d);
%>
<%
    // 页面跳转  转发
    request.getRequestDispatcher("3-5.jsp").forward(request,response);
%>
</body>
</html>

request存的东西只有当次请求有效下面这段代码则在3-4运行之后则都是null

<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>3-5.jsp</h3>
<%
    Object a = request.getAttribute("A");
    Object b = request.getAttribute("B");
    Object c = request.getAttribute("C");
    Object d = request.getAttribute("D");
    out.print(a + "," + b + "," + c + "," + d);
%>
</body>
</html>
response(响应)对象
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>response对象----4-1.jsp</h3>
<h4>4-1</h4>
<%
    int status = response.getStatus();
    response.setCharacterEncoding("utf-8");
    String encoding = response.getCharacterEncoding();
    out.print("status:" + status + "<br/>");
    out.print("encoding:" + encoding);
    // 页面跳转 重定向
    response.sendRedirect("4-2.jsp");
%>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h4>4-2</h4>
</body>
</html>
session对象(容器)
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 14:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    // 会话ID
    String id = session.getId();
    // 是否是新会话
    boolean isNew = session.isNew();
    // 第一次请求的时间
    long creationTime = session.getCreationTime();
    // 最后一次请求的时间
    long lastAccessedTime = session.getLastAccessedTime();
    // 最大存活时间
    long maxInactiveInterval = session.getMaxInactiveInterval();
    // 设置最大存活时间
    session.setMaxInactiveInterval(1800);
    // 让当前会话失效
    // session.invalidate();
    out.print("id:" + id + "<br/>");
    out.print("isNew:" + isNew + "<br/>");
    out.print("creationTime:" + creationTime + "<br/>");
    out.print("lastAccessedTime:" + lastAccessedTime + "<br/>");
    out.print("maxInactiveInterval:" + maxInactiveInterval + "<br/>");
%>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 15:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>5-2</h3>
<%

    request.setAttribute("A", "request放的A");
    request.setAttribute("B", "request放的B");
    request.setAttribute("C", "request放的C");
    // session容器操作
    session.setAttribute("A", "session放的A");
    session.setAttribute("B", "session放的B");
    session.setAttribute("C", "session放的C");
    session.removeAttribute("B");
    Object a = session.getAttribute("A");
    Object b = session.getAttribute("B");
    Object c = session.getAttribute("C");
    out.print("a:" + a + "<br/>");
    out.print("b:" + b + "<br/>");
    out.print("c:" + c + "<br/>");

    Object a1 = request.getAttribute("A");
    Object b1 = request.getAttribute("B");
    Object c1 = request.getAttribute("C");
    out.print("a1:" + a1 + "<br/>");
    out.print("b1:" + b1 + "<br/>");
    out.print("c1:" + c1 + "<br/>");

    // request.getRequestDispatcher("5-3.jsp").forward(request, response);
    response.sendRedirect("5-3.jsp");
%>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 15:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>5-3</h3>
<%

    Object a = session.getAttribute("A");
    Object b = session.getAttribute("B");
    Object c = session.getAttribute("C");
    out.print("a:" + a + "<br/>");
    out.print("b:" + b + "<br/>");
    out.print("c:" + c + "<br/>");

    Object a1 = request.getAttribute("A");
    Object b1 = request.getAttribute("B");
    Object c1 = request.getAttribute("C");
    out.print("a1:" + a1 + "<br/>");
    out.print("b1:" + b1 + "<br/>");
    out.print("c1:" + c1 + "<br/>");
%>
</body>
</html>

request存在时间很短,session生命周期要在关闭浏览器或者服务器,或者让会话直接失效才会死亡

application对象(容器)、page对象(容器)和四大容器
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 16:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    // 存放
    application.setAttribute("A", "application存放的a");
    application.setAttribute("B", "application存放的b");
    application.setAttribute("C", "application存放的c");
    // 删除
    application.removeAttribute("B");
    // 获取
    Object a = application.getAttribute("A");
    Object b = application.getAttribute("B");
    Object c = application.getAttribute("C");
    out.print("a:" + a + "<br/>");
    out.print("b:" + b + "<br/>");
    out.print("c:" + c + "<br/>");
%>
<hr/>
<%
    // 四大容器:page容器、request容器、session容器以及application容器 生命周期不同
    pageContext.setAttribute("M1", "page容器中的M");
    request.setAttribute("M2", "request容器中的M");
    session.setAttribute("M3", "session容器中的M");
    application.setAttribute("M4", "application容器中的M");
%>
<%=pageContext.getAttribute("M1")%>
<br/>
<%=request.getAttribute("M2")%>
<br/>
<%=session.getAttribute("M3")%>
<br/>
<%=application.getAttribute("M4")%>
<br/>
<%
    // request.getRequestDispatcher("6-2.jsp").forward(request, response);
    response.sendRedirect("6-2.jsp");
%>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 16:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>6-2.jsp</h3>
<%=pageContext.getAttribute("M1")%>
<br/>
<%=request.getAttribute("M2")%>
<br/>
<%=session.getAttribute("M3")%>
<br/>
<%=application.getAttribute("M4")%>
<br/>
</body>
</html>
exception对象
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 16:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" errorPage="7-2.jsp" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>7-1.jsp</h1>
<%
    int a = 9 / 0;
%>
<%=a%>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 16:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>我是catch,专门处理错误的页面</h2>
<%
    String message = exception.getMessage();
    out.print(message);
%>
</body>
</html>
pageContext对象
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 16:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%-- JSP页面配置:设置响应类型、编码、脚本语言 --%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>pageContext对象</h3>
<%
    // 获取JSP内置对象
    ServletRequest req = pageContext.getRequest();  <%-- 获取request请求对象 --%>
    ServletResponse resp = pageContext.getResponse();  <%-- 获取response响应对象 --%>
    HttpSession session1 = pageContext.getSession();  <%-- 获取session会话对象 --%>
    ServletContext app = session1.getServletContext();  <%-- 获取application全局对象 --%>
    
    // 四大作用域存值:1-page 2-request 3-session 4-application
    pageContext.setAttribute("A", "aaa", 1);  <%-- 存入page作用域 --%>
    pageContext.setAttribute("B1", "bbb", 2);  <%-- 存入request作用域 --%>
    request.setAttribute("B2", "bbb2");  <%-- 直接存入request作用域 --%>
    pageContext.setAttribute("C1", "ccc", 3);  <%-- 存入session作用域 --%>
    session.setAttribute("C2", "ccc2");  <%-- 直接存入session作用域 --%>
    pageContext.setAttribute("D1", "ddd", 4);  <%-- 存入application作用域 --%>
    application.setAttribute("D2", "ddd2");  <%-- 直接存入application作用域 --%>
%>
<%=pageContext.getAttribute("A")%><br/>  <%-- 获取page域的A数据 --%>
<%=pageContext.getAttribute("B1", 2)%>  <%-- 获取request域的B1 --%>
<%=pageContext.getAttribute("B2", 2)%>  <%-- 获取request域的B2 --%>
<%=request.getAttribute("B1")%>  <%-- request对象获取B1 --%>
<%=request.getAttribute("B2")%><br/>  <%-- request对象获取B2 --%>
<%=pageContext.getAttribute("C1", 3)%>  <%-- 获取session域的C1 --%>
<%=pageContext.getAttribute("C2", 3)%>  <%-- 获取session域的C2 --%>
<%=session.getAttribute("C1")%>  <%-- session对象获取C1 --%>
<%=session.getAttribute("C2")%><br/>  <%-- session对象获取C2 --%>
<%=pageContext.getAttribute("D1", 4)%>  <%-- 获取application域的D1 --%>
<%=pageContext.getAttribute("D2", 4)%>  <%-- 获取application域的D2 --%>
<%=application.getAttribute("D1")%>  <%-- application对象获取D1 --%>
<%=application.getAttribute("D2")%><br/>  <%-- application对象获取D2 --%>
</body>
</html>
config对象

config 对象的主要作用是取得服务器的配置信息。通过 pageContext 对象的getServletConfig() 方法可以获取一个 config 对象。当一个 Servlet 初始化时,容器把某些信息通过 config 对象传递给这个 Servlet。 开发者可以在 web.xml 文件中为应用程序环境中的 Servlet 程序和 JSP 页面提供初始化参数。

EL 表达式

概述

Expression Language 表达式语言,是一种在 JSP 页面获取数据的简单方式。只能获取数据,不能设置数据。主要用于替换和简化jsp页面中java代码的编写。

语法

在JSP页面的任何静态部分均可通过: ${expression}来获取到指定表达式的值。

需要注意的是,使用Idea创建jsp页面时需手动在page指令中允许使用EL表达式。

容器相应操作
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 17:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    pageContext.setAttribute("A", "page", 1);
    pageContext.setAttribute("A", "request", 2);
    pageContext.setAttribute("A", "session", 3);
    pageContext.setAttribute("A", "application", 4);
%>
<h3>表达式输出</h3>
<%
    Object a1 = pageContext.getAttribute("A", 1);
    Object a2 = pageContext.getAttribute("A", 2);
    Object a3 = pageContext.getAttribute("A", 3);
    Object a4 = pageContext.getAttribute("A", 4);
    out.print("a1:" + a1 + "<br/>");
    out.print("a2:" + a2 + "<br/>");
    out.print("a3:" + a3 + "<br/>");
    out.print("a4:" + a4 + "<br/>");
%>
<hr/>
<h3>EL表达式输出</h3>
a1:${pageScope.A}<br/>
a2:${requestScope.A}<br/>
a3:${sessionScope.A}<br/>
a4:${applicationScope.A}<br/>
<!--依次从四个容器中寻找,找到输出-->
缩写:${A}
</body>
</html>
获取请求参数的值
发送
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 17:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="2-2.jsp" method="post">
    账号:<input type="text" name="username"/><br/>
    密码:<input type="password" name="password"/><br/>
    年龄:<input type="number" name="age"/><br/>
    爱好:<input type="checkbox" name="love" value="足球"/>⚽️
    <input type="checkbox" name="love" value="篮球"/>🏀
    <input type="checkbox" name="love" value="排球"/>🏐<br/>
    <button>提交</button>
</form>
</body>
</html>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.Arrays" %><%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 17:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>过去的写法</h3>
<%
    // 必须在第一行输出
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    // 会获取到某个参数的值(单个) username:参数名称
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String age = request.getParameter("age");
    // 会获取到数组元素
    String[] loves = request.getParameterValues("love");
    // 获取到所有值
    Map<String, String[]> all = request.getParameterMap();
    out.print("username:" + username + "<br/>");
    out.print("password:" + password + "<br/>");
    out.print("age:" + age + "<br/>");
    out.print("loves:" + Arrays.toString(loves) + "<br/>");
    out.print("all:" + all.keySet() + "<br/>");
    out.print("all:" + all.values() + "<br/>");
%>
<h3>EL表达式获取到请求参数的值</h3>
username:${param.username}<br/>
password:${param.password}<br/>
age:${param.age}<br/>
love:${paramValues.love}
</body>
</html>
获取initParam的值
<%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 17:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
web.xml中的值:${initParam.name}
</body>
</html>
对象操作
<%@ page import="bean.Student" %><%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/15
  Time: 17:46
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
4 ${4} admin ${'admin'}
${6+4}
<hr/>
<%
    Student stu = new Student();
    stu.setId(1);
    stu.setName("李四");
    stu.setAge(19);
    stu.setGender('女');
    session.setAttribute("A", stu);
%>
获取到对象:${A}
获取到对象的属性:${A.name}....${A.id}.....${A.gender}.....${A.age}
</body>
</html>
导入jstl依赖
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
运算常量操作和集合操作
<%@ page import="java.util.Date" %><%--
  Created by IntelliJ IDEA.
  User: dailyblue
  Date: 2025/7/16
  Time: 09:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<!--核心标签 核心标签是最常用的 JSTL标签-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    session.setAttribute("A", "aaaa");
    session.setAttribute("C", (int) (Math.random() * 100 + 1));
    String[] array = {"西安", "宝鸡", "渭南", "商洛", "汉中", "榆林"};
    session.setAttribute("D", array);
    session.setAttribute("E", new Date());
%>
<c:set value="bbbb" var="B" scope="session"></c:set>

${A}..${B}

<hr/>
<h3>单层if分支</h3>
<c:if test="${C>66}">
    ${C}大于66
</c:if>
<h3>if-else分支</h3>
<c:choose>
    <c:when test="${C>66}">
        ${C}大于66
    </c:when>
    <c:otherwise>
        ${C}小于66
    </c:otherwise>
</c:choose>
<h3>多层if分支</h3>
<c:choose>
    <c:when test="${C==100}">
        ${C}完美
    </c:when>
    <c:when test="${c>=85}">
        ${C}优秀
    </c:when>
    <c:when test="${C>=60}">
        ${C}及格
    </c:when>
    <c:otherwise>
        ${C}很差
    </c:otherwise>
</c:choose>
<hr/>
<h3>for循环</h3>
<c:forEach var="i" begin="1" end="10" step="1">
    <b>${i}&nbsp;&nbsp;&nbsp;&nbsp;</b>
</c:forEach>
<h3>foreach循环</h3>
<c:forEach var="e" items="${D}" varStatus="j">
    j:${j.count},e:${e}<br/>
</c:forEach>
<hr/>
<h3>格式化标签</h3>
<fmt:formatNumber var="num1" value="89.888888" pattern="##.##"/>
${num1}
<h4>原来的时间</h4>
${E}
<h4>格式化之后的时间</h4>
<fmt:formatDate value="${E}" var="E2" pattern="yyyy年MM月dd日 HH:mm:ss"/>
${E2}
</body>
</html>
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐