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变现特定行为
指令元素的语法
语法:
<%@ 指令名称属性名称=属性的值 属性名称=属性的值 %>
指令元素的分类
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当中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("