JSP内容讲解-12月21讲课内容
JSP
概述
全称:Java Server Pages
Java 服务器页面,和 Servlet 一样,都是Sun公司提供的动态资源开发技术。兼容HTML,CSS,JavaScript,还可以运行 Java 代码
特点
- 基于 HTML 模版,可以在HTML模版嵌入 Java 代码和一些特有的标签。可以同时在设计完成前端页面,优化美化的情况下通过 Java 代码实现后台逻辑。
- 与纯 Servlet 相比:JSP 可以很方便的编写或者修改HTML网页而不用去面对大量的println语句
- 与 JavaScript 相比:虽然 JavaScript 可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
- 与静态HTML相比:静态HTML不包含动态资源的
【注意】JSP中不建议出现任何一行Java代码!!!
为什么要用 JSP
- JSP目前在没有了解过前端解析数据方式情况下,和Java后台的融合性更好
- JSP 最终编译的结果就是一个 Servlet 程序
- JSP 兼容性还可以!!!性能还不错!!!
- 【重点】可以让 Servlet 摆脱内嵌HTML页面的情况
- 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:前缀,可自定义,一般使用约定俗成的