Java自学第9课:JSP基础及内置对象

news2025/1/16 3:45:48

目录:

目录

1 JSP基础知识架构

1 指令标识

1 Page命令

2 Including指令

3 taglib指令

2 脚本标识

1 JSP表达式

2 声明标识

3 代码片段

3 JSP注释

1 HTML注释

2 带有JSP表达式的注释

3 隐藏注释

4 动态注释

4 动作标识

1 包含文件标识

2 请求转发标识

3 传递参数标识

2 JSP内置对象知识架构

1 request对象

(1)访问请求参数

(2)在作用域管理属性

(3)获取cookie

(4)解决中文乱码问题

(5)获取客户端信息

(6)显示国际化信息

2 response对象

(1)重定向网页

(2)处理HTTP文件头

(3)设置输出缓冲

3 session对象

(1)创建和获取客户的会话

(2)移除属性

(3)销毁session

(4)会话超时管理

4 application对象

(1)访问初始化参数

(2)管理环境属性

5 out对象

(1)向客户端输出数据

(2)管理响应缓冲

6 其他对象

(1)获取会话范围的pageContext对象

(2)读取web.xml的config对象

(3)应答或请求的page对象

(4)获取异常信息的exception对象

3 留言薄项目应用


1 JSP基础知识架构

1 指令标识

指令标识:被服务器解释并执行的语句,不会输出任何内容到网页,用于设定JSP网页信息。

语法:<% 指令名称 属性1=“xxx” 属性2=“yyy”%>

小贴士:这个语句在jsp头上就能看到。

1 Page命令

Page命令:用于定义jsp页面的相关属性,当jsp被服务器解析成servlet时会转为java代码

语法:<% page 属性1=“xxx” 属性2=“yyy”%>

小贴士:page指令有15个属性,例如:language, extends, import, pageEncoding等。

2 Including指令

Including指令:在1个jsp中包含另1个jsp。

语法:<% including file="path"”%>

小贴士:常用于包含banner和脚注等部分。NoNo 那是动作标识

3 taglib指令

taglib指令:声明jsp使用的标签库。

语法:<% taglib prefix="" uri="" %>

小贴士:常见的有jstl:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

2 脚本标识

包含3部分,jsp表达式,声明标识,脚本程序,用于生成动态网页内容。

1 JSP表达式

用于向页面输出信息,语法:

<% =表达式 %>

下面在程序中试一试。新建dynamic web project,包含web.xml,之后新建index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%String m="abc";%>
<%=m %>
<br>
<%=1+2 %>
</body>
</html>

在tomcat运行,没问题。

这里说明,%%里可以写任意的java语句,不一定非要输出。而且java语句浏览器是看不到的,服务器发给浏览器的html是这样的

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

abc
<br>
3
</body>
</html>

这说明java语句虽然没有输出,但占了一行。只是这一行没有在页面上显示。

把代码改一下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%String m="abcde我";%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=m %>
<br>
<%=1+2 %>
</body>
</html>

定义语句放到body外,这时候是

总之是写到哪,哪多一行空。

2 声明标识

声明标识:在JSP页面中定义全局变量或方法,整个页面都可访问。语法:

<%! 代码%>

3 代码片段

代码片段:上面其实已经用到了,语法:

<% 代码 %>

代码片段在请求的处理期间被执行,注意:声明和代码片段在jsp页面内都有效,但声明中的变量和方法创建后直到服务器关闭才结束,而代码片段的关闭jsp页面就结束了。

这是不是就是脚本程序?

3 JSP注释

注释也是需要注意的一块。

1 HTML注释

不显示在网页,但查看浏览器源代码时能看到,格式为//

2 带有JSP表达式的注释

在代码片段中加入的注释,有单行注释//,多行注释/*   */, 提示文档注释/**    */

需要考察其可见性。以后再做。

3 隐藏注释

为了不在浏览器源代码显示注释信息,为了保密性,整了个隐藏注释的写法

<%--   --%>

这个查看源代码也看不到。

4 动态注释

由于HTML注释对JSP嵌入的代码不起作用,可以利用这一点,组成构成动态的HTML注释。也就是在注释里写JSP语句。

4 动作标识

1 包含文件标识

语法:<jsp:include>

没搞明白这个和including指令有啥区别。

2 请求转发标识

语法:<jsp:forward>

作用:将请求转发到其他资源,转发后当前页面不再执行。

3 传递参数标识

语法:<jsp:param>

