JSP:
一种动态网页技术标准,JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
JSP脚本:
可以在jsp中编写java代码,变量、函数(方法)、表达式、方法调用、创建类、集合等。
JSP脚本元素:
作用:使JAVA代码可以直接插入servlet.
分类:
<%...%>:普通脚本
1.普通脚本中除了java语法中函数(方法)不能定义,其他的都可定义
2.普通脚本中定义的变量是局部变量<% int a=10; System.out.println("输出到控制台"+a); out.println("输出到页面"+a); %>
<%!...%>:声明脚本
1.声明脚本中可以定义变量和函数(方法)
2.声明脚本中定义的变量是全局变量
3.声明脚本只能通过普通脚本调用,自己不会执行
4.如果声明脚本中定义的方法有返回值,那么就需要使用输出脚本调用<%! int b=20; public void show() { System.out.println("show"); } %> <% show(); %> <%! public int show2() { return 100; } %> <%= show2() %> <% out.println(show2()); %>
<%=...%>:输出脚本(表达式标签)
1.输出脚本中不能定义变量、函数(方法)、表达式等
2.输出脚本中可以调用带有返回值的函数(方法),但不能调用普通方法(void)
3.输出脚本中默认有个out.println();方法,所以调用方法时不用加;号,
注:脚本间不能嵌套,脚本和html间也不能嵌套。<%--实现动态效果--%> <%=new java.util.Date()%>
页面效果为:显示当前时间
Sun Oct 30 20:57:42 CST 2022
<%--JSP注释:不会发送到浏览器,也不会被编译--%>
<!--HTML注释:通过查看浏览器页面源代码,可以看到被注释的内容-->jsp指令:
JSP指令控制JSP编译器如何去生成servlet,
就是用来设置jsp页面的属性
常用指令:
page指令:
contentType:设置当前页面字符编码的格式
language:定义jsp页面所有的属性,默认是java
import:导入要使用的java类(导包)eg:Scanner
errorPage:当页面发生错误时,转移到其他页面,不显示错误信息
iserrorPage:处理错误的页面
pageEncoding:pageEncoding="utf-8"当前页面的解码格式
<%@ page isELIgnored="false" %> :表示是否禁用EL语言,开启关闭EL表达式,false:开启 true:关闭
核心标签:
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
两个常用的标签:
(1)<c:forEach>:循环(begin:开始数,end:结束数,step:步长,var:变量)
<%--从0循环到10--%>
<c:forEach begin="0" end="10" step="1" var="i">
${i}
</c:forEach><%--通过forEach循环获取域,items接收域对象,var:循环的变量--%>
<c:forEach items="${list}" var="l"></c:forEach>(2)<c:if>:判断选择
<%--性别:1男,2女--%>
<%
request.setAttribute("sex","1");
%><c:if test="${sex==1}">
男</c:if>
<c:if test="${sex==2}">
女</c:if>
EL(Expression Language):
表达式语言,用于简化jsp页面内的java代码, 是为了使JSP写起来更加简单。
代码演示:创建BrandServlet类和list.jsp
作用:获取数据。即从域对象中获取数据,展示在页面上。
语法:${expression}。即获取key为expression的数据
(加上指令:isELIgnored="false" :开启关闭EL表达式,false:开启 true:关闭)域对象:
JavaWeb中有四大域对象:
page:当前页面有效
request:当前请求有效
session:当前会话有效
application:当前应用有效
EL表达式获取数据,会依次从这四个域中寻找,直到找到为止。而这四个域对象的作用范围如下:
page-->request-->session-->application(由小到大)
eg:EL表达式获取数据,会先从page域对象中获取数据,若无,再到request域对象中获取数据,依次类推。
在JSP页面上引入JSTL标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
BrandServlet类:
package com.hsd.servlet;
import com.hsd.entity.Brand;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
@WebServlet("/BrandServlet")
public class BrandServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ArrayList<Brand> list = new ArrayList<>();
list.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火","1"));
list.add(new Brand(2,"优衣库","优衣库",10,"优衣库,服务好人生","2"));
list.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生","1"));
//把Brand表的数据存在request域中z
req.setAttribute("list",list);
//转发到list.jsp
req.getRequestDispatcher("list.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
list.jsp:使用EL简化代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: 30868
Date: 2022/10/21
Time: 17:18
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1" cellspacing="0">
<tr>
<th>序号</th>
<th>品牌名称</th>
<th>企业名称</th>
<th>排序</th>
<th>品牌介绍</th>
<th>状态</th>
<th>操作</th>
</tr>
<%--通过forEach循环获取域,items接受域对象,var:循环的变量--%>
<c:forEach items="${list}" var="l">
<tr align="center">
<td>${l.id}</td>
<td>${l.name}</td>
<td>${l.qyname}</td>
<td>${l.sort}</td>
<td>${l.introduce}</td>
<td>
<c:if test="${l.state==1}">
启用
</c:if>
<c:if test="${l.state==2}">
禁用
</c:if>
</td>
<td>
<a href="###">修改</a>
<a href="###">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
EL表达式使用:
<%--
Created by IntelliJ IDEA.
User: 30868
Date: 2022/10/21
Time: 17:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("key1","value1");
session.setAttribute("key2","value2");
application.setAttribute("key3","value3");
%>
${key1}
${key2}
${key3}
</body>
</html>
页面输出:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--JSTL标签库--%>
<%--
Created by IntelliJ IDEA.
User: 30868
Date: 2022/10/22
Time: 8:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--性别:1男,2女--%>
<%
request.setAttribute("sex","1");
%>
<c:if test="${sex==1}">
男</c:if>
<c:if test="${sex==2}">
女</c:if>
<%--从0循环到10--%>
<c:forEach begin="0" end="10" step="1" var="i">
${i}
</c:forEach>
</body>
</html>
页面输出: