JSP
一. 什么是JSP
JSP全称Java Server Page(Java服务端页面),通俗上来讲就是可以编写Java代码的HTML页面。在最早期是没有JSP的,那么后端开发人员想要展示一个网页,就是在Servlet中 拼接html. 于是就有了JSP, 但是JSP不是一门新的技术,他的本质上还是Servlet, 意思是服务器还是会将 JSP 转成Java代码,在Java代码中,还是去拼接的页面。
案例:1. 在页面输出3个“你好”.
2.在页面展示一个4行5列的表格,表格中的数据从1到20.
jsp的执行流程
二. JSP语法分类
2.1 编译指令
页指令
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
contentType:内容类型;
language: 页面的语言
import: java.lang.❄ 、javax.servlet.❄、javax.servlet.jsp.❄、javax.servlet.http.*四个包不需要显式的导入。
包含指令
<%@ include file=”” %>
用法是在file中书写另外一个jsp页面,该指令是一个编译期的行为。
标签库指令
<%@ taglib %>
注意:标签库指令是讲到jstl的时候会用到。
2.2 脚本语法
html注释
隐藏注释
<%-- --%>
隐藏注释,在前端页面通过查看页面源代码的方式是无法查看到的。
脚本段
<% %>
脚本端中就是书写Java代码的,如下图所示:
JSP声明
<%! int a = 3 %>
可以透过JSP所生成的Java代码看出,通过jsp的声明的变量为一个成员变量。而普通的声明方式生成的Java代码可以看出是以及局部变量。
表达式
<%=a %>
使用jsp表达式,会将值直接输出到html页面中。
2.3 动作指令或者标准动作
jsp:include
include的动作指令与编译指令,最大的区别在于动作指令是一个运行期的行为,就在在代码的运行阶段才会将页面拼接到一起,而include的编译指令是一个编译期的行为,即页面是在编译阶段就已经合并到一起了。
jsp:forward与jsp:param
jsp:forward指令的意思是直接跳转到page对应的页面,可以通过 jsp:param携带参数。而到被跳转的页面可以直接通过 request(jsp内置对象) 来获取参数的值,获取的方式如下:
<%
String name = request.getParameter("username");
%>
<%=name %>
jsp:useBean、jsp:setProperty、jsp:getProperty
<%-- 相当于实例化了一个对象:User user = new User() --%>
<%-- 相当于 user.setUsername("张三") --%>
<%-- 相当于 user.getUsername() --%>
三. jsp九大内置对象
所谓的内置对象的意思就是可以直接使用,而不需要实例化。
最常用的主要有三个 request、session、application. 其他的不用了解。
四. EL与JSTL
4.1 EL
El(Expression Language),全称表达式语言,目的是尽量的消除JSP页面中的java代码,使用方式如下:
${param.username} # 相当于request.getParameter(“”)
${sessionScope.name} # session.getAttribute(“name”)
${applicationScope.name} # application.getAttribute(“name”);
${requestScope.name} # request.getAttribute(“name”)
${3 + 4}
${7 * 8}
${8 / 7}
${sessionScope.user.name} # 获取session中user的name属性
${user.name} # 会按照request -> session -> application的顺序查找
{empty requestScope.gender} #判断一个数据是否为null, 或者一个字符串为空或""
${empty requestScope.gender ? "默认值" : requestScope.gender}
5 > 3: ${5 > 3}
5 > 3: ${5 gt 3}
<%-- greater than --%>
14 < 3: ${14 < 3}
14 < 3: ${14 lt 3}
<%-- less than --%>
14 >= 3: ${14 ge 3}
<%-- greater to equals --%>
14 <= 3: ${14 le 3}
<%-- less to equals --%>
14 == 3: ${14 eq 3}
<%-- equals --%>
4.2 JSTL
JSTL(jsp standard tag library)全称为"标准标签库",使用一套标准的标签库,来极大的简化代码的编写,必须要配置EL来使用,使用步骤如下:
1) 引入javax.servlet.jsp.jstl.jar和jstl-impl.jar两个jar包
- 在jsp页面的头顶加上标准标签库指令:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
4.2.1 if语法
一个条件
成年人.
多个条件
性别为空,并且是成年人.
4.2.2 choose..when..otherwise
中年人
壮年
成年人.
小青年
4.2.3 foreach
<%--
begin是开始的值;
end是结束;
var是定义的变量名.
step是步进的意思,就是每次加多少
--%>
${i}
<%--
for(int i = 50; i <= 100; i+=10) {
}
--%>
${u.id} -- ${u.name} -- ${u.gender == 'F' ? '女' : '男'}
-- ${status.first} -- ${status.last} -- ${status.index} -- ${status.count}
附录:
jsp的<%@ include file="" %> 通常是包含 jsp页面,但是一定要包含html页面的话,那么会产生乱码问题,可以使用如下方式来解决,在web.xml文件中添加如下内容:
*.html
UTF-8