目录
- 1、JSP内置对象
 - 
- 
- [1. 1、**`out` 对象**](#1. 1、
out对象) - [1.2、 **`request` 对象**](#1.2、 
request对象) - [1.3、 **`response` 对象**](#1.3、 
response对象) - [1.4、 **`session` 对象**](#1.4、 
session对象) - [1.5、 **`application` 对象**](#1.5、 
application对象) - [1.6、 **`cookie` 对象**](#1.6、 
cookie对象) 
 - [1. 1、**`out` 对象**](#1. 1、
 
 - 
 - 2、Servlet
 - 
- [2.1、Servlet 概念](#2.1、Servlet 概念)
 - [2.2、Servlet 体系结构](#2.2、Servlet 体系结构)
 - [2.3、Servlet 接口](#2.3、Servlet 接口)
 - [2.4、ServletConfig 接口](#2.4、ServletConfig 接口)
 - [2.5、Servlet 案例](#2.5、Servlet 案例)
 - 
- [2.5.1 创建Servlet类](#2.5.1 创建Servlet类)
 - [2.5.2 配置web.xml](#2.5.2 配置web.xml)
 - [2.5.3 部署和运行](#2.5.3 部署和运行)
 
 - 2.6、请求处理与响应
 
 - 3、MVC
 - 
- [3.1、 MVC 的概念](#3.1、 MVC 的概念)
 - [3.2、 MVC 的角色](#3.2、 MVC 的角色)
 - [3.3、MVC 的优点](#3.3、MVC 的优点)
 
 - 4、Filter过滤器
 - 5、EL表达式
 - 6、JSTL标签
 - 
- 6.1、概述
 - 6.2、核心功能与标签库分类
 - 
- [6.2.1、核心标签库(Core Tag Library)](#6.2.1、核心标签库(Core Tag Library))
 - [6.2.2、格式化标签库(Formatting Tag Library)](#6.2.2、格式化标签库(Formatting Tag Library))
 - [6.2.3、SQL标签库(SQL Tag Library)](#6.2.3、SQL标签库(SQL Tag Library))
 - [6.2.4、XML标签库(XML Tag Library)](#6.2.4、XML标签库(XML Tag Library))
 
 - [6.3、核心标签库(Core Tag Library)](#6.3、核心标签库(Core Tag Library))
 - [6.4、格式化标签库(Formatting Tag Library)](#6.4、格式化标签库(Formatting Tag Library))
 - 6.5、示例
 
 
1、JSP内置对象
1. 1、out 对象
- 
类型 :
javax.servlet.jsp.JspWriter - 
作用:用于向客户端输出内容。
 - 
常用方法:
void print(String):输出字符串。void println(String):输出字符串并换行。void write(String):输出字符串。void close():关闭输出流。
 - 
特点:
out对象是一个带缓冲的输出流,类似于PrintWriter,但功能更强大。- 可以通过 
page指令的buffer属性配置缓冲区大小。 
 - 
示例:
jsp<% String name = "WeTab AI"; out.println("Hello, " + name); %> 
1.2、 request 对象
- 
类型 :
javax.servlet.http.HttpServletRequest - 
作用:代表客户端的HTTP请求,用于获取请求参数、请求头等信息。
 - 
常用方法:
String getParameter(String name):获取指定名称的请求参数值。String[] getParameterValues(String name):获取指定名称的多个请求参数值(如复选框)。Cookie[] getCookies():获取客户端发送的Cookie。String getHeader(String name):获取指定的请求头信息。HttpSession getSession():获取与当前请求关联的会话。
 - 
特点:
request对象是客户端请求的入口,所有请求参数和请求头都可以通过它访问。
 - 
示例:
jsp<% String username = request.getParameter("username"); out.println("Hello, " + username); %> 
1.3、 response 对象
- 
类型 :
javax.servlet.http.HttpServletResponse - 
作用:代表服务器对客户端的响应,用于设置响应头、发送重定向、设置Cookie等。
 - 
常用方法:
void setContentType(String type):设置响应的内容类型。void sendRedirect(String url):重定向到指定的URL。void addCookie(Cookie cookie):向客户端添加Cookie。
 - 
特点:
response对象是服务器响应的出口,可以控制响应的内容和行为。
 - 
示例:
jsp<% response.setContentType("text/html;charset=UTF-8"); response.sendRedirect("https://www.example.com"); %> 
1.4、 session 对象
- 
类型 :
javax.servlet.http.HttpSession - 
作用:代表客户端的会话,用于在同一个用户多个请求之间共享数据。
 - 
常用方法:
void setAttribute(String name, Object value):在会话中存储数据。Object getAttribute(String name):获取会话中的数据。void invalidate():销毁会话。String getId():获取会话ID。
 - 
特点:
session对象是基于Cookie或URL重写实现的,默认情况下会话数据存储在服务器端。- 会话的生命周期从用户访问开始,直到会话超时或被销毁。
 
 - 
示例:
jsp<% session.setAttribute("username", "Alice"); String username = (String) session.getAttribute("username"); out.println("Hello, " + username); %> 
1.5、 application 对象
- 
类型 :
javax.servlet.ServletContext - 
作用:代表当前Web应用程序的上下文,用于在多个用户和页面之间共享数据。
 - 
常用方法:
void setAttribute(String name, Object value):在应用程序范围内存储数据。Object getAttribute(String name):获取应用程序范围内的数据。String getInitParameter(String name):获取配置参数。
 - 
特点:
application对象的生命周期与Web应用程序相同,从应用程序启动到停止。- 适合存储全局共享的数据,如配置信息或计数器。
 
 - 
示例:
jsp<% Integer count = (Integer) application.getAttribute("visitCount"); if (count == null) { count = 1; } else { count++; } application.setAttribute("visitCount", count); out.println("Visit Count: " + count); %> 
1.6、 cookie 对象
- 
类型 :
javax.servlet.http.Cookie - 
作用:代表客户端的Cookie数据,用于在客户端存储少量信息。
 - 
常用方法:
Cookie(String name, String value):创建一个新的Cookie。void setMaxAge(int seconds):设置Cookie的过期时间。void setPath(String path):设置Cookie的作用路径。void setHttpOnly(boolean):设置Cookie是否只能通过HTTP访问。
 - 
特点:
- Cookie是存储在客户端的小型文本文件,通常用于存储用户的偏好设置或会话标识。
 - 可以通过 
request.getCookies()获取客户端发送的Cookie。 
 - 
示例:
jsp<% Cookie cookie = new Cookie("username", "Bob"); cookie.setMaxAge(3600); // 1小时 response.addCookie(cookie); %> 
2、Servlet
Servlet是Java EE平台中一个重要的组成部分,主要用于处理客户端请求并生成动态Web内容。
2.1、Servlet 概念
Servlet是运行在Web服务器或应用服务器上的Java类,它不能独立运行,必须依赖于Servlet容器(如Tomcat、Jetty等)。Servlet的主要功能是接收客户端请求,处理业务逻辑,并生成响应返回给客户端。
- 作用:处理HTTP请求和响应,生成动态内容。
 - 特性:跨平台、安全性高、可扩展性强。
 
2.2、Servlet 体系结构
Servlet的体系结构主要包括以下几个部分:
- Servlet容器:负责Servlet的生命周期管理,如启动、停止、加载和卸载Servlet。
 - Servlet:处理客户端请求的Java类,实现特定的逻辑。
 - Web应用程序:一组相关联的资源,包括Servlet、JSP、HTML文件等,部署在Servlet容器中。
 - 配置文件 :
web.xml,用于配置Servlet、过滤器、监听器等组件。 
2.3、Servlet 接口
Servlet接口是所有Servlet类必须实现的接口,它定义了Servlet的生命周期方法:
- public void init(ServletConfig config) throws ServletException:初始化Servlet,只调用一次。
 - public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException:处理客户端请求,每次请求都会调用。
 - public void destroy():释放Servlet占用的资源,Servlet被卸载时调用。
 
此外,Servlet还可以继承HttpServlet类,它已经实现了Servlet接口,并提供了doGet、doPost等方法,方便处理HTTP请求。
2.4、ServletConfig 接口
ServletConfig接口用于存储Servlet的配置信息,如Servlet名称、初始化参数等。Servlet容器在初始化Servlet时,会将ServletConfig对象传递给init方法。
- getServletName():获取Servlet的名称。
 - getInitParameter(String name):获取指定名称的初始化参数。
 - getInitParameterNames():获取所有初始化参数的名称。
 
2.5、Servlet 案例
下面是一个简单的HelloWorld Servlet示例:
2.5.1 创建Servlet类
            
            
              java
              
              
            
          
          import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorldServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public HelloWorldServlet() {
        super();
    }
    public void init() throws ServletException {
        // 初始化代码
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().println("<h1>Hello, World!</h1>");
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理POST请求
    }
    public void destroy() {
        // 销毁代码
    }
}
        2.5.2 配置web.xml
在WEB-INF目录下的web.xml文件中配置Servlet:
            
            
              xml
              
              
            
          
          <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
        2.5.3 部署和运行
将Web应用程序部署到Tomcat服务器,启动服务器,访问http://localhost:8080/your-webapp-context/hello,应该会看到Hello, World!的输出。
2.6、请求处理与响应
Servlet通过service方法处理客户端请求,根据请求的方法(如GET、POST)调用相应的do方法(如doGet、doPost)。在方法中,可以获取请求参数、设置响应头、输出响应内容等。
- 
获取请求参数:
javaString param = request.getParameter("paramName"); - 
设置响应头:
javaresponse.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); - 
输出响应内容:
javaPrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello, World!</h1>"); out.println("</body></html>"); 
通过这些方法,Servlet可以灵活地处理各种HTTP请求,并生成动态的HTML内容返回给客户端。
- 
通过@WebServlet注解来代替xml文件
在Servlet 3.0规范及更高版本中,引入了注解配置的方式,使得开发者可以不用再手动编辑
web.xml文件来配置Servlet、过滤器等组件。通过使用@WebServlet注解,可以方便地映射URL到Servlet类上。基本用法
最基本的用法是直接在Servlet类上添加
@WebServlet注解,并指定URL模式:javaimport javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/hello") public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); response.getWriter().write("<h1>Hello, World!</h1>"); } }在这个例子中,
@WebServlet("/hello")表示将URL路径/hello映射到HelloWorldServlet类上。多个URL映射
如果一个Servlet需要处理多个URL路径,可以使用数组的形式指定多个URL模式:
java@WebServlet({ "/hello", "/hi" }) public class HelloWorldServlet extends HttpServlet { // ... }这样,访问
/hello和/hi都会被映射到同一个Servlet上。 
3、MVC
3.1、 MVC 的概念
MVC 是一种将应用程序的逻辑分离的设计模式,它将应用程序分为三个核心部分:
- 模型(Model):负责处理应用程序的数据逻辑,与数据库、文件系统等数据源交互,提供数据的存储、检索和更新功能。
 - 视图(View):负责展示数据,将模型中的数据显示给用户,通常是用户界面(UI)部分。
 - 控制器(Controller):负责处理用户输入,并决定如何与模型和视图交互,是应用程序的核心逻辑层。
 
通过将应用程序的不同职责分离到不同的组件中,MVC模式使得代码更易于维护、扩展和测试。
3.2、 MVC 的角色
3.2.1、模型(Model)
- 
功能:
- 处理应用程序的数据逻辑。
 - 负责与数据源(如数据库、文件系统)进行交互。
 - 提供数据的增删改查(CRUD)操作。
 
 - 
特点:
- 与业务逻辑紧密相关。
 - 不关心数据的展示方式,只负责数据的管理。
 
 - 
示例:
- 
在Java中,模型通常是一个Java类,封装了数据的属性和操作方法。
 - 
例如:
javapublic class User { private String name; private int age; // Getter 和 Setter 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 
 - 
 
3.2.2、视图(View)
- 
功能:
- 负责将模型中的数据显示给用户。
 - 通常是用户界面(UI)部分,如HTML页面、JSP页面、移动端界面等。
 
 - 
特点:
- 与业务逻辑无关,只负责数据的展示。
 - 视图通常是被动接收数据,不直接与模型交互。
 
 - 
示例:
- 
在Web开发中,视图通常是HTML或JSP页面。
 - 
例如:
html<html> <body> <h1>User Information</h1> <p>Name: ${user.name}</p> <p>Age: ${user.age}</p> </body> </html> 
 - 
 
3.2.3、控制器(Controller)
- 
功能:
- 接收用户的请求,并根据请求调用相应的模型和视图。
 - 处理业务逻辑,决定数据的流向。
 
 - 
特点:
- 是模型和视图之间的桥梁,负责协调它们的工作。
 - 处理用户的输入和输出,决定如何处理请求。
 
 - 
示例:
- 
在Java Web开发中,控制器通常是一个Servlet。
 - 
例如:
java@WebServlet("/user") public class UserController extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户数据(模型) User user = new User(); user.setName("John Doe"); user.setAge(30); // 将数据传递给视图 request.setAttribute("user", user); request.getRequestDispatcher("/user.jsp").forward(request, response); } } 
 - 
 
3.3、MVC 的优点
3.3.1、职责分离
MVC模式将应用程序的不同职责分离到不同的组件中,使得代码结构更清晰,易于维护。
3.3.2、可维护性
由于模型、视图和控制器是独立的,所以在修改某个部分时,不会影响到其他部分。例如,修改视图的样式不会影响业务逻辑。
3.3.3、可扩展性
通过MVC模式,可以方便地扩展应用程序的功能。例如,可以很容易地添加新的控制器或视图来支持新的业务需求。
3.3.4、可测试性
由于MVC的职责分离,每个部分都可以独立测试。例如,可以单独测试模型层的业务逻辑,而无需依赖视图。
4、Filter过滤器
4.1、什么是过滤器
过滤器是Servlet规范中定义的一种组件,它可以在Web应用程序中对请求和响应进行拦截和处理。过滤器可以对多个Servlet或JSP页面进行统一的处理,而无需在每个Servlet或JSP中重复编写相同的代码。
4.2、过滤器的作用
过滤器的主要作用包括:
- 
用户认证:在请求到达Servlet之前,检查用户是否已登录,如果没有登录,则重定向到登录页面。
 - 
日志记录:记录请求和响应的信息,用于调试和监控。
 - 
内容压缩:在响应返回给客户端之前,对响应内容进行压缩,以减少传输时间。
 - 
编码处理:统一设置请求和响应的字符编码,避免乱码问题。
 - 
授权控制:根据用户角色和权限,决定是否允许访问某些资源。
 
4.3、工作原理
4.3.1、过滤器链
多个过滤器可以组成一个过滤器链(Filter Chain),每个过滤器都可以对请求和响应进行处理。过滤器链的执行顺序由Web应用程序的部署描述符(如web.xml)或注解配置决定。
4.3.2、过滤器的生命周期
过滤器的生命周期由Servlet容器管理,主要包括以下几个阶段:
- 
初始化 :当Servlet容器启动时,会创建过滤器实例,并调用其
init方法进行初始化。 - 
服务 :每当有请求匹配过滤器的映射规则时,Servlet容器会调用过滤器的
doFilter方法对请求和响应进行处理。 - 
销毁 :当Servlet容器关闭或重新加载Web应用程序时,会调用过滤器的
destroy方法,释放过滤器占用的资源。 
4.4、编写过滤器
4.4.1、实现Filter接口
要创建一个过滤器,需要实现javax.servlet.Filter接口,并重写其中的三个方法:
- 
init(FilterConfig filterConfig):初始化方法,在过滤器实例创建时调用,可以在这里进行一些初始化操作,如获取初始化参数。
 - 
doFilter(ServletRequest request, ServletResponse response, FilterChain chain):核心处理方法,对请求和响应进行处理。
 - 
destroy():销毁方法,在过滤器实例被销毁前调用,用于释放资源。
 
4.4.2、示例代码
下面是一个简单的过滤器示例,用于记录请求的URL和方法:
            
            
              java
              
              
            
          
          import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter("/*")
public class LoggingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("LoggingFilter initialized.");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        System.out.println("Request URL: " + httpRequest.getRequestURL());
        System.out.println("Request Method: " + httpRequest.getMethod());
        // 继续处理请求
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() {
        System.out.println("LoggingFilter destroyed.");
    }
}
        4.5、配置过滤器
4.5.1、使用web.xml配置
在传统的Servlet配置中,可以在web.xml文件中配置过滤器:
            
            
              xml
              
              
            
          
          <filter>
    <filter-name>LoggingFilter</filter-name>
    <filter-class>com.example_loggingfilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoggingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
        4.5.2、使用注解配置
在Servlet 3.0及更高版本中,可以使用@WebFilter注解来简化过滤器的配置:
            
            
              java
              
              
            
          
          import javax.servlet.annotation.WebFilter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter("/*")
public class LoggingFilter implements Filter {
    // 实现Filter接口的方法
}
        5、EL表达式
5.1、什么是EL表达式
EL表达式(Expression Language)是JSP 2.0规范中引入的一种简单表达式语言,主要用于在JSP页面中访问和操作数据。EL表达式以"${"开头,"}"结尾,可以在JSP页面中直接嵌入,而无需编写脚本代码。
5.2、EL表达式的优势
- 
简洁性:EL表达式语法简洁,易于阅读和编写。
 - 
易于维护:减少了JSP页面中的脚本代码,使得页面更加清晰和易于维护。
 - 
与JSTL结合使用:EL表达式常与JSTL(JSP Standard Tag Library)结合使用,进一步提高了JSP开发的效率。
 
5.3、基本结构
EL表达式的最基本形式是:
${expression}
        其中,expression是需要计算的表达式。
5.4、访问变量
EL表达式可以访问以下几种变量:
- 
页面作用域变量:通过pageContext对象访问。
 - 
请求作用域变量:通过request对象访问。
 - 
会话作用域变量:通过session对象访问。
 - 
应用程序作用域变量:通过application对象访问。
 
例如:
- 
访问请求作用域的"name"变量:
${requestScope.name} - 
访问会话作用域的"user"变量:
${sessionScope.user} - 
访问应用程序作用域的"config"变量:
${applicationScope.config} - 
访问页面作用域的"param"变量:
${param.paramName} 
5.5、内置对象
EL表达式提供了一些内置对象,可以直接在表达式中使用:
- 
pageContext:访问JSP页面的PageContext对象。
 - 
request:访问HttpServletRequest对象。
 - 
session:访问HttpSession对象。
 - 
application:访问ServletContext对象。
 - 
param:访问请求参数。
 - 
paramValues:访问多个同名请求参数。
 - 
header:访问请求头信息。
 - 
headerValues:访问多个同名请求头信息。
 - 
cookie:访问Cookie信息。
 - 
initParam:访问ServletContext的初始化参数。
 
例如:
- 
访问请求参数"name":
${param.name} - 
访问请求头"User-Agent":
${header['User-Agent']} 
5.6、运算符
EL表达式支持以下运算符:
5.6.1、算术运算符
- 
加法:
+ - 
减法:
- - 
乘法:
* - 
除法:
/ - 
模运算:
% 
例如:
- 
${5 + 3}结果为8 - 
${10 / 2}结果为5 
5.6.2、比较运算符
- 
等于:
== - 
不等于:
!= - 
小于:
< - 
大于:
> - 
小于等于:
<= - 
大于等于:
>= 
例如:
- 
${5 == 5}结果为true - 
${10 < 5}结果为false 
5.6.3、逻辑运算符
- 
与:
&& - 
或:
|| - 
非:
! 
例如:
- 
${true && false}结果为false - 
${true || false}结果为true - 
${!false}结果为true 
5.6.4、空值运算符
- 空值合并运算符:
?? 
如果左边的值为null,则返回右边的值。
例如:
${name ?? 'default'}如果name为null,则返回'default'
5.6.5、字符串运算符
- 字符串连接:
+ 
例如:
${'Hello' + ' World'}结果为'Hello World'
5.7、访问对象属性
假设有一个JavaBean类Person,有name和age属性:
            
            
              java
              
              
            
          
          public class Person {
    private String name;
    private int age;
    // getters and setters
}
        在JSP页面中,可以这样访问:
- 
${person.name} - 
${person.age} 
如果JavaBean有嵌套属性,也可以链式访问。
假设Person对象有一个Address属性,Address有street和city属性:
            
            
              java
              
              
            
          
          public class Address {
    private String street;
    private String city;
    // getters and setters
}
public class Person {
    private String name;
    private int age;
    private Address address;
    // getters and setters
}
        在JSP页面中,可以这样访问:
- 
${person.address.street} - 
${person.address.city} 
5.8、访问集合
5.8.1、访问List
假设有一个List对象items,包含多个字符串:
            
            
              java
              
              
            
          
          List<String> items = Arrays.asList("apple", "banana", "cherry");
request.setAttribute("items", items);
        在JSP页面中,可以这样访问:
- 
${items[0]}结果为"apple" - 
${items[2]}结果为"cherry" 
5.8.2、访问Map
假设有一个Map对象map,键为字符串,值为整数:
            
            
              java
              
              
            
          
          Map<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
request.setAttribute("map", map);
        在JSP页面中,可以这样访问:
- 
${map['one']}结果为1 - 
${map.two}结果为2 
6、JSTL标签
6.1、概述
6.1.1、什么是JSTL
JSTL是JSP标准标签库,它定义了一组标准标签,用于执行常见的JSP开发任务。通过使用JSTL标签,开发者可以避免在JSP页面中嵌入大量的Java代码,从而使页面更加简洁、易于维护和阅读。
6.1.2、JSTL的优势
- 
减少脚本代码:使用JSTL标签可以减少JSP页面中的脚本代码(如<% %>),提高页面的可读性。
 - 
提高开发效率:JSTL提供了许多现成的标签,可以直接完成常见的任务,如条件判断、循环、国际化等。
 - 
可重用性:JSTL标签库可以被多个JSP页面重用,减少了重复代码。
 - 
易于维护:通过标签库,JSP页面可以更加结构化,便于团队协作和维护。
 
6.2、核心功能与标签库分类
JSTL标签库主要分为以下几类:
6.2.1、核心标签库(Core Tag Library)
核心标签库提供了常用的标签,如条件判断、循环、变量操作、URL处理等。
核心标签库的URI:http://java.sun.com/jsp/jstl/core
核心标签库的前缀通常为c。
6.2.2、格式化标签库(Formatting Tag Library)
格式化标签库用于格式化日期、数字、货币等数据,支持国际化和本地化。
格式化标签库的URI:http://java.sun.com/jsp/jstl/fmt
格式化标签库的前缀通常为fmt。
6.2.3、SQL标签库(SQL Tag Library)
SQL标签库提供了对数据库的操作支持,如查询、插入、更新和删除等。
SQL标签库的URI:http://java.sun.com/jsp/jstl/sql
SQL标签库的前缀通常为sql。
6.2.4、XML标签库(XML Tag Library)
XML标签库提供了对XML文档的操作支持,如解析、转换、遍历等。
XML标签库的URI:http://java.sun.com/jsp/jstl/xml
XML标签库的前缀通常为x。
6.3、核心标签库(Core Tag Library)
核心标签库是JSTL中最常用的一部分,提供了以下功能标签:
6.3.1、<c:out>
用于输出表达式的值,类似于JSP中的<%= %>。
语法:
            
            
              jsp
              
              
            
          
          <c:out value="${expression}" default="defaultValue" escapeXml="true|false"/>
        示例:
            
            
              jsp
              
              
            
          
          <c:out value="${user.name}" default="Guest"/>
        如果${user.name}为空,则输出"Guest"。
6.3.2、<c:set>
用于设置变量的值或对象的属性。
语法:
            
            
              jsp
              
              
            
          
          <c:set var="variableName" value="${expression}" scope="page|request|session|application"/>
        示例:
            
            
              jsp
              
              
            
          
          <c:set var="username" value="${user.name}" scope="session"/>
        将${user.name}的值赋给username,并存储在会话作用域中。
6.3.3、<c:if>
用于条件判断。
语法:
            
            
              jsp
              
              
            
          
          <c:if test="${condition}">
    <!-- 如果条件为真,执行这里的代码 -->
</c:if>
        示例:
            
            
              jsp
              
              
            
          
          <c:if test="${user.age > 18}">
    <p>You are an adult.</p>
</c:if>
        6.3.4、<c:choose>、<c:when>、<c:otherwise>
类似于Java中的switch-case语句,用于多条件判断。
语法:
            
            
              jsp
              
              
            
          
          <c:choose>
    <c:when test="${condition1}">
        <!-- 如果 condition1 为真,执行这里的代码 -->
    </c:when>
    <c:when test="${condition2}">
        <!-- 如果 condition2 为真,执行这里的代码 -->
    </c:when>
    <c:otherwise>
        <!-- 如果所有条件都不满足,执行这里的代码 -->
    </c:otherwise>
</c:choose>
        示例:
            
            
              jsp
              
              
            
          
          <c:choose>
    <c:when test="${user.age < 18}">
        <p>You are a minor.</p>
    </c:when>
    <c:when test="${user.age >= 18 && user.age < 60}">
        <p>You are an adult.</p>
    </c:when>
    <c:otherwise>
        <p>You are a senior.</p>
    </c:otherwise>
</c:choose>
        6.3.5、<c:forEach>
用于遍历集合或数组。
语法:
            
            
              jsp
              
              
            
          
          <c:forEach var="item" items="${collection}">
    <!-- 遍历集合中的每个元素 -->
</c:forEach>
        示例:
            
            
              jsp
              
              
            
          
          <c:forEach var="item" items="${items}">
    <p>${item}</p>
</c:forEach>
        6.3.6、<c:url>
用于创建URL,支持编码。
语法:
            
            
              jsp
              
              
            
          
          <c:url value="/path" var="urlVariable"/>
        示例:
            
            
              jsp
              
              
            
          
          <c:url value="/user/profile" var="profileUrl"/>
<a href="${profileUrl}">View Profile</a>
        6.4、格式化标签库(Formatting Tag Library)
格式化标签库用于格式化数据,如日期、数字、货币等。
6.4.1、<fmt:formatDate>
用于格式化日期。
语法:
            
            
              jsp
              
              
            
          
          <fmt:formatDate value="${date}" pattern="yyyy-MM-dd"/>
        示例:
            
            
              jsp
              
              
            
          
          <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
        6.4.2、<fmt:formatNumber>
用于格式化数字。
语法:
            
            
              jsp
              
              
            
          
          <fmt:formatNumber value="${number}" type="currency"/>
        示例:
            
            
              jsp
              
              
            
          
          <fmt:formatNumber value="${price}" type="currency" currencyCode="USD"/>
        6.5、示例
以下是一个完整的JSP页面示例,展示了JSTL标签的使用:
            
            
              jsp
              
              
            
          
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
    <title>JSTL Example</title>
</head>
<body>
    <h1>JSTL Example</h1>
    <!-- 输出变量 -->
    <p>User Name: <c:out value="${user.name}"/></p>
    <!-- 条件判断 -->
    <c:if test="${user.age > 18}">
        <p>You are an adult.</p>
    </c:if>
    <!-- 多条件判断 -->
    <c:choose>
        <c:when test="${user.age < 18}">
            <p>You are a minor.</p>
        </c:when>
        <c:otherwise>
            <p>You are an adult or senior.</p>
        </c:otherwise>
    </c:choose>
    <!-- 遍历集合 -->
    <c:forEach var="item" items="${items}">
        <p>${item}</p>
    </c:forEach>
    <!-- 格式化日期 -->
    <p>Current Date: <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/></p>
    <!-- 格式化数字 -->
    <p>Price: <fmt:formatNumber value="${price}" type="currency" currencyCode="USD"/></p>
</body>
</html>