Day07 动态页面技术(JSP)

2022-07-28,,,,

一、JSP的简介

1、JSP是什么

  • JSP全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术
  • 在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。
  • 为了与传统HTML有所区别,JSP 文件的扩展名为.jsp

2、JSP运行原理

  • JSP的工作模式是请求/响应模式
  • 如果项目发布在Tomcat的webapps目录中,源文件和.class文件可以在“Tomcat 安装目录/work/Catalinalocalhost/项目名/org/apache/jisp"下找到,如图所示。.
  • 查看源代码发现该类继承HttpJspBase类,而HttpJspBase类是HttpSevlet的一个子类,由此可见index_jsp类就是一个Servlet。
  • 所以,JSP的本质是Servlet

二、JSP基本语法

1、JSP脚本元素

1.1 JSP Scriptlets(一段代码段)

声明service方法内部的局部变量

<% java代码(变量、方法、语句等) %>

1.2 JSP声明语句

声明servlet成员变量和方法

<%! 定义的变量和方法等 %>

1.3 JSP表达式

将程序数据输出到客户端,即service方法内部out.print()

<%= expression %>

2、JSP注释

<%-- jsp注释 --%>
<% //java注释 %>
<!-- html注释 -->

三、JSP指令

jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:

1、page指令

属性最多的指令(实际开发中page指令默认即可,不用做修改),根据不同的属性,指导整个页面特性

格式:<%@ page 属性名1= “属性值1” 属性名2= “属性值2” …%>

常用属性如下:
language:jsp脚本中可以嵌入的语言种类
contentType:有效的文档类型,HTML格式为text/html。翻译后的Servlet中是response.setContentType(text/html;charset=UTF-8)
pageEncoding:当前jsp文件的本身编码。未设置contentType时,contentType和pageEncoding的值一样。
session:默认为true,表示内置session对象,false反之。
import:导入java的包
errorPage:当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
buffer:JSP缓存大小(默认8kb),暂指out缓存区的大小。
autoFlush:是否自动刷新
isELIgnored:是否忽略EL表达式,false表示不忽略,使用EL表达式

2、include指令

页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中

格式:<%@ include file=“被包含的文件地址”%>

3、taglib指令

在jsp页面中引入标签库(jstl标签库、struts2标签库)

格式:<%@ taglib uri=“标签库地址” prefix=“前缀”%>

四、JSP内置/隐式对象

jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,我们在jsp 脚本中可以直接使用这9个对象。

1、out对象

out 对象是javax. servlet jsp JspWriter类的实例对象,它的作用与ServletResponse getWriter()方法返回的 PrintWriter 对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out 对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。

2、pageContext对象

jsp页面的上下文对象。
page对象与pageContext对象不是一回事。
作用如下:

2.1 pageContext是一个域对象

<body>
<%
    pageContext.setAttribute("name", "page域对象");
    //使用pageContext向指定的其他域对象中存数据
    pageContext.setAttribute("name", "request域对象", PageContext.REQUEST_SCOPE);
    pageContext.setAttribute("name", "session域对象", PageContext.SESSION_SCOPE);
    pageContext.setAttribute("name", "application域对象", PageContext.APPLICATION_SCOPE);
%>

<!-- 使用request取值 -->
<%=request.getAttribute("name") %>
<!-- 使用pageContext取值 -->
<%=pageContext.getAttribute("name", PageContext.REQUEST_SCOPE)%>

<!-- findAttribute会从小到大搜索域的范围中的name
    pageContext域也可以称为page域
    page域<request域<session域<application域 -->
<%=pageContext.findAttribute("name") %>
</body>

2.2 可以获得其他8大隐式对象

例如:
pageContext.getRequest()
pageContext.getSession()
应用:
当一个方法需要好几个对象作为参数时,只需让pageContext作为参数即可。

五、JSP的四个域对象范围

  • page:表示当前页,通常没用。jsp标签底层使用。
  • request:表示一次请求。通常一次请求就一个页面,但如果使用请求转发,可以涉及多个页面。
  • session:表示一次会话。 可以在多次请求之间共享数据。
  • application:表示一个web应用(项目)。可以整个web项目共享,多次会话共享数据。

六、JSP动作元素(动作标签)

1、页面包含(动态包含)

<jsp:include page=“relativeURL” flush=“true | false” />

page属性:指定被引入资源的相对路径。
flush属性:指定是否将当前页面的输出内容刷新到客户端,默认为false。

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

  • include指令:<%@include file="" %>静态包含
    当前页面和被包含的页面,合并成后生产一个servlet源码。
  • include标签:<jsp:include page=""></jsp:include>动态包含
    当前页面和被包含的页面,分别生产servlet源码和字节码,运行时,由tomcat进行合并输出。

2、请求转发

<jsp:forward page=“要转发的资源” />

七、JSP代码重用

  • (1)jsp代码是可以重用
  • (2)jsp代码如何重用?
    建立jsp页面 A,并在A中保存重用代码
    在当前页面 B 中引入A
    <jsp:include page="A.jsp" />
    还可以再次引入A
    <jsp:include page="A.jsp" />
  • (3)B可以将参数传给A
    在A中的< jsp:include >标签中写入
    <jsp:param name="name" value="jack"/>
    在B中写入
    ${param.name}
  • 示例

demo01.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>我是可以重用的jsp页面</h1>
        ${param.name}
        ${param.url}
</body>
</html>

demo02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <jsp:include page="demo01.jsp">
        <jsp:param name="name" value="jack"/>
        <jsp:param name="url" value="http://www.baidu.com"/>
    </jsp:include>
    
    <h1>我是引入可重用jsp的页面</h1>
    
    <jsp:include page="demo01.jsp"></jsp:include>
</body>
</html>

本文地址:https://blog.csdn.net/qq_43639081/article/details/109366957

《Day07 动态页面技术(JSP).doc》

下载本文的Word格式文档,以方便收藏与打印。