JavaWeb(9)之JSP进阶&EL&JSTL

本文详细介绍了JSP的高级特性,包括JSP的运行原理、指令元素、内置对象以及JSP的四个作用范围。重点讲解了page指令、include和taglib指令,展示了JSP内置对象如pageContext的使用。此外,文章还探讨了EL表达式,包括其获取数据、执行运算的功能,并介绍了JSTL的核心标签库,如if和forEach标签的用法。最后,通过案例实践展示了JSTL在实际开发中的应用。
摘要由CSDN通过智能技术生成

JSP回顾

JSP中的脚本元素,指令和动作

什么是JSP

JSP: Java Server Pages Java服务器端页面。
JSP就是HTML + Java代码+JSP自身东西。

JSP的由来

Servlet技术生成动态网页的时候很麻烦,需要通过response获得输出流,调用print方法进行打印的。这种编程方式很麻烦,而且美工也不容易处理。SUN公司为了简化动态网页开发,推出JSP。

JSP的运行原理

JSP在执行时,会被服务器翻译为Servlet编译执行, JSP就是一个Servlet。

JSP的脚本元素

JSP脚本元素
<%! %> :JSP声明翻译成Servlet成员部分的内容。声明变量,方法,内部类。
在JSP声明语句中声明的方法在整个JSP页面内有效。使用JSP声明语句声明的变量将来会转换为Servletl类中的成员变量(它只在创建Servlet实例是被初始化一次,此后会一直存在直至Servlet实例被摧毁,相当于静态变量);使用JSP声明语句声明的方法将来会转换为Servletl类中的成员方法。当方法被调用是,该方法内定义的变量被分配内存,调用完毕即可释放所占内存。

<%= %>:JSP表达式翻译out.print(),在service方法内部。我们可以输出一个变量或一个具体的常量或用于生成HTML页面源码。

<% %> :**JSP Scriptlet(脚本)**嵌入Java代码翻译成service方法内部的代码块。 JSP Scriptlet中可以包含变量、方法、表达式等内容。

JSP模板修改和注释

JSP的模板修改(Eclipse)

在这里插入图片描述

JSP的注释

JSP的注释

JSP的指令元素概述

指令元素的基本作用

用于指示JSP执行的某些步骤
用于指示JSP变现特定行为

指令元素的语法

语法:
<%@ 指令名称属性名称=属性的值 属性名称=属性的值 %>

指令元素的分类

page指令:指示JSP的页面设置属性和行为

include指令:指示JSP包含哪些其他页面

taglib指令:指示JSP页面包含哪些标签库

JSP指令-page指令

page指令简介

写法:
<%@ page属性名=属性值 %>

Page指令用来定义JSP文件的全局属性。
这些属性可以单独使用,也可以几个或多个同时使用。
在JSP页面中,只有import属性可以出现多次,其他属性都只能出现一次。

page指令属性

在这里插入图片描述

JSP指令-include和tagilb指令

include指令简介

在这里插入图片描述
一般在我们浏览网页的时候,有图片中的几个部分,但是在滑动网页的时候一般都是主体部分在滑动而其他部分都不动,这就用到了include指令中的File属性。
在这里插入图片描述

include指令属性

file属性:指示JSP页面包含页面路径。

示例:
在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%@ include file="logo.jsp"%>
	<%@ include file="menu.jsp"%>
	<h1>BODY</h1>
	<%@ include file="foot.jsp"%>
</body>
</html>

运行结果:
在这里插入图片描述

include指令原理(静态包含原理)

在这里插入图片描述
还行后的HTML源代码:
可以看见其实在编译成Servlet过中已经将include路径中的jsp文件复制了过去,然后一起执行。
在这里插入图片描述

注意事项

应该将被包含的页面的结构去掉。
格式:
将想要显示的内容留下即可

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<h1>LOGO</h1>

在被包含的页面中定义变量,在包含的页面中还可以使用。

tagilb指令

写法:
<%@ taglib属性名=属性值 %>

作用:
用于在JSP页面中引入标签库。

tagilb指令属性

在这里插入图片描述

JSP的内置对象

jsp 九大内置对象和其作用详解

JSP内置对象的概述