作用:可作为其他标识的子标识,用于为其他标识传递参数,这个有点复杂。

2 JSP内置对象知识架构

Java使用对象前,先要实例化这个对象,这个比较繁琐,为了简化,JSP提供了一些内置对象。一共有9个内置对象。

1 request对象

用于处理http请求的各项参数。

(1)访问请求参数

request有个getParameter方法可获取参数。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试JSP内部对象</title>
</head>
<body>
<a href="del.jsp?id=1&user=">转到del页面</a>
</body>
</html>

新建del.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
id=<%=request.getParameter("id") %>
</body>
</html>

看下效果,确实传过来了。

点击后

(2)在作用域管理属性

这里是传递attibute,和上面的有点类似。

写入用set 提取用get

(3)获取cookie

cookie就是小段的文本信息。浏览器将cookie以键值形式保存到客户端。

要注意cookie和session的区别。

(4)解决中文乱码问题

参数传递应该带上编码方式,这样能避免乱码。

(5)获取客户端信息

有一系列的函数能用于获取客户端信息。比如IP地址,端口号,主机名等。

(6)显示国际化信息

浏览器可向web服务器指定其所用的本地语言,jsp可以获取这个信息并作出相应回应。

2 response对象

该对象用于响应客户请求,向客户端输出信息。该对象在jsp页面内有效。

(1)重定向网页

这个和转发不同。

(2)处理HTTP文件头

常用的有禁用缓存,设置页面自动刷新和定时跳转网页。

(3)设置输出缓冲

通常,服务器不会将输出内容直接写到客户端,而是先写到缓冲区。该对象可以设置缓冲。

3 session对象

session的意思是会话。

(1)创建和获取客户的会话

主要通过属性set和get来实现。

(2)移除属性

使用remove即可。

(3)销毁session

用invalidate

(4)会话超时管理

主要是为了避免超时后发生错误,进行声明周期判断。

4 application对象

用于保存公有数据。类似于全局变量。

(1)访问初始化参数

在web.xml里以<context-param>定义。

(2)管理环境属性

方法和session类似,但有效范围更大。

5 out对象

用于在web浏览器输出信息。

(1)向客户端输出数据

out.print方法。

out.println方法。

(2)管理响应缓冲

这个比较特别。没怎么见过,应该有用且不复杂。

6 其他对象

(1)获取会话范围的pageContext对象

用于获取对象的对象。

(2)读取web.xml的config对象

主要用于获取服务器配置信息。

(3)应答或请求的page对象

page对象代表jsp本身,可看做this指针的代名词

(4)获取异常信息的exception对象

用于处理jsp文件执行时发生的错误和异常。

3 留言薄项目应用

下面通过一个实例,来测试这两章知识内容。

根据需求,制作一个网页,包含一个form,里面有留言人,和留言板,然后点击能提交,并显示在网页上。

<%-- 本注释在浏览器看不到 仅供开发者使用 --%>
<%-- 本程序用于理解jsp基础知识 --%>
<%-- 实现了一个留言板网页 本网页内容只能共单机使用 其他人访问是看不到的 --%>

<%-- --%>
<%-- 首先是jsp头 用到了page指令 用于定义jsp页面的属性 --%>
<%-- 该行在eclipse可用模板定义 --%>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%-- 用于指定html4 --%>
<!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=GB18030">
<title>签写留言信息</title>
<%-- js片段 本句中language为h4 h5会警告 --%>
<script language="javascript">
<%-- 用于检查填写内容是否为空 --%>
function checkNull(form){
	for(i=0;i<form.length;i++){  
		if(form.elements[i].value == ""){         //form的属性elements的首字e要小写
			alert("很抱歉,"+form.elements[i].title + "不能为空!");
			form.elements[i].focus();			//当前元素获取焦点
			return false;
		}
	}
}
</script>
</head>
<body>
<%-- session对象 out对象的使用 --%>
<%
if(session.getAttribute("message")!=null){
	out.println(session.getAttribute("message").toString());
}
%>
<br><hr></hr>
<%-- form控件 --%>
<form name="form1" method="post" action="deal.jsp" onSubmit="return checkNull(form1)">
留言人名:
	<input name="author" type="text" id="author" size="30" title="留言人"><br>
留言内容:
	<textarea name="content" cols="70" rows="10" title="留言内容" id="content"></textarea><br>
	<input name="Submit" type="submit" value="签写留言">  <%-- 提交事件 --%>
	<input name="Submit2" type="reset" value="重置">      <%-- 重置form --%>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%

