JSP(Java Server Pages)

JSP

概述

全称:Java Server Pages

​ Java 服务器页面,和 Servlet 一样,都是Sun公司提供的动态资源开发技术。兼容HTML,CSS,JavaScript,还可以运行 Java 代码

特点

  1. 基于 HTML 模版,可以在HTML模版嵌入 Java 代码和一些特有的标签。可以同时在设计完成前端页面,优化美化的情况下通过 Java 代码实现后台逻辑。
  2. 与纯 Servlet 相比:JSP 可以很方便的编写或者修改HTML网页而不用去面对大量的println语句
  3. 与 JavaScript 相比:虽然 JavaScript 可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
  4. 与静态HTML相比:静态HTML不包含动态资源的
【注意】JSP中不建议出现任何一行Java代码!!!

为什么要用 JSP

  1. JSP目前在没有了解过前端解析数据方式情况下,和Java后台的融合性更好
  2. JSP 最终编译的结果就是一个 Servlet 程序
  3. JSP 兼容性还可以!!!性能还不错!!!
  4. 【重点】可以让 Servlet 摆脱内嵌HTML页面的情况
  5. JSP 是一个动态资源,和 HTML 页面不一样。

JSP 语法

JSP 脚本(语法格式)

JSP 定义 Java 代码的方式

JSP 页面中可以包含任意的Java代码,变量,语句和方法

脚本类型:
	<% 代码 %>	:定义的Java代码,在 service 方法中可以写的这里都能写
	<%! 代码 %>	:定义的Java代码,在JSP对应Servlet中的成员变量或者成员方法
	<%= 代码 %>	:输出语句,直接输出到前端页面上


常见使用:
	<% Java代码 %>
	
	声明局部变量:
	<% int i = 10; %>
	
	声明全局变量:
	<%! int i = 10; %>
	
	声明方法:
	<%! public void testMethod() {} %>
	
	输出变量:
	<%=2 + 3%> 输出语句没有分号结尾
	
	JSP注释【重点】
	<%-- JSP注释 --%> 安全,省流量
	<!-- 网页注释 --> 不安全,耗流量

案例代码一

<%--JSP指令,声明了内容类型以及所用的语言--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>JSP案例代码</title>
    </head>
    <body>

        <%--通过JSP内置对象输出内容到前端页面--%>
        <%
            out.print("Hello JSP!!!");
        %>

        <%
            // 声明Java变量
            int num = 1;
            // 输出到控制台
            System.out.println("Java:" + num);

            // 通过JSP内置对象输出内容到前端页面中
            out.print("前端页面:" + num);
        %>

        <%--声明一个全局变量,注意这里不能使用static--%>
        <%!
            int num2;
        %>

        <%-- <%%>可以分开写,效果和写在一起是一样的--%>
        <%
            System.out.println("Java:" + num);
        %>

        <%--声明Java中的方法--%>
        <%!
            public void testMethod() {
                num2 = 100;
                System.out.println("JSP中声明Java方法" + num2);
            }
        %>

        <%--调用方法--%>
        <%
            testMethod();
        %>

        <%--重点JSP格式输出,最常用--%>
        <%=num + 1%>
    </body>
</html>
JSP 指令【了解】
Page 指令

告诉 JSP 引擎如何操作文件中的内容

JSP指令格式:
	<%@ page 属性名1="属性值" 属性名2="属性值" ...%>

需要了解的属性:
	<%--【重点】导包,和Java中操作一致,导入当前JSP页面所需的资源--%>
    import 
    	
	<%--设置页面的响应内容类型以及编码集--%>
    contentType="text/html; charset=UTF-8" 
    	
	<%--解析当前JSP页面使用的语言--%>
    language="java" 
    	
	<%--当前页面的编码集--%>
    pageEncoding="utf-8" 
    	
	<%--JSP页面的默认缓冲大小为8KB,
    类型为java.servlet.jsp.JspWriter输出字符流--%>
    buffer="8kb" 
    	
	<%--session 默认创建,如果选择不开启 session 属性值设为false--%>
    session="true" 
    	
	<%--JSP页面是否支持EL表达式,默认支持,不支持属性值为false--%>
    isELIgnored="true" 
    	
	<%--当前页面是否为错误页面,默认为false--%>
    isErrorPage="false" 

	<%--指定当前JSP页面发送错误之后,跳转到哪一个错误页面
	【注意】如果写“/”则代表当前应用的目录 下,绝对路径。  如果不写“/”则代表相对路径--%>
    errorPage="url" 

