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时间到后,就会清空数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vscode 和 keil协同使用开发stm32程序,超详细教程

vscode 和 keil协同使用开发stm32程序 文章目录 vscode 和 keil协同使用开发stm32程序1. 安装vscode拓展安装chinese插件 2 .安装Mingw3.配置环境变量4. 打开Keil项目 VSCODE 是一款广受好评的代码编辑器&#xff0c; KEIL 是常用的嵌入式开发工具但编程界面简陋。 将两个工具…

【PyQt】(自制类)处理鼠标点击逻辑

写了个自认为还算不错的类&#xff0c;用于简化mousePressEvent、mouseMoveEvent和mouseReleaseEvent中的鼠标信息。 功能有以下几点&#xff1a; 鼠标当前状态&#xff0c;包括鼠标左/中/右键和单击/双击/抬起鼠标防抖(仅超出一定程度时才判断鼠标发生了移动)&#xff0c;灵…

TMUX命令的基本操作和使用

tmux&#xff1a;是两个单词的缩写&#xff0c;即“Terminal MultipleXer”&#xff0c;意思是“终端复用器”。 TMUX使用场景&#xff1a;假如你需要跑大模型或者数据集特别大的AI任务时&#xff0c;它往往需要花较长时间才能跑完&#xff0c;在跑的过程中&#xff0c;不能断…

用朴素贝叶斯实现垃圾邮箱分类实验报告

一、实验目的 1.会用Python创建朴素贝叶斯模型 2.使用朴素贝叶斯模型对垃圾邮件分类 3.会把文本内容变成向量 4.会用评价朴素贝叶斯模型的分类效果 二、设备与环境 Jupyter notebook Python3.9 三、实验原理 四、实验内容 1.把给定的数据集message.csv拆分成训练集和测试集&…

LeetCode【207】课程表

题目&#xff1a; 思路&#xff1a; https://www.jianshu.com/p/25868371ddfc/ 代码&#xff1a; public boolean canFinish(int numCourses, int[][] prerequisites) {// 入度int[] indegress new int[numCourses];// 每个点对应的边,出边Map<Integer, List<Intege…

upload 文件自动上传写法,前后端 下载流文件流

<el-uploadv-model:file-list"fileList":action"app.api/student/student/import":headers"{// Content-Type: multipart/form-data;boundary----split-boundary, 此处切记不要加&#xff0c;否则会造成后端报错 Required request part file is…

Python编程:从入门到实践 (项目3—Web应用程序—学习问题汇总)(新手避坑必看)

本人系统环境&#xff1a; WIN10系统 Python 3.9 Django 2.1.5 书本环境&#xff1a; Python 3.x Django 1.8.5 基于Django 开发一个名为“学习笔记”的项目&#xff0c;这是一个在线的日志系统&#xff0c;能够记录所学习的有关特定主题的知识。 建立项目 要编写一个名为“…

第十周学习记录

阅读MARS MARS创新点&#xff1a; (1)实例感知。模拟器使用独立的网络分别对前景实例和背景环境进行建模&#xff0c;以便可以单独控制实例的静态&#xff08;例如大小和外观&#xff09;和动态&#xff08;例如轨迹&#xff09;属性。 (2)模块化。模拟器允许在不同的 NeRF 主干…

补坑:Java的字符串String类(3):再谈String

不太熟悉字符串的可以看看这两篇文章 补坑&#xff1a;Java的字符串String类&#xff08;1&#xff09;-CSDN博客 补坑&#xff1a;Java的字符串String类&#xff08;2&#xff09;&#xff1a;一些OJ题目-CSDN博客 字符串创建对象 public static void main(String[] args) …

compile: version “go1.19“ does not match go tool version “go1.18.1“

** 1 安装了新版本的go后 为什么go version 还是旧版本&#xff1f; ** 如果你已经按照上述步骤安装了新版本的 Go&#xff0c;但 go version 命令仍然显示旧版本&#xff0c;可能是因为你的环境变量设置不正确或未正确生效。你可以尝试以下方法来解决问题&#xff1a; 重新…

YOLOV5改进:RefConv | 即插即用重参数化重聚焦卷积替代常规卷积,无额外推理成本下涨点明显

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点 3.涨点效果:RefConv,实现有效涨点! 论文地址 …

优雅关闭TCP的函数shutdown效果展示

《TCP关闭的两种方法概述》里边理论基础&#xff0c;下边是列出代码&#xff0c;并且进行实验。 服务端代码graceserver.c的内容如下&#xff1a; #include "lib/common.h"static int count;static void sig_int(int signo) {printf("\nreceived %d datagrams\…

nature日报:为什么印度德里现在的空气污染如此严重?

为什么印度德里现在的空气污染如此严重&#xff1f; 后季风季节为印度大城市的空气污染积累创造了理想的条件。 本文整理扩展自2023年11月10日nature杂志的NEWS EXPLAINER——Why is Delhi’s air pollution so bad right now? (nature.com) Highlights 季风期间&#xff0…

经典与现代:燃木壁炉的家居装饰灵感

燃木壁炉已经成为许多家庭的温馨选择&#xff0c;但在选择时需要考虑一些要点&#xff0c;以确保它适合你的家。让我们用通俗易懂的你们看看如何选择最适合你的燃木壁炉。 首先&#xff0c;考虑你喜欢的风格。燃木壁炉有各种设计&#xff0c;从古老传统到现代时尚都有。如果你…

Centos7安装PostgreSQL 14

环境&#xff1a; Centos7安装PostgreSQL_14版本数据库&#xff1b; 打开官方网站&#xff1a;PostgreSQL: Linux downloads (Red Hat family) 一、 版本选择 复制、粘贴并运行如下脚本&#xff1a; 二、安装步骤 这些命令是在 CentOS 7.x 系统上安装和配置 PostgreSQL 14 的步…

Install Nginx in Linux

Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。 1.yum 安装 nginx [rootVM-8-7-centos nginx]# yum install -y nginx Loaded plugins: fastestmirror, lang…

经典猜数游戏(python类封装)

五次机会猜测100以内随机正整数&#xff0c;我用初通的python类封装了代码并清屏上一次猜测提示&#xff0c;难有所增加咯。 (笔记模板由python脚本于2023年11月09日 12:31:30创建&#xff0c;本篇笔记适合掌握python循环和条件分支语句用法&#xff0c;初通python类的coder翻阅…

为什么审计平台不适合进行数据库变更管理?

关于视源电子 广州视源电子科技股份有限公司 (CVTE) 成立于 2005 年 12 月&#xff0c;旗下拥有多家业务子公司。 截至 2022 年底&#xff0c;公司总人数超 6000 人&#xff0c;约 60% 为技术人员。公司的主营业务为液晶显示主控板卡和交互智能平板等显控产品的设计、研发与销…

Shopee收款账户怎么设置?shopee收款方式选哪种

Shopee作为一家领先的电子商务平台&#xff0c;为卖家提供了多种收款方式。无论是在线支付、虚拟账户余额还是线下支付&#xff0c;卖家可以根据自己的需求和交易情况来进行选择。然而&#xff0c;在选择收款方式时&#xff0c;安全性、便捷性和市场适应性是需要考虑虾皮Shopee…

ChatGLM3 langchain_demo 代码解析

ChatGLM3 langchain_demo 代码解析 0. 背景1. 项目代码结构2. 代码解析2-1. utils.py2-2. ChatGLM3.py2-3. Tool/Calculator.py2-4. Tool/Weather.py2-5. main.py 0. 背景 学习 ChatGLM3 的项目内容&#xff0c;过程中使用 AI 代码工具&#xff0c;对代码进行解释&#xff0c;…