JSP 概述
JSP(全称:Java Server Pages):Java 服务端页面。==是一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义 Java代码的动态内容,也就是 JSP = HTML + Java。
之前学到了Servlet的返回html页面,我们了解到这种只使用Servlet的方式太繁琐了,所以加入JSP,改为使用Servlet+JSP的方式。
JSP 作用:简化开发,避免了在Servlet中直接输出HTML标签。
JSP快速入门
1.导入坐标
<!--jsp-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
2.创建jsp页面
3.编写代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>你好JSP</h1>
<%
System.out.println("你好,jsp的java代码");//输出到控制台
out.println("我是jsp的java代码");//输出到jsp页面
%>
</body>
</html>
JSP原理
jsp实质上就是一个servlet,
我们打开安装tomcat目录下的work,一路点进去,发现tomcat将jsp编译成了java文件并转为字节码文件
我们查看java文件,发现这个类继承自HttpJspBase,而HttpJspBase继承自HttpServlet
并且HttpJspBase中的service方法中有一个_jspService方法(抽象类),所以子类一定要重写这个方法
JSP脚本
JSP 脚本有如下三个分类:
- <%…%>:内容会直接放到_jspService()方法之中
- <%=…%>:内容会放到out.print()中,作为out.print()的参数
- <%!…%>:内容会放到_jspService()方法之外,被类直接包含
<body>
<%--使用Java代码定义int变量i,和ArrayList集合list,这个标签的内容会写到_jspService方法中--%>
<%
int i = 10;
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("张三");
arrayList.add("lisi");
arrayList.add("王五");
pri();
%>
<%--输出字符串,变量i,集合list--%>
<%=i%>
<%=arrayList%>
<%--定义方法和成员变量--%>
<%!
public void pri(){
System.out.println("打印");
}
%>
</body>
JSP 缺点
1.书写很麻烦
2.不利于分工,又要写html,又要写java代码,不知道工作该给谁干
3.jsp会转为java文件,编译成字节码文件,浪费内存和磁盘
等等
EL 表达式
EL(全称Expression Language )表达式语言,用于简化 JSP 页面内的 Java 代码。
EL 表达式的主要作用是 获取数据。其实就是从域对象中获取数据,然后将数据展示在页面上。
而 EL 表达式的语法也比较简单,{expression} 。例如:${brands} 就是获取域中存储的 key 为 brands 的数据。
域对象
JavaWeb中有四大域对象,分别是:
- page:当前页面有效
- request:当前请求有效
- session:当前会话有效
- application:当前应用有效
<body>
<%--
格式:${}
EL只能从四大域中获取属性
如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值
pageScope:从page范围域属性空间中查找指定的key
requestScope:从request范围域属性空间中查找指定的key
sessionScope:从session范围域属性空间中查找指定的key
applicationScope:从application范围域属性空间中查找指定的key
--%>
<%--取出request存储的数据--%>
用户名: ${username} <br/>
品牌: ${brands} <br/>
年龄: ${age} <br/>
不存在的: ${address} <br/>
</body>
JSTL标签
JSP标准标签库(Jsp Standarded Tag Library) ,使用标签取代JSP页面上的Java代码
坐标
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
if标签
<html>
<head>
<title>JSTL的if标签</title>
</head>
<body>
<%-- c:if:来完成逻辑判断,替代java中的if --%>
<%--c:if 条件直接使用boolean类型--%>
<c:if test = "true">
你好
</c:if>
<c:if test="false">
false,不能说你好
</c:if>
<%--c:if 条件从作用域中取出数据比较, 要访问 /demo02 这个Servlet, Servlet会保存age到request中,这边才能取到age--%>
<c:if test="${age>=18}">
恭喜你成年
</c:if>
<c:if test="${age<18}">
对不起,你还未成年
</c:if>
</body>
</html>
forEach标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSTL的foreach标签</title>
</head>
<body>
<input type="button" value="新增"><br>
<hr>
<table border="1" cellspacing="0" width="70%">
<tr>
<th>序号</th>
<th>品牌名称</th>
<th>企业名称</th>
<th>排序</th>
<th>品牌介绍</th>
<th>状态</th>
<th>操作</th>
</tr>
<%-- varStatus :变量状态
index:索引 0
count: 计数器 1
--%>
<c:forEach items="${brands}" var="brand" varStatus="sta">
<tr align="center">
<td>${sta.count}</td>
<td>${brand.brandName}</td>
<td>${brand.companyName}</td>
<td>${brand.ordered}</td>
<td>${brand.description}</td>
<c:if test="${brand.status==1}">
<td>启用</td>
</c:if>
<c:if test="${brand.status==0}">
<td>禁用</td>
</c:if>
<td><a href="#">修改</a> <a href="#">删除</a></td>
</tr>
</c:forEach>
</table>
<hr/>
<%--类似于普通for循环--%>
<c:forEach var="b" begin="0" end="10" step="1">
${b}
</c:forEach>
</body>
</html>
最后
如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。