案例代码一

<%--导包--%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="com.fc.bean.Student" %>

<%@ page contentType="text/html;charset=UTF-8" 
         language="java"
         session="true"
         isErrorPage="false"
         pageEncoding="UTF-8"
         buffer="8kb"
         isELIgnored="true"
         errorPage="Demo1.jsp"
%>
<html>
    <head>
        <title>测试JSP的page指令</title>
    </head>
    <body>
        <%
            List<Student> list = new ArrayList<>();

            list.add(new Student("易烊千玺", 22));
            list.add(new Student("迪丽热巴", 26));
        %>

        <%=list%>
    </body>
</html>

案例代码二:两个数求和

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP案例一:两个数求和</title>
</head>
<body>
    <%
        int num1 = 4;
        int num2 = 5;

        out.print("两个数求和:");
    %>

    <%=num1 + num2%>
</body>
</html>

案例代码三:表格展示

<%@ page import="com.fc.bean.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>案例代码二:表格展示</title>
</head>
<body>
    <table border="1" align="center">
        <caption>用户列表</caption>
        <tr><td>编号</td><td align="center">姓名</td><td>年龄</td><td>性别</td><td>信息</td></tr>

        <%
            Student student1 = new Student(1, "易烊千玺", 20, "男", "真帅");
            Student student2 = new Student(2, "迪丽热巴", 28, "女", "真美");
        %>

        <tr>
            <td><%=student1.getId()%></td>
            <td><%=student1.getName()%></td>
            <td><%=student1.getAge()%></td>
            <td><%=student1.getGender()%></td>
            <td><%=student1.getInfo()%></td>
        </tr>

        <tr>
            <td><%=student2.getId()%></td>
            <td><%=student2.getName()%></td>
            <td><%=student2.getAge()%></td>
            <td><%=student2.getGender()%></td>
            <td><%=student2.getInfo()%></td>
        </tr>
    </table>
</body>
</html>

案例代码四:连接数据库

<%@ page import="com.fc.bean.Student" %>
<%@ page import="com.fc.utils.JdbcUtilsOnC3P0" %>
<%@ page import="org.apache.commons.dbutils.QueryRunner" %>
<%@ page import="org.apache.commons.dbutils.handlers.BeanListHandler" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>案例代码三:连接数据库</title>
</head>
<body>
    <table align="center" border="1px">
        <caption>用户列表</caption>
        <tr><th>编号</th><th>姓名</th><th>年龄</th><th>性别</th><th>信息</th></tr>

        <%
            // 获取核心类对象
            QueryRunner queryRunner = new QueryRunner();

            // 获取连接
            Connection connection = JdbcUtilsOnC3P0.getConnection();

            // 准备SQL语句
            String sql = "select * from student";

            // 提取结果集List
            List<Student> list = null;

            // 执行SQL语句
            try {
                list = queryRunner.query(connection, sql, new BeanListHandler<>(Student.class));
            } catch (SQLException e) {
                e.printStackTrace();
            }

            if (list != null) {
                for (Student student : list) {
            %>

            <tr>
                <td><%=student.getId()%></td>
                <td><%=student.getName()%></td>
                <td><%=student.getAge()%></td>
                <td><%=student.getGender()%></td>
                <td><%=student.getInfo()%></td>
            </tr>

            <%
                }
            }
        %>
    </table>
</body>
</html>

案例代码五:登陆注册

