目录
- 1、JSP内置对象
- 1. 1、**`out` 对象**
- 1.2、 **`request` 对象**
- 1.3、 **`response` 对象**
- 1.4、 **`session` 对象**
- 1.5、 **`application` 对象**
- 1.6、 **`cookie` 对象**
- 2、Servlet
- 2.1、Servlet 概念
- 2.2、Servlet 体系结构
- 2.3、Servlet 接口
- 2.4、ServletConfig 接口
- 2.5、Servlet 案例
- 2.5.1 创建Servlet类
- 2.5.2 配置web.xml
- 2.5.3 部署和运行
- 2.6、请求处理与响应
- 基本用法
- 多个URL映射
- 3、MVC
- 3.1、 MVC 的概念
- 3.2、 MVC 的角色
- 3.2.1、模型(Model)
- 3.2.2、视图(View)
- 3.2.3、控制器(Controller)
- 3.3、MVC 的优点
- 3.3.1、职责分离
- 3.3.2、可维护性
- 3.3.3、可扩展性
- 3.3.4、可测试性
- 4、Filter过滤器
- 4.1、什么是过滤器
- 4.2、过滤器的作用
- 4.3、工作原理
- 4.3.1、过滤器链
- 4.3.2、过滤器的生命周期
- 4.4、编写过滤器
- 4.4.1、实现Filter接口
- 4.4.2、示例代码
- 4.5、配置过滤器
- 4.5.1、使用web.xml配置
- 4.5.2、使用注解配置
- 5、EL表达式
- 5.1、什么是EL表达式
- 5.2、EL表达式的优势
- 5.3、基本结构
- 5.4、访问变量
- 5.5、内置对象
- 5.6、运算符
- 5.6.1、算术运算符
- 5.6.2、比较运算符
- 5.6.3、逻辑运算符
- 5.6.4、空值运算符
- 5.6.5、字符串运算符
- 5.7、访问对象属性
- 5.8、访问集合
- 5.8.1、访问List
- 5.8.2、访问Map
- 6、JSTL标签
- 6.1、概述
- 6.1.1、什么是JSTL
- 6.1.2、JSTL的优势
- 6.2、核心功能与标签库分类
- 6.2.1、核心标签库(Core Tag Library)
- 6.2.2、格式化标签库(Formatting Tag Library)
- 6.2.3、SQL标签库(SQL Tag Library)
- 6.2.4、XML标签库(XML Tag Library)
- 6.3、核心标签库(Core Tag Library)
- 6.3.1、`<c:out>`
- 6.3.2、`<c:set>`
- 6.3.3、`<c:if>`
- 6.3.4、`<c:choose>`、`<c:when>`、`<c:otherwise>`
- 6.3.5、`<c:forEach>`
- 6.3.6、`<c:url>`
- 6.4、格式化标签库(Formatting Tag Library)
- 6.4.1、`<fmt:formatDate>`
- 6.4.2、`<fmt:formatNumber>`
- 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
属性配置缓冲区大小。
-
示例:
<%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
对象是客户端请求的入口,所有请求参数和请求头都可以通过它访问。
-
示例:
<%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
对象是服务器响应的出口,可以控制响应的内容和行为。
-
示例:
<%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重写实现的,默认情况下会话数据存储在服务器端。- 会话的生命周期从用户访问开始,直到会话超时或被销毁。
-
示例:
<%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应用程序相同,从应用程序启动到停止。- 适合存储全局共享的数据,如配置信息或计数器。
-
示例:
<%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。
-
示例:
<%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类
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:
<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)。在方法中,可以获取请求参数、设置响应头、输出响应内容等。
-
获取请求参数:
String param = request.getParameter("paramName");
-
设置响应头:
response.setContentType("text/html"); response.setCharacterEncoding("UTF-8");
-
输出响应内容:
PrintWriter 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模式:import 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模式:
@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类,封装了数据的属性和操作方法。
-
例如:
public 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> <body><h1>User Information</h1><p>Name: ${user.name}</p><p>Age: ${user.age}</p> </body> </html>
-
3.2.3、控制器(Controller)
-
功能:
- 接收用户的请求,并根据请求调用相应的模型和视图。
- 处理业务逻辑,决定数据的流向。
-
特点:
- 是模型和视图之间的桥梁,负责协调它们的工作。
- 处理用户的输入和输出,决定如何处理请求。
-
示例:
-
在Java Web开发中,控制器通常是一个Servlet。
-
例如:
@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和方法:
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;@WebFilter("/*")
public class LoggingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("LoggingFilter initialized.");}@Overridepublic 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);}@Overridepublic void destroy() {System.out.println("LoggingFilter destroyed.");}
}
4.5、配置过滤器
4.5.1、使用web.xml配置
在传统的Servlet配置中,可以在web.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
注解来简化过滤器的配置:
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属性:
public class Person {private String name;private int age;// getters and setters
}
在JSP页面中,可以这样访问:
-
${person.name}
-
${person.age}
如果JavaBean有嵌套属性,也可以链式访问。
假设Person对象有一个Address属性,Address有street和city属性:
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,包含多个字符串:
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,键为字符串,值为整数:
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中的<%= %>
。
语法:
<c:out value="${expression}" default="defaultValue" escapeXml="true|false"/>
示例:
<c:out value="${user.name}" default="Guest"/>
如果${user.name}
为空,则输出"Guest"。
6.3.2、<c:set>
用于设置变量的值或对象的属性。
语法:
<c:set var="variableName" value="${expression}" scope="page|request|session|application"/>
示例:
<c:set var="username" value="${user.name}" scope="session"/>
将${user.name}
的值赋给username
,并存储在会话作用域中。
6.3.3、<c:if>
用于条件判断。
语法:
<c:if test="${condition}"><!-- 如果条件为真,执行这里的代码 -->
</c:if>
示例:
<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
语句,用于多条件判断。
语法:
<c:choose><c:when test="${condition1}"><!-- 如果 condition1 为真,执行这里的代码 --></c:when><c:when test="${condition2}"><!-- 如果 condition2 为真,执行这里的代码 --></c:when><c:otherwise><!-- 如果所有条件都不满足,执行这里的代码 --></c:otherwise>
</c:choose>
示例:
<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>
用于遍历集合或数组。
语法:
<c:forEach var="item" items="${collection}"><!-- 遍历集合中的每个元素 -->
</c:forEach>
示例:
<c:forEach var="item" items="${items}"><p>${item}</p>
</c:forEach>
6.3.6、<c:url>
用于创建URL,支持编码。
语法:
<c:url value="/path" var="urlVariable"/>
示例:
<c:url value="/user/profile" var="profileUrl"/>
<a href="${profileUrl}">View Profile</a>
6.4、格式化标签库(Formatting Tag Library)
格式化标签库用于格式化数据,如日期、数字、货币等。
6.4.1、<fmt:formatDate>
用于格式化日期。
语法:
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd"/>
示例:
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
6.4.2、<fmt:formatNumber>
用于格式化数字。
语法:
<fmt:formatNumber value="${number}" type="currency"/>
示例:
<fmt:formatNumber value="${price}" type="currency" currencyCode="USD"/>
6.5、示例
以下是一个完整的JSP页面示例,展示了JSTL标签的使用:
<%@ 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>