一文带你掌握JSP基础知识

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
个人主页:Java Fans的博客
个人信条:不迁怒,不贰过。小知识,大智慧。
当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
本文内容:一文带你掌握JSP基础知识
更多内容点击
       IDEA创建Java Web项目

文章目录

      • 脚本程序
      • JSP程序注释
      • JSP表达式
      • JSP声明
      • JSP指令
      • JSP行为
      • JSP隐含对象

在上一篇中,我们学了用IDEA工具创建JAVA Web项目,创建后,生成了一个jsp文件,那么本文就根据以IDEA集成了Tomcat服务的基础来讲解JSP基础知识。
一文带你掌握JSP基础知识_第1张图片

脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

脚本程序的语法格式:

<% 代码片段 %>

或者,您也可以编写与其等价的XML语句,就像下面这样:

<jsp:scriptlet>
   代码片段
jsp:scriptlet>

任何文本、HTML标签、JSP元素必须写在脚本程序的外面。

下面给出一个示例:

<html>
	<head><title>Hello Worldtitle>head>
	<body>
		Hello World!<br/>
		<%
			out.println("Your IP address is " + request.getRemoteAddr());
		%>
	body>
html>

注意:请确保Apache Tomcat已经成功部署到IDEA软件中,具体的部署方法可以参看前面一篇博文:IDEA创建Java Web项目

一文带你掌握JSP基础知识_第2张图片

点击上图中的三角形运行按钮后得到以下结果:

在这里插入图片描述

JSP程序注释

项目开发中必须对代码的功能进行详细的说明,说明往往需要通过注释结构来进行。在JSP程序开发中,由于需要在HTML代码中嵌入Java代码,因此可以直接使用Java中的注释与HTML注释进行说明。其中Java的注释内容属于隐式注释,不会发送到客户端浏览器;而HTML注释属于显式注释,会发送到客户端浏览器。
除了以上的两种注释以外,在JSP中又提供了另外一种隐式注释,结构为“<%-- 注释内容 --%>”,此注释需要定义在Scriptlet代码之外。

程序示例:JSP程序注释定义

<html>
<head>
    <title>$Title$title>
head>
<body>
Hello World!<br/>
<%--此为JSP中才可以使用的注释,为隐式注释,不会发送到客户端浏览器中--%>
<%
    out.println("Your IP address is " + request.getRemoteAddr());
%>
body>
html>

不同情况下使用注释的语法规则:

语法 描述
<%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译
HTML注释,通过浏览器查看网页源代码时可以看见注释内容
<% 代表静态 <%常量
%> 代表静态 %> 常量
\’ 在属性中使用的单引号
\" 在属性中使用的双引号

JSP表达式

计算Java表达式的值,Java表达式由数据和运算符组成的式子,就是Java表达式,JSP表达式得到的结果转换成字符串,并在jsp页面中表达式的位置进行显示。

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

jsp表达式语法结构:

<%=Java表达式 %>

同样,您也可以编写与之等价的XML语句:

<jsp:expression>
   表达式
jsp:expression>

jsp表达式注意事项:

  • 1)<%=和%>是一个完整的符号,中间不能有空格
  • 2)表达式必须能求出值

程序示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JSPtitle>
	head>
	<body>
		<p>
		   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
		p>
	body> 
html> 

运行结果:

今天的日期是: 2022-12-5 18:40:07

JSP声明

就是在jsp页面中声明Java方法或者Java变量。一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。

语法结构:

<%! Java代码 %>

或者,您也可以编写与其等价的XML语句,就像下面这样:

<jsp:declaration>
   代码片段
jsp:declaration>

注意:
  1)<%!和%>是一个完整的符号,符号中间不能有空格
  2)声明的语法和在Java语言中声明变量和方法是一样的
  3)在页面中声明的变量和方法,在整个页面内都有效

程序示例:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