<%@ page import="com.fc.bean.Account" %>
<%@ page import="com.fc.utils.JdbcUtilsOnC3P0" %>
<%@ page import="org.apache.commons.dbutils.QueryRunner" %>
<%@ page import="org.apache.commons.dbutils.handlers.BeanHandler" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.SQLException" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP案例代码:登陆注册</title>
</head>
<body>
    <%
        // 设置请求编码集
        request.setCharacterEncoding("UTF8");

        // 获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 获取核心类对象
        QueryRunner queryRunner = new QueryRunner();

        // 获取连接
        Connection connection = JdbcUtilsOnC3P0.getConnection();

        // 准备SQL语句
        String sql = "select * from account where username = ? and password = ?";

        // 准备参数
        Object[] params = {username, password};

        // 提取对象
        Account student = null;

        try {
            // 执行SQL语句获取对应的实体类对象
            student = queryRunner.query(connection, sql, new BeanHandler<>(Account.class), params);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 判断实体类对象是否为null,如果不为null表示登录成功,否则登录失败
        if (student != null) {
            out.print("登陆成功");
        } else {
            out.print("登陆失败");
        }
    %>
</body>
</html>
include 指令

包含其他的 JSP 页面,可以是静态包含,也可以是动态包含

静态包含【重点】:
	<%@ include file="页面"%>

动态包含:
	<jsp:include page="页面"></jsp:include>

【注意】两者的区别:编译的时间段不同

  • 静态包含其他 JSP 页面。是将两个 JSP 页面编译时直接合并
  • 动态包含是当前 JSP 页面运行到 jsp:include 时才会加载对应的 JSP 资源,并不会合并两个 JSP 页面
<%@ include file="header.jsp"%>
content 内容
<%@ include file="bottom.jsp"%>
taglib 指令

导入其他资源标签库,比如 JSTL

<%@ taglib uri="路径" prefix="c" %>

	uri:资源
	prefix:前缀,可自定义,一般使用约定俗成的

JSP

JSP 语法

JSP 指令【了解】
Page 指令

告诉 JSP 引擎如何操作文件中的内容

JSP指令格式:
	<%@ page 属性名1="属性值" 属性名2="属性值" ...%>

需要了解的属性:
	<%--【重点】导包,和Java中操作一致,导入当前JSP页面所需的资源--%>
    import 
    	
	<%--设置页面的响应内容类型以及编码集--%>
    contentType="text/html; charset=UTF-8" 
    	
	<%--解析当前JSP页面使用的语言--%>
    language="java" 
    	
	<%--当前页面的编码集--%>
    pageEncoding="utf-8" 
    	
	<%--JSP页面的默认缓冲大小为8KB,
    类型为java.servlet.jsp.JspWriter输出字符流--%>
    buffer="8kb" 
    	
	<%--session 默认创建,如果选择不开启 session 属性值设为false--%>
    session="true" 
    	
	<%--JSP页面是否支持EL表达式,默认支持,不支持属性值为false--%>
    isELIgnored="true" 
    	
	<%--当前页面是否为错误页面,默认为false--%>
    isErrorPage="false" 

	<%--指定当前JSP页面发送错误之后,跳转到哪一个错误页面
	【注意】如果写“/”则代表当前应用的目录 下,绝对路径。  如果不写“/”则代表相对路径--%>
    errorPage="url" 

案例代码一

<%--导包--%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="com.fc.bean.Student" %>

<%@ page contentType="text/html;charset=UTF-8" 
         language="java"
         session="true"
         isErrorPage="false"
         pageEncoding="UTF-8"
         buffer="8kb"
         isELIgnored="true"
         errorPage="Demo1.jsp"
%>
<html>
    <head>
        <title>测试JSP的page指令</title>
    </head>
    <body>
        <%
            List<Student> list = new ArrayList<>();

            list.add(new Student("易烊千玺", 22));
            list.add(new Student("迪丽热巴", 26));
        %>

        <%=list%>
    </body>
</html>

案例代码二:两个数求和

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP案例一:两个数求和</title>
</head>
<body>
    <%
        int num1 = 4;
        int num2 = 5;

        out.print("两个数求和:");
    %>

    <%=num1 + num2%>
</body>
</html>

案例代码三:表格展示

<%@ page import="com.fc.bean.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>案例代码二:表格展示</title>
</head>
<body>
    <table border="1" align="center">
        <caption>用户列表</caption>
        <tr><td>编号</td><td align="center">姓名</td><td>年龄</td><td>性别</td><td>信息</td></tr>

        <%
            Student student1 = new Student(1, "易烊千玺", 20, "男", "真帅");
            Student student2 = new Student(2, "迪丽热巴", 28, "女", "真美");
        %>

        <tr>
            <td><%=student1.getId()%></td>
            <td><%=student1.getName()%></td>
            <td><%=student1.getAge()%></td>
            <td><%=student1.getGender()%></td>
            <td><%=student1.getInfo()%></td>
        </tr>

        <tr>
            <td><%=student2.getId()%></td>
            <td><%=student2.getName()%></td>
            <td><%=student2.getAge()%></td>
            <td><%=student2.getGender()%></td>
            <td><%=student2.getInfo()%></td>
        </tr>
    </table>
</body>
</html>

案例代码四:连接数据库

<%@ page import="com.fc.bean.Student" %>
<%@ page import="com.fc.utils.JdbcUtilsOnC3P0" %>
<%@ page import="org.apache.commons.dbutils.QueryRunner" %>
<%@ page import="org.apache.commons.dbutils.handlers.BeanListHandler" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>案例代码三:连接数据库</title>
</head>
<body>
    <table align="center" border="1px">
        <caption>用户列表</caption>
        <tr><th>编号</th><th>姓名</th><th>年龄</th><th>性别</th><th>信息</th></tr>

        <%
            // 获取核心类对象
            QueryRunner queryRunner = new QueryRunner();

            // 获取连接
            Connection connection = JdbcUtilsOnC3P0.getConnection();

            // 准备SQL语句
            String sql = "select * from student";

            // 提取结果集List
            List<Student> list = null;

            // 执行SQL语句
            try {
                list = queryRunner.query(connection, sql, new BeanListHandler<>(Student.class));
            } catch (SQLException e) {
                e.printStackTrace();
            }

            if (list != null) {
                for (Student student : list) {
            %>

            <tr>
                <td><%=student.getId()%></td>
                <td><%=student.getName()%></td>
                <td><%=student.getAge()%></td>
                <td><%=student.getGender()%></td>
                <td><%=student.getInfo()%></td>
            </tr>

            <%
                }
            }
        %>
    </table>
</body>
</html>

案例代码五:登陆注册

<%@ page import="com.fc.bean.Account" %>
<%@ page import="com.fc.utils.JdbcUtilsOnC3P0" %>
<%@ page import="org.apache.commons.dbutils.QueryRunner" %>
<%@ page import="org.apache.commons.dbutils.handlers.BeanHandler" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.SQLException" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP案例代码:登陆注册</title>
</head>
<body>
    <%
        // 设置请求编码集
        request.setCharacterEncoding("UTF8");

        // 获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 获取核心类对象
        QueryRunner queryRunner = new QueryRunner();

        // 获取连接
        Connection connection = JdbcUtilsOnC3P0.getConnection();

        // 准备SQL语句
        String sql = "select * from account where username = ? and password = ?";

        // 准备参数
        Object[] params = {username, password};

        // 提取对象
        Account student = null;

        try {
            // 执行SQL语句获取对应的实体类对象
            student = queryRunner.query(connection, sql, new BeanHandler<>(Account.class), params);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 判断实体类对象是否为null,如果不为null表示登录成功,否则登录失败
        if (student != null) {
            out.print("登陆成功");
        } else {
            out.print("登陆失败");
        }
    %>
</body>
</html>
include 指令【了解】

包含其他的 JSP 页面,可以是静态包含,也可以是动态包含

静态包含【重点】:
	<%@ include file="页面"%>

动态包含:
	<jsp:include page="页面"></jsp:include>

【注意】两者的区别:编译的时间段不同

  • 静态包含其他 JSP 页面。是将两个 JSP 页面编译时直接合并
  • 动态包含是当前 JSP 页面运行到 jsp:include 时才会加载对应的 JSP 资源,并不会合并两个 JSP 页面
<%@ include file="header.jsp"%>
content 内容
<%@ include file="bottom.jsp"%>
taglib 指令

导入其他资源标签库,比如 JSTL

<%@ taglib uri="路径" prefix="c" %>

	uri:资源
	prefix:前缀,可自定义,一般使用约定俗成的
JSP 动作【了解】

这里可以使用一部分的 JSP 标签来表示一定的 Java 代码

jsp:include 	动态包含页面
jsp:forword 	转发
jsp:param 		请求设置参数
jsp:useBean 	创建一个对象【稍微重要一点点】
jsp:setProperty 给指定的对象对应属性赋值【稍微重要一点点】
jsp:getProperty 从指定的对象对应属性取值【稍微重要一点点】

案例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>测试JSP的动作</title>
    </head>
    <body>
        <%--声明一个Student类型的对象,变量名为student,作用域为page:代表整个页面有效--%>
        <jsp:useBean id="student" class="com.fc.bean.Student" scope="page"/>

        <%--设置,相当于setter--%>
        <jsp:setProperty name="student" property="age" value="1"/>
        <jsp:setProperty name="student" property="name" value="易烊千玺"/>

        <%--获取,相当于getter--%>
        <jsp:getProperty name="student" property="age"/>
        <jsp:getProperty name="student" property="name"/>
    </body>
</html>

JSP 内置对象【重点】

不需要定义,可以直接使用

对象名类型描述
requestjavax.servlet.http.HttpServletRequest用户请求对象
responsejavax.servlet.http.HttpServletResponse用户响应对象
sessionjavax.servlet.http.HttpSessionSession会话控制对象
applicationjavax.servlet.ServletContext整个项目的上下文对象
exceptionjava.lang.Exception异常,isErrorPage=“true”
pagejava.lang.Object ==> this对象JSP ==> Servlet this对象(代表当前页面)
configjavax.servlet.ServletConfigServlet 配置对象
outjavax.servlet.jsp.JspWriter输出对象,能输出内容到页面上
pageContextjavax.servlet.jsp.PageContext当前页面对象上下文,可以获取其他对象【重点】

案例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>测试内置对象</title>
</head>
<body>
   <%--请求对象request--%>
   <%
       StringBuffer url = request.getRequestURL();
       System.out.println(url);
   %>

   <%--响应对象response--%>
   <%
       String contentType = response.getContentType();
       System.out.println(contentType);
   %>

   <%--pageContext上下文对象--%>
   <%
       // 设置属性键值对
       pageContext.setAttribute("msg", "pageContext");
   %>

   <%--pageContext上下文对象,获取键对应的值--%>
   <%=pageContext.getAttribute("msg")%>

   <%--out对象--%>
   <%
       // 注意,response.getWriter().append("response")优先级最高,不管写到哪里都最先显示
       out.print("out");
       response.getWriter().append("response");
   %>

</body>
</html>

域对象【重点】

域对象分类
域对象作用范围
pageContext当前 JSP 页面有效
request请求中有效
session会话控制中有效
application整个项目中有效
域对象的方法

域对象都可以操作以下三个方法

// 设置属性键值对
void setAttribute(String name, Object value)

// 根据键获取对应的值
Object getAttribute(String name);	

// 移除键所对应的键值对
void removeAttribute(String name);

pageContext【重重重点!!】

这个对象代表页面上下文,该对象主要用于访问 JSP 之间的共享数据。

获取其他内置对象的方法
<%--获取请求对象--%>
ServletRequest getRequest();

<%--获取响应对象--%>
ServletResponse getResponse();

<%--获取Session--%>
HttpSession getSession();

<%--获取异常对象--%>
Exception getException();

<%--获取当前页对象--%>
Object getPage();

<%--获取Servlet配置对象--%>
ServletConfig getServletConfig();

<%--获取Servlet上下文对象,即Application对象--%>
ServletContext getServletContext();

<%--获取页面输出对象--%>
JspWriter getOut();
操作其他域对象的方法

pageContext 存在一定的特权,通过 pageContext 可以操作其他域对象

// 在指定域环境中设置属性
void setAttribute(String name, Object value, int scope);

// 根据键获取指定域环境中的属性
Object getAttribute(String name, int scope);

//  移除指定域对象中的键值对
void removeAttribute(String name, int scope);

// 按page、request、session、application的共享范围依次搜索已命名的属性
Object findAttribute(String var1);

【注意】scope 是域对象标记,这里使用了一个常量来表示(PageContext中的静态常量)

域对象常量值
PageContext.PAGE_SCOPE1
PageContext.REQUEST_SCOPE2
PageContext.SESSION_SCOPE3
PageContext.APPLICATION_SCOPE4

案例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试pageContext对象</title>
</head>
<body>

    <%--通过pageContext可以获取到其他对象--%>
    <%
        pageContext.getRequest();
        pageContext.getResponse();
        pageContext.getSession();
        pageContext.getException();
        pageContext.getPage();
        pageContext.getServletConfig();
        pageContext.getServletContext();
        pageContext.getOut();
    %>

    <%--分别给各个作用域设置属性键值对--%>
    <%
        pageContext.setAttribute("username", "易烊千玺", PageContext.PAGE_SCOPE);
        pageContext.setAttribute("username", "迪丽热巴", PageContext.REQUEST_SCOPE);
        pageContext.setAttribute("username", "古力娜扎", PageContext.SESSION_SCOPE);
        pageContext.setAttribute("username", "欧阳娜娜", PageContext.APPLICATION_SCOPE);
    %>

    <%--获取当前页面中属性对应的值--%>
    <%=pageContext.getAttribute("username")%>

    <%--获取请求对象中属性对应的值--%>
    <%
        Object username1 = request.getAttribute("username");
        System.out.println(username1);
    %>

    <%--获取session中属性对应的值--%>
    <%
        Object username2 = session.getAttribute("username");
        System.out.println(username2);
    %>

    <%--获取ServletContext中属性对应的值--%>
    <%
        Object username3 = application.getAttribute("username");
        System.out.println(username3);
    %>
    
    <%-- 按page、request、session、application的共享范围依次搜索已命名的属性--%>
    <%
        Object username = pageContext.findAttribute("username");
        System.out.println(username);
    %>
</body>
</html>
两个简易方法
// 该方法用于向当前的页面中包含其他文件
void include(String var1);
    
// 转发页面
void forward(String var1);

案例代码一

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>pageContext的转发方法</title>
</head>
<body>
    <%--测试转发--%>
    <%
        pageContext.forward("forward.jsp");
    %>
</body>
</html>

案例代码二

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试pageContext的包含方法</title>
</head>
<body>
    <%
        pageContext.include("forward.jsp");
    %>
</body>
</html>

EL 表达式【简单又重点】

概述

表达式语言(Expression Language),或称EL表达式,简称 EL,是 Java 中的一种特殊的通用编程语言,借鉴于 JavaScript 和 XPath。主要作用是将Java Web应用程序嵌入到网页(如JSP)中,用以访问页面的上下文以及不同作用域中的对象、取得对象属性的值或执行简单的运算或判断操作。EL 在得到某个数据时,会自动进行数据类型的转换。

【注意】EL 不是一种开发语言,是 JSP 中获取数据的一种规范

作用

目的:简化 JSP 中 Java 代码的编写,用于获取参数

格式

${EL表达式}

【注意】

1. 等价于 findAttribute(name);

2. JSP默认支持EL表达式的。如果要忽略EL表达式
	1、设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
	2、${/表达式} :忽略当前这个EL表达式

EL 的使用

基础使用

案例代码一:获取实体类中的属性值

<%@ page import="com.fc.bean.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式</title>
</head>
<body>
    <%
        // 声明一个对象
        Student student = new Student(1, "易烊千玺", 20, "男", "真帅");

        // 将对象作为值存入pageContext中
        pageContext.setAttribute("student", student);
    %>

    <table align="center" border="1px">
        <tr>
            <th>ID</th><th>姓名</th><th>年龄</th><th>性别</th><th>信息</th>
        </tr>
        <tr>
            <%--通过EL表达式获取对应的值--%>
            <td>${student.id}</td>
            <td>${student.name}</td>
            <td>${student.age}</td>
            <td>${student.gender}</td>
            <td>${student.info}</td>
        </tr>
    </table>
</body>
</html>

【注意】可以使用任意域对象存储数据,一般常用 pageContext

使用 List 和 Map

案例代码一:使用 List

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="com.fc.bean.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式测试List</title>
</head>
<body>
    <%
        List<Student> list = new ArrayList<>();

        list.add(new Student(1, "易烊千玺", 20, "男", "送你一朵小红花"));
        list.add(new Student(2, "迪丽热巴", 22, "女", "迪丽热巴"));
        list.add(new Student(3, "古力娜扎", 18, "女", "古力娜扎"));

        pageContext.setAttribute("list", list);
    %>

    <table align="center" border="1px">
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
            <th>Gender</th>
            <th>Info</th>
        </tr>

        <tr>
            <td>${list[0].id}</td>
            <td>${list[0].name}</td>
            <td>${list[0].age}</td>
            <td>${list[0].gender}</td>
            <td>${list[0].info}</td>
        </tr>
        <tr>
            <td>${list[1].id}</td>
            <td>${list[1].name}</td>
            <td>${list[1].age}</td>
            <td>${list[1].gender}</td>
            <td>${list[1].info}</td>
        </tr>
        <tr>
            <td>${list.get(2).id}</td>
            <td>${list.get(2).name}</td>
            <td>${list.get(2).age}</td>
            <td>${list.get(2).gender}</td>
            <td>${list.get(2).info}</td>
        </tr>
    </table>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值