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:前缀,可自定义,一般使用约定俗成的
最后修改:2021 年 01 月 24 日 12 : 09 PM
如果觉得此文章有用,请随意打赏