/* request对象 用于处理http请求的各项参数 */
request.setCharacterEncoding("GB18030");

//获取留言人
String author=request.getParameter("author");	

//获取留言内容
String content=request.getParameter("content");	

//组合留言信息
String message="["+author+"]说:"+content+"<br>";	

//当前session内容不为空 则追加信息
if(session.getAttribute("message")!=null){
	message+=session.getAttribute("message").toString();
}

//将追加的信息房放入session中
session.setAttribute("message",message);

//response 转到index.jsp
response.sendRedirect("index.jsp");
%>

思路:

点击提交后,form会转到deal.jsp,之后用session提取message并追加,之后显示,在重新转回index.jsp

这个网页的缺点是,不能多客户端互动,只能自己看自己的。session时间到后,就会清空数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1197681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

写在 Chappyz 即将上所之前:基于 AI 技术对 Web3 营销的重新定义

前不久&#xff0c;一个叫做 Chappyz 的项目&#xff0c;其生态代币 $CHAPZ 在 Seedify、Poolz、Decubate、ChainGPT、Dao Space 等几大 IDO 平台实现了上线后几秒售罄&#xff0c;并且 Bitget、Gate.io、PancakeSwap 等几大平台也纷纷表示支持&#xff0c;并都将在 11 月 13 日…

浅析移动端车牌识别技术的工作原理及其过程

随着社会经济的发展与汽车的日益普及带来巨大的城市交通压力,在此背景下,智能交通系统成为解决这一问题的关键。而在提出发展无线智能交通系统后,作为智能交通的核心,车牌识别系统需要开始面对车牌识别移动化的现实需求。基于实现车牌识别移动化这一目标,一种基于Android移动终…

报时机器人的rasa shell执行流程分析

本文以报时机器人为载体&#xff0c;介绍了报时机器人的对话能力范围、配置文件功能和训练和运行命令&#xff0c;重点介绍了rasa shell命令启动后的程序执行过程。 一.报时机器人项目结构 1.对话能力范围 (1)能够识别欢迎语意图(greet)和拜拜意图(goodbye) (2)能够识别时间意…

运行npm install卡住不动的几种解决方案

在前端开发经常会遇到运行npm install 来安装工具包一直卡住不动&#xff0c;为此这里提供几种解决方案&#xff0c;供大家参考学习&#xff0c;不足之处还请指正。 第一种方案、首先检查npm代理&#xff0c;是否已经使用国内镜像 // 执行以下命令查看是否为国内镜像 npm con…

基于FANUC工业机器人的坐标系转换、多视角拼接与三维重建

0.简介 总体任务&#xff1a;机械臂末端安装三维相机&#xff0c;绕着工件进行拍摄&#xff0c;并在计算机中将每次拍摄的点云合并在同一个坐标系下&#xff0c;从而获得更加完整全面的点云。机械臂&#xff1a;FANAUC相机&#xff1a;梅卡曼德技术方案&#xff1a;使用相机外…

有趣的 TCP 抢带宽行为

昨天发了一篇 非技术文章&#xff0c;很多人找我讨论&#xff0c;浓缩成一句话&#xff0c;就是 “死道友而不死贫道”&#xff0c;我的简历上写着这些把戏能带来什么&#xff0c;我的 blog 上写着这么做是多么无耻&#xff0c;哈哈。 看看共享链路上如何挤占带宽&#xff1a; …

Mysql数据库 13.SQL语言 触发器

一、触发器&#xff08;操作日志表&#xff09; 1.介绍 不需要主动调用的一种储存过程&#xff0c;是一个能够完成特定过程&#xff0c;存储在数据库服务器上的SQL片段。 对当前表中数据增删改查的一种记录<日志表>&#xff0c;根据触发器自动执行&#xff0c;记录当前…

html+css+javascript打造网页内容浮动导航菜单

1需求分析 前段时间把“圳品”信息发布到网站上了&#xff0c;内容包括四大块&#xff1a; 按分布区域统计分析按产品类别统计分析按认定时间统计分析河池市“圳品”清单 导致网页很长&#xff0c;有同事反映说查看起来不是很方便&#xff0c;于是决定加上一个网页内容浮动导…

x3daudio1_7.dll怎么解决?x3daudio1_7.dll丢失的5个详细处理方法