JSP的内置对象:指的是可以直接在JSP页面中使用的对象。

JSP当中9大内置对象

在这里插入图片描述

JSP内置对象的具体类型

使用exception必须开启isErrorPage=“true”
在这里插入图片描述

pageContext对象的概述

pageContext对象简介

pageContext对象直接翻译为 “页面上下文” 对象,代表的是当前页面运行的一些属性。
它是javax.servet.jsp.PageContext类的实例对象。

pageContext对象作用

  • 提供了page 范围的数据存取的方法:

向page范围中存入数据:
在这里插入图片描述
从page范围获取数据:
在这里插入图片描述
从page范围移除数据:
在这里插入图片描述
查找属性的方法:
在这里插入图片描述

  • 获得其他8个内置对象:

在这里插入图片描述
在这里插入图片描述

JSP的四个作用范围概述

在这里插入图片描述

JSP的四个作用范围演示

在当前页面获取值

demo1.jsp

<body>
	<h1>JSP的四个作用范围</h1>
	<%
		//page范围(pageContext)
		pageContext.setAttribute("name", "张三");
		//request范围
		request.setAttribute("name", "李四");
		//session范围
		session.setAttribute("name", "王五");
		//application范围
		application.setAttribute("name", "赵六");
	%>
	<h1>当前页面获取值</h1>
	<%=pageContext.getAttribute("name")%>
	<%=request.getAttribute("name")%>
	<%=session.getAttribute("name")%>
	<%=application.getAttribute("name")%>
</body>

在当前页面四个作用范围都可以获取值
在这里插入图片描述

转发到另一个页面demo2.jsp中去获取值

demo1.jsp

<body>
	<h1>JSP的四个作用范围</h1>
	<%
		//page范围(pageContext)
		pageContext.setAttribute("name", "张三");
		//request范围
		request.setAttribute("name", "李四");
		//session范围
		session.setAttribute("name", "王五");
		//application范围
		application.setAttribute("name", "赵六");
	%>
	<h1>当前页面获取值</h1>
	<%=pageContext.getAttribute("name")%>
	<%=request.getAttribute("name")%>
	<%=session.getAttribute("name")%>
	<%=application.getAttribute("name")%>

	<%
		//转发到demo2.jsp
		request.getRequestDispatcher("/demo2/demo2.jsp").forward(request, response);
	%>
</body>

demo2.jsp

<body>
	<h1>demo2.jsp中获取当前页面获取值</h1>
	<%=pageContext.getAttribute("name")%>
	<%=request.getAttribute("name")%>
	<%=session.getAttribute("name")%>
	<%=application.getAttribute("name")%>
</body>

转发后的demo2.jsp页面,page是获取不到属性的,因为他的范围是页面范围,只在一个页面中有效。
在这里插入图片描述

使用超链接跳转到demo2.jsp中获取值
demo1.jsp

<body>
	<h1>JSP的四个作用范围</h1>
	<%
		//page范围(pageContext)
		pageContext.setAttribute("name", "张三");
		//request范围
		request.setAttribute("name", "李四");
		//session范围
		session.setAttribute("name", "王五");
		//application范围
		application.setAttribute("name", "赵六");
	%>
	<h1>当前页面获取值</h1>
	<%=pageContext.getAttribute("name")%>
	<%=request.getAttribute("name")%>
	<%=session.getAttribute("name")%>
	<%=application.getAttribute("name")%>

	<!-- 跳转到demo2.jsp -->
	<a href="/web03_login/demo2/demo2.jsp">跳转</a>
</body>

demo2.jsp不做修改

超链接跳转后的的demo2.jsp,request也获取不到数据了,因为他是请求范围,只在一次请求范围内。
在这里插入图片描述

关闭浏览器在运行跳转都demo2.jsp
session也获取不到数据了,因为他的会话范围的,只在一次会话范围。
在这里插入图片描述
而application只在重启服务器时才会丢失数据,因为他是应用范围的。

pageContext对象向四个域范围存取数据

使用pageContext对象也可以向四个域对象做存取数据的操作

<body>
	<h1>JSP的四个作用范围</h1>
	<%
		//page范围(pageContext)
		pageContext.setAttribute("
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值