JavaWeb基础-JSP基础学习

JSP的简单回顾

什么是JSP

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

JSP的由来

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

JSP的运行原理

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

JSP脚本元素

<%! %>:JSP声明翻译成servlet成员部分的内容。声明变量,方法,内部类。
<%= %>:翻译为out.print(),在service方法内部。用于生成HTML页面源码。
<% %>:嵌入Java代码,翻译为service方法内部的代码块。声明变量,内部类。

JSP的注释(三种)

HTML的注释

写法:
< !–html的注释–>
存在的时机:
 存在JSP的源码中,翻译成servlet后这个注释也存在,在生成HTML响应到页面的时候这个注释也会存在。

Java代码的注释

写法:
<%
//单行注释
/* 多行注释 /
/
* 文档注释*/
%>
存在时机:
 存在JSP的源码中,翻译成Servlet后Java代码的注释也会存在,但是生成HTML响应到页面中后,这种注释就消失了。

JSP自身注释

写法:
<%-- JSP的注释 --%>
存在的时机:
 存在JSP的源码中,翻译Servet后注释就没有了。
注释:Java代码的注释,不要使用HTML的注释!!!

JSP的指令元素的概述

JSP的指令元素的作用

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

指令元素的语法

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

JSP指令的分类

page指令:指示JSP的页面设置属性和行为。
include指令:指示JSP包含哪些其他页面。
taglib指令:指示JSP页面包含哪些标签库。

JSP指令

page指令

page指令的简介

写法:
<%@ page 属性名=属性值 %>
page指令用来定义JSP文件的全局属性。
这些属性可以单独使用,也可以几个或者多个同时使用。
在JSP页面中,只有import属性可以多次出现,其他的属性都只能出现一次。

page指令属性

language属性:声明使用脚本的语言。只能是Java。
extends属性:声明JSP编译成Servet的时候继承的类。默认值:HttpJspBase
session属性:标明JSP中是否可以直接使用session对象。默认值:true
buffer属性:标明JSP对客户端输出缓冲区大小。默认值:8kb
autoflush属性:如果缓冲区大小溢出,是否自动刷出。默认值:true
import属性:用于导入Java的包或者类。
contentType属性:标明JSP被浏览器解析和打开的时候采用的默认字符集。
pageEncoding属性:JSP文件及JSP翻译后的Servlet保存到硬盘上采用的默认字符集。

isErrorPage属性:处理JSP页面的异常。默认值:false。
 isErrorPage=“true”
 <%= exception.getMessage() %>显示异常信息

errorPage属性:处理JSP页面的异常。
 errorPage=“出错之后需要跳转的页面”
isELIgnored属性:通知JSP是否忽略EL表达式。默认值:false。格式:${ }

Include指令

Include指令简介

写法:
<%@ include 属性名=属性值%>
作用:
在JSP页面中静态包含一个文件,同时由该JSP解析包含的文件内容。

Include指令属性

file属性:指示JSP页面包含页面路径。、
<@ include file=“目标路径” %>

Include指令原理(静态包含)

在这里插入图片描述
注意:
应该将被包含的页面的结构去掉。例如:< head>< /head>等这些结构。
在被包含的页面中定义的变量,在包含的页面中还可以使用。

taglib指令

taglib指令简介

写法:
<% @ taglib 属性名=属性值%>
作用:
用于在JSP页面中引入标签库。

taglib指令属性

uri属性:引入的标签库的路径。
prefix属性:引入标签库的别名。

JSP内置对象

JSP内置对象的概述

什么是JSP的内置对象

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

JSP的内置对象有哪些

JSP当中有9大内置对象:
request对象:从客户端向服务器发送的请求对象;
response对象:从服务器端向客户端做出的响应对象;
session对象:服务器为客户端所创建的会话对象;
application对象:代表应用。获得ServletContext对象;
out对象:向输出流写入内容的对象;
page对象:当前的JSP翻译成Servlet后的对象的引用;
pageContext对象:本JSP页面的上下文对象;
config对象:本JSP的ServletConfig对象;
exception对象:表示JSP页面运行时产生的异常对象;

JSP的内置对象具体类型

request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletContext
config ServletConfig
page Object
pageContext PageContext
out JspWriter
exception Throwable

pageContext对象作用