jsp声明变量个scriptlet变量的区别:

  • jsp声明的变量是全局变量,会被多线程共享。
  • scriptlet申明的变量是局部变量,只在当前页面中有效果,不会被多线程共享。

JSP指令

在编译期间的命令,用来设置与整个jsp页面相关的属性,不会直接产生任何可见的输出
可以通过page指令设置jsp的脚本语言、设置jsp的编码格式、在jsp中引入其它的java类或者包
可以通过include指令引入其它的java代码等

jsp指令主要有3种:page指令、include指令、taglib指令

指令 描述
<%@ page … %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %> 包含其他文件
<%@ taglib … %> 引入标签库的定义,可以是自定义标签

jsp指令的语法结构:

写法一:
   <%@ 指令名称 属性1=“属性值1” 属性2=“属性值2” … 属性n=“属性值n” %>

写法二:
  <%@ 指令名称 属性1=“属性值1” %>
   <%@ 指令名称 属性2=“属性值2” %>
   …
   <%@ 指令名称 属性n=“属性值n” %>

page指令:页面指令,用来定义整个jsp页面的一些属性和这些属性的值
page指令的属性可以定义文件类型、定义需要导入的包、定义错误页面的指定、定义页面编码、定义脚本语言
page指定的作用对整个JSP页面有效,跟书写位置无关,可以在页面中的任意位置存在,一般写在页面鹅最前面
page指令中除了import属性可以出现多次,其它的属性都只能出现一次
page指令的每一个属性完成的功能不同,指令属性对大小写敏感

include指令:在jsp页面静态插入一个文件,被插入的文件可以是jsp页面、HTML页面、文本文件或者一段Java代码。

include指令语法结构

<%@ include file = "文件名" %>

注意:include执行不能传递参数

Taglib指令:JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:

<%@ taglib uri="uri" prefix="prefixOfTag" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

等价的XML语法:

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

JSP行为

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

行为标签只有一种语法格式,它严格遵守XML标准:

<jsp:action_name attribute="value" />

行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签:

语法 描述
jsp:include 用于在当前页面中包含静态或动态资源
jsp:useBean 寻找和初始化一个JavaBean组件
jsp:setProperty 设置 JavaBean组件的值
jsp:getProperty 将 JavaBean组件的值插入到 output中
jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin 用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element 动态创建一个XML元素
jsp:attribute 定义动态创建的XML元素的属性
jsp:body 定义动态创建的XML元素的主体
jsp:text 用于封装模板数据

JSP隐含对象

JSP支持九个自动定义的变量,江湖人称隐含对象。这九个隐含对象的简介见下表:

对象 描述
request HttpServletRequest类的实例
response HttpServletResponse类的实例
out PrintWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
exception exception类的对象,代表发生错误的 JSP 页面中对应的异常对象

request对象

request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

out对象

out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。

最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false’属性来轻松关闭缓存。

JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。

下表列出了我们将会用来输出boolean,char,int,double,String,object等类型数据的重要方法:

方法 描述
out.print(dataType dt) 输出Type类型的值
out.println(dataType dt) 输出Type类型的值然后换行
out.flush() 刷新输出流

session对象

session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。

session对象用来跟踪在各个客户端请求间的会话。

application对象

application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。

通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。

config对象

config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。

这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

以下是config对象的使用方法,不是很重要,所以不常用:

config.getServletName();
它返回包含在元素中的servlet名字,注意,元素在 WEB-INF\web.xml 文件中定义。

pageContext 对象

pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。

这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。

这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。

pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。

PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。

其中一个重要的方法就是 removeAttribute(),它可接受一个或两个参数。比如,pageContext.removeAttribute(“attrName”) 移除四个scope中相关属性,但是下面这种方法只移除特定 scope 中的相关属性:

pageContext.removeAttribute(“attrName”, PAGE_SCOPE);

page 对象

这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

page 对象就是this对象的同义词。

exception 对象

exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

你可能感兴趣的:(一,JAVA开发者成长之路,java,servlet,intellij-idea)