首先&#xff0c;让我们来了解一下X3DAudio1_7.dll丢失的原因。X3DAudio1_7.dll是一个非常重要的动态链接库文件&#xff0c;它负责处理计算机中的音频输出。然而&#xff0c;由于各种原因&#xff0c;例如软件安装错误、病毒感染、系统升级等&#xff0c;我们可能会遇到X3DAud…

C语言--从键盘输入当月利润I,求应发奖金总数。

题目描述&#xff1a; 企业发放的奖金根据利润提成。利润I低于或等于100000元的&#xff0c;奖金可提成10%; 利润高于100000 元&#xff0c;低于200000元(1000001000000时&#xff0c;超过1000000元的部分按 1%提成。从键盘输入当月利润I,求应发奖金总数。 int main() {int m…

自动驾驶学习笔记(八)——路线规划

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 路线规划 路由元素 路径搜索 最优…

【C++】函数指针 ① ( 函数三要素 | 函数类型 | 函数指针类型 | 函数类型重命名 )

文章目录 一、函数类型 和 函数指针类型1、函数三要素2、函数类型3、函数指针类型4、函数类型重命名 二、代码示例 - 函数类型重命名1、代码分析2、完整代码示例 一、函数类型 和 函数指针类型 1、函数三要素 函数原型有三个重要要素 : 函数名称 : 使用 标识符 为函数命名 ; 用…

Fortran 中的指针

Fortran 中的指针 指针可以看作一种数据类型 指针存储与之关联的数据的内存地址变量指针&#xff1a;指向变量数组指针&#xff1a;指向数组过程指针&#xff1a;指向函数或子程序指针状态 未定义未关联 integer, pointer::p1>null() !或者 nullify(p1) 已关联 指针操作 指…

SpringBoot项目调用openCV报错:nested exception is java.lang.UnsatisfiedLinkError

今天在通过web项目调用openCV的时候提示如下错误&#xff1a; nested exception is java.lang.UnsatisfiedLinkError:org.opencv.imgcodecs.Imgcodecs.imread_0(Ljava/la如下图所示&#xff1a; 但是通过直接启动java main函数确正常&#xff0c;初步诊断和SpringBoot热加载…

文件管理技巧:按文件容量大小分类,自动移动至目标文件夹的方法

按文件容量大小分类可以帮助快速识别和筛选出不同大小的文件。这样做有很多好处。首先&#xff0c;可以轻松地查找和访问特定大小的文件&#xff0c;提高工作效率。其次&#xff0c;通过将不同大小的文件分类&#xff0c;可以更好地了解和掌控文件的使用情况&#xff0c;避免存…

leetcode刷题日记:110. Balanced Binary Tree(平衡二叉树)

题目给了我们一个二叉树要让我们来判断这一个二叉树是不是平衡二叉树。 要想判断一棵树是不是平衡二叉树&#xff0c;我们得首先知道平衡二叉树的定义是什么&#xff0c;平衡二叉树指的是这样的树它的左子树的高度与右子树高度的差的绝对值不能超过1&#xff0c;而且它的左子树…

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 关键字默认按升序排序。要按降序排序结果&#xff0c;使用 DESC 关键字。 示例按名称按字母顺序排序结果&#xff1a; import mysql.connectormydb mysql.connector.connect(host"l…

gorm之项目实战-使用gen以及定义表间关系

gorm之项目实战 ER图 关系整理 一对一关系&#xff1a; User 和 UserLog&#xff1a; 一个用户对应一个用户日志&#xff0c;通过 User 模型的主键与 UserLog 模型的外键建立一对一关系。 一对多关系&#xff1a; User 和 Teacher&#xff1a; 一个用户可以对应多个老师&…

电路中模拟地和数字地的分割方法

电路中只要是地&#xff0c;最终都要接到一起&#xff0c;然后入大地。如果不接在一起就是“浮地”&#xff0c;存在压差&#xff0c;容易积累电荷&#xff0c;造成静电。 地是参考0电位&#xff0c;所有电压都是参考地得出的&#xff0c;地的标准一致&#xff0c;故各种地应短…

rasa train nlu详解:1.1-train_nlu()函数

本文使用《使用ResponseSelector实现校园招聘FAQ机器人》中的例子&#xff0c;主要详解介绍train_nlu()函数中变量的具体值。 一.rasa/model_training.py/train_nlu()函数   train_nlu()函数实现&#xff0c;如下所示&#xff1a; def train_nlu(config: Text,nlu_data: Op…