提供了page范围的数据存取的方法:
从page范围内存入数据:
在这里插入图片描述
从page范围内取数据:
在这里插入图片描述
从page范围内移除数据:
在这里插入图片描述
查找属性的方法:
在这里插入图片描述
通过pageContext对象获得其它8个内置对象:
获得其他8个内置对象的方法:
在这里插入图片描述

JSP的四个作用范围

JSP四个作用范围的概述

PageScope:页面范围
页面范围:指的是在当前页面内有效,出了这个页面,用pageContext保存的数据就无效了。
RequestScope:请求范围
请求范围:从客户端向服务器发送一次请求,服务器对这次请求做出了响应之后,用request保存的数据就无效了。
SessionScope:会话范围
会话范围:指的是每个浏览器向服务器发送请求(多次请求)。将该会话结束。
ApplicationScope:应用范围
应用范围:指的是在整个应用任意的地方都可以获取。

JSP的四个作用范围演示

<%--
  Created by IntelliJ IDEA.
  User: James
  Date: 2021/1/16
  Time: 13:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>JSP的四个作用范围</h1>
<h3>page范围(pageContext)</h3>
<%
    //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("/demo03/demo02.jsp").forward(request,response);
    //跳转之后页面的地址栏不会变化,四个值只能取到后面三个,pageContext无法取到。因为pageContext只在当前页面有效。
%>

<a href="/demo04/demo03/demo02.jsp">跳转</a>
<!--
这次跳转相当于两次请求了,所以我们无法的到request和pageContext的数据。
-->

<!--
如果将浏览器关闭后本次会话结束,再重新打开那么就无法得到session的数据
-->

<!--
application对象在将服务器关闭之后,就不能访问到了
-->
</body>
</html>

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

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

findAttribute方法:

查找属性方法:先根据小范围的名称进行查找,如果找到了就返回,如果没有找到就去比其大一个域的范围进行查找。
在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: James
  Date: 2021/1/16
  Time: 13:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>JSP的四个作用范围</h1>
<h3>page范围(pageContext)</h3>
<%
    //page范围(pageContext)
    //pageContext.setAttribute("name", "张三");
    //request范围
    request.setAttribute("name", "李四");
    pageContext.setAttribute("name", "李四",pageContext.REQUEST_SCOPE);
    //session范围
    session.setAttribute("name", "王五");
    pageContext.setAttribute("name", "王五",pageContext.SESSION_SCOPE);
    //application范围
    //application.setAttribute("name", "赵六");
    pageContext.setAttribute("name", "赵六",pageContext.APPLICATION_SCOPE);
%>
<h1>当前页面获取值</h1>
<%= pageContext.getAttribute("name") %>
<%= request.getAttribute("name") %>
<%= session.getAttribute("name") %>
<%= application.getAttribute("name") %>

<%--
和上面的写法效果相同
<%= pageContext.getAttribute("name",pageContext.REQUEST_SCOPE)%>
<%= pageContext.getAttribute("name",pageContext.SESSION_SCOPE)%>
<%= pageContext.getAttribute("name",pageContext.APPLICATION_SCOPE)%>
--%>

<%
    //转发到demo2.jsp
    //request.getRequestDispatcher("/demo03/demo02.jsp").forward(request,response);
    //跳转之后页面的地址栏不会变化,四个值只能取到后面三个,pageContext无法取到。因为pageContext只在当前页面有效。
%>


<h1>findAttribute方法</h1>
<%= pageContext.findAttribute("name") %></>br>
<a href="/demo04/demo03/demo02.jsp">跳转</a>
<!--先从pageContext开始找,如果没有则找request,如果没有再则找session,如果没有再则找application,还没有返回空-->
<!--
这次跳转相当于两次请求了,所以我们无法的到request和pageContext的数据。
-->

<!--
如果将浏览器关闭后本次会话结束,再重新打开那么就无法得到session的数据
-->

<!--
application对象在将服务器关闭之后,就不能访问到了
-->
</body>
</html>

JSP的动作标签

JSP的动作标签的概述

什么是JSP的动作标签

JSP的动作标签用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码,造成JSP页面难以维护。

常用的动作标签

< jsp:forword/>:请求转发;
< jsp:include/>:包含(动态包含);
< jsp:param/>:传递参数;

演示JSP的动作标签

在这里插入图片描述

静态包含和动态包含的区别

动态包含的原理:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值