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

目录:

目录

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.rhkb.cn/news/188406.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原文远知行COO张力加盟逐际动力 自动驾驶进入视觉时代?

11月7日&#xff0c;通用足式机器人公司逐际动力LimX Dynamics官宣了两位核心成员的加入。原文远知行COO张力出任逐际动力联合创始人兼COO&#xff0c;香港大学长聘副教授潘佳博士为逐际动力首席科学家。 根据介绍&#xff0c;两位核心成员的加入&#xff0c;证明一家以技术驱…

Stable Diffusion webui 源码调试(三)

Stable Diffusion webui 源码调试&#xff08;三&#xff09; 个人模型主页&#xff1a;LibLibai stable-diffusion-webui 版本&#xff1a;v1.4.1 内容更新随机&#xff0c;看心情调试代码~ shared 变量 shared变量&#xff0c;简直是一锅大杂烩&#xff0c;shared变量存放…

第三届 “鹏城杯”(初赛)

第三届 “鹏城杯”&#xff08;初赛&#xff09; WEB Web-web1 反序列化tostring打Hack类 Payload:O%3A1%3A%22H%22%3A1%3A%7Bs%3A8%3A%22username%22%3BO%3A6%3A%22Hacker%22%3A2%3A%7Bs%3A11%3A%22%00Hacker%00exp%22%3BN%3Bs%3A11%3A%22%00Hacker%00cmd%22%3BN%3B%7D%7D…

Leetcode Hot100之六:42.接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 提示&#xff1a; n height.length 1 < n < 2 * 10^4 0 < height[i] < 10^5 思路 暴力循环&#xff1a; 原本的思路是左边界i从左到…

原型制作神器ProtoPie的使用Unity与网页跨端交互

什么是ProtoPie&#xff1f; ProtoPie是一款面向设计师的软件原型设计工具&#xff0c;例如制作App界面交互展示&#xff0c;制作好的原型可以一键发布到Web服务器&#xff0c;就可以浏览器访问。由于其内置了大量常用交互类型&#xff0c;以及"程序化"模块&#xf…

人工智能基础_机器学习024_梯度下降进阶_L1正则可视化图形---人工智能工作笔记0064

然后我们就来用代码实现一下L1正则的可视化,我们来看看 首先导入 import numpy as np 数学计算 import matplotlib.pyplot as plt 画图用的 然后我们把L1正则的公式写出来 可以看到L1的正则 其实就是w1和w2的绝对值相加对吧 然后这里我们写一个公式: f(x,y) = |x|+|y| …

可以体现Python语法精妙的十个例子!

文章目录 前言1.for - else2.一颗星*和两颗星**3.三元表达式4.with - as5.列表推导式6.列表索引的各种骚操作7.lambda函数8.yield 以及生成器和迭代器9.装饰器10.巧用断言assertPython技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学习视频5、实战案例…

《网络协议》02. 物理层 · 数据链路层 · 网络层

title: 《网络协议》02. 物理层 数据链路层 网络层 date: 2022-08-31 22:26:48 updated: 2023-11-08 06:58:52 categories: 学习记录&#xff1a;网络协议 excerpt: 物理层&#xff08;数据通信模型&#xff0c;信道&#xff09;、数据链路层&#xff08;封装成帧&#xff0c…

演示文稿制作软件 Deckset mac中文版介绍

Deckset mac是一款Mac上的演示文稿制作软件&#xff0c;它可以让你使用Markdown语言快速地创建演示文稿。与传统的演示文稿制作软件相比&#xff0c;Deckset采用了全新的设计理念&#xff0c;旨在让用户更加专注于内容的创作&#xff0c;而不是花费过多的时间在排版和设计上。 …

Kotlin文件和类为什么不是一对一关系

在Java中&#xff0c;一个类文件的public类名必须和文件名一致&#xff0c;如何不一致就会报异常&#xff0c;但是在kotlin的文件可以和类名一致&#xff0c;也可以不一致。这种特性&#xff0c;就跟c有点像&#xff0c;毕竟c的.h 和 .cpp文件是分开的。只要最终编译的时候对的…

2000-2022年上市公司数字化转型同群效应数据

2000-2022年上市公司数字化转型同群效应数据 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;股票代码、年份、行业代码、行政区划代码、数字化转型程度-A、数字化转型程度-B、同行业同群-数字化转型程度-A_均值、同行业同群-数字化转型程度-A_中位数、同省份同群-数字化…

【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题

一&#xff0c;Redis与ssm整合 1.1 pom.xml配置 在pom.xml中配置相关的redis文件 redis文件&#xff1a; <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>red…

JavaWeb Day09 Mybatis-基础操作01-增删改查

目录 环境准备 ①Emp.sql ②Emp.java 一、删除 ①Mapper层 ②测试类 ③预编译SQL&#xff08;查看mybatis日志&#xff09; 1.性能 2.安全 ④总结 二、新增 ①Mapper层 ②测试类 ③结果 ④新增&#xff08;主键返回&#xff09; 1.Mapper层 2.测试类 ⑤总结​…

Fortran 中的指针

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

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

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

K8S容器内安装cur/telnet命令(Alpine Linux离线环境安装curl/telnet或其他工具)

背景 需求&#xff1a; 微服务的基础是镜像&#xff0c;通常在最小化的Linux镜像中安装jdk&#xff0c;然后运行编译好的java程序。将镜像运行到K8S上就得到了微服务Pod&#xff0c;Pod通常使用安装K8S时配置的私有网段&#xff0c;与宿主机不同。很多时候需要排查从Pod网段内…

人工智能基础_机器学习022_使用正则化_曼哈顿距离_欧氏距离_提高模型鲁棒性_过拟合_欠拟合_正则化提高模型泛化能力---人工智能工作笔记0062

然后我们再来看一下,过拟合和欠拟合,现在,实际上欠拟合,出现的情况已经不多了,欠拟合是 在训练集和测试集的准确率不高,学习不到位的情况. 然后现在一般碰到的是过拟合,可以看到第二个就是,完全就把红点蓝点分开了,这种情况是不好的, 因为分开是对训练数据进行分开的,如果来…

解决《荒野大镖客》提示emp.dll文件丢失问题,总结5个修复方法

在当今数字时代&#xff0c;游戏已经成为人们休闲娱乐的重要方式。作为一名游戏爱好者&#xff0c;笔者在近期体验《荒野大镖客》这款游戏时&#xff0c;遇到了一个令人苦恼的问题——emp.dll文件丢失。这个问题让游戏的无法启动进行。本文将围绕这一问题&#xff0c;探讨其原因…

智链引擎CEO李智:游戏化增长中台,让裂变营销快十倍、便宜十倍、好十倍丨数据猿专访...

大数据产业创新服务媒体 ——聚焦数据 改变商业 双十一电商大战一触即发&#xff0c;各个垂类的App也都希望能够借力双十一营销季&#xff0c;实现用户和营收双增长。MarTech在这个风口上&#xff0c;又成为2B赛道关注的焦点。 业内人士指出&#xff0c;MarTech的引入催生营销…

考研数据结构单链表的增删改查看这一篇就够了

目录 一. 单链表的特点 1.1 解引用拓展 &#x1f916; 二. 单链表的操作 2.1不带头节点的操作 2.1.1 打印 2.1.1.1 创建结点 2.1.2 尾插&#xff08;需要二级指针&#xff09; 注意形参的值不改变实参&#xff1a;&#xff08;精髓部分&#xff09; 2.1.3 头插 2.1.4…