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 内置对象【重点】
不需要定义,可以直接使用
对象名 | 类型 | 描述 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | 用户请求对象 |
response | javax.servlet.http.HttpServletResponse | 用户响应对象 |
session | javax.servlet.http.HttpSession | Session会话控制对象 |
application | javax.servlet.ServletContext | 整个项目的上下文对象 |
exception | java.lang.Exception | 异常,isErrorPage="true" |
page | java.lang.Object ==> this对象 | JSP ==> Servlet this对象(代表当前页面) |
config | javax.servlet.ServletConfig | Servlet 配置对象 |
out | javax.servlet.jsp.JspWriter | 输出对象,能输出内容到页面上 |
pageContext | javax.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_SCOPE | 1 |
PageContext.REQUEST_SCOPE | 2 |
PageContext.SESSION_SCOPE | 3 |
PageContext.APPLICATION_SCOPE | 4 |
案例代码
<%@ 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>
版权属于:不冷
本文链接:https://www.buleng.xyz/archives/103/
转载时须注明出处及本声明