Java web后端5 JSP技术

JSP概述

HTML代码与Java代码共同存在
在这里插入图片描述
在这里插入图片描述

浏览器中显示

在这里插入图片描述
启动Tomcat
浏览器访问:http://localhost:8083/JSPWeb_war_exploded/hello.jsp

<%--Created by IntelliJ IDEA.User: DQDate: 2021/10/20Time: 9:30To change this template use File | Settings | File Templates.
--%>
<%--JSP的指令--%>
<%--浏览器访问:http://localhost:8083/JSPWeb_war_exploded/hello.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1 style="color: red">Hello World!</h1>
</body>
</html>

JSP工作原理

jsp工作原理:web服务器(tomcat\jboss等)先把jsp文件翻译成servlet的java文件,然后编译成字节码文件,就是.class文件,当客户端访问的时候,服务器直接装载jsp对应的servlet的字节码文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Tomcat中存放jsp文件的位置

把jsp文件编译为class文件和java文件
在这里插入图片描述

JSP脚本元素

在这里插入图片描述

JSP脚本元素:JSP Scriptlets

在这里插入图片描述
在这里插入图片描述

JSP脚本元素:JSP声明语句

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

JSP脚本元素:JSP表达式

在这里插入图片描述

JSP注释

后端注释,前端和浏览器看不到
java,JSP,H5的注释都可以在JSP中写

<!----><%----%><%--
///****/       --%>

在这里插入图片描述

案例:使用JSP

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--JSP Scriptlets--%>
<%int[]a=new int[10];for(int i=0;i<10;i++) {a[i] = i;}
%><%--JSP声明语句--%>
<%! int x=9,y=10;%><%--JSP表达式--%>
x=<%=x%><br>
y=<%=y%></body>
</html>

案例:使用html的表格和JSP输出九九乘法表

代码1
在这里插入图片描述

<%--Created by IntelliJ IDEA.User: DQDate: 2021/10/20Time: 16:24To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1 style="color: aquamarine">九九乘法表</h1>
<%--border:表格边框;cellspacing属性:设置单元格间距--%>
<table border="1" cellpadding="10"><%for (int i = 1; i <= 9; i++) {%><tr><%for (int j = 1; j <= i; j++) {%><%--h5:table: tr行,td列--%><td><%=i%>*<%=j%>=<%=i * j%><%="\t"%></td><%}%></tr><%}%>
</table></body>
</html>

代码2
在这里插入图片描述

<%--Created by IntelliJ IDEA.User: DQDate: 2021/10/20Time: 16:24To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1 style="color: aquamarine" >九九乘法表</h1>
<%--border:表格边框;cellspacing属性:设置单元格间距--%>
<table border="1" cellpadding="10"><%for (int i = 1; i <= 9; i++) {%><tr><%for (int j = i; j <= 9; j++) {%><%--h5:table: tr行,td列--%><td><%=i%>*<%=j%>=<%=i * j%><%="\t"%></td><%}%></tr><%}%>
</table></body>
</html>

Html5的设置表格形式:

 <td style="border: 2px solid black;padding: 2px"><%=i%>*<%=j%>=<%=i * j%></td>

在这里插入图片描述

JSP指令:page指令

在这里插入图片描述
需要注意的是,page指令对整个页面都有效,而与其书写的位置无关(先编译指令再解析内容),但是习惯上把page指令写在JSP页面的最前面。
在这里插入图片描述

JSP常见page指令

其中,除了import属性外,其他的属性都只能出现一次,否则会编译失败。需要注意的是,page指令的属性名称都是区分大小写的。
language取值只有java
在这里插入图片描述

案例:jsp错误页面跳转

源页面
在这里插入图片描述
错误页面:
在这里插入图片描述
浏览器:
在这里插入图片描述

JSP指令:include指令

静态包含
静态包含:在include位置上源码直接替换,然后一起编译为.class,.java【一个class,java文件】

动态包含:先编译源码,再把页面结果返回当前页面【两个class,java文件】
–效果更快
在这里插入图片描述
注意事项:
包含站内资源(相对路径)
页面请求地址不会发生变化
在这里插入图片描述
案例:
在这里插入图片描述

JSP隐式对象

JSP容器自动创建的:
在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在JSP页面中使用。
在这里插入图片描述

JSP隐式对象:out对象

在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。

在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据
才能真正写入到Servlet引擎所提供的缓冲区中。

在这里插入图片描述

案例:爆红不影响

<%@ page contentType="text/html;charset=UTF-8" language="java"  buffer="8kb" %>
<html>
<head><title>out对象:JSPWriter,PrintWriter</title>
</head>
<body>
<%
//内置对象JSPWriter
/*
1.buffer="8kb"或默认不写
JSPWriter的缓冲区没有满,只有调用了response.getWriter();才会写入Response缓冲区(放在原来的内容后面)
所以先输出:
PrintWriter Instance
再输出:
JSPWriter Instance2.buffer="none"
写JSPWriter没有缓冲区,直接放入Response缓冲区
所以先输出:
JSPWriter Instance
再输出:
PrintWriter Instance3.如果buffer不够大
输出的内容可能第一句话在第二句话后面*/out.print("JSPWriter Instance");
%><br>
<%//PrintWriter对象PrintWriter printWriter = response.getWriter();printWriter.print("PrintWriter Instance");
%>
<br>
</body>
</html>

在这里插入图片描述

JSP隐式对象:pageContext对象

1.一般不使用这个功能
使用pageContext对象可以获取JSP的其他8个隐式对象。pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法。
在这里插入图片描述
2.存储数据的功能
划分了四个不同的存储区域,scope默认为1【ageContext.PAGE_SCOPE:表示页面范围】
findAttribute:从小到大进行查找,找到就返回结果;找不到就扩大范围继续找到,最大范围找不到就返回NULL
在这里插入图片描述
在这里插入图片描述
详情:
在这里插入图片描述
案例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>pageContext</title>
</head>
<body>
<%//1 2 3pageContext.setAttribute("str1", "page1", pageContext.PAGE_SCOPE);pageContext.setAttribute("str1", "page2");//同一范围内同名的会覆盖pageContext.setAttribute("str1", "request1", pageContext.REQUEST_SCOPE);pageContext.setAttribute("str2", "request2", pageContext.REQUEST_SCOPE);request.setAttribute("str2", "request3");pageContext.setAttribute("session", "session1", pageContext.SESSION_SCOPE);session.setAttribute("session", "session2");%>
page=<br>
<%=pageContext.getAttribute("str1")%><br>
<%=pageContext.getAttribute("str1", 1)%><br>
<%--
page2
page2
--%>
request=<br>
<%=request.getAttribute("str2")%><br>
<%=pageContext.getAttribute("str1")%><br>
<%=pageContext.getAttribute("str1", 2)%><br>
<%--在page内没有找到str2--%>
<%=pageContext.getAttribute("str2")%><br>
<%=pageContext.getAttribute("str2", 2)%><br>
<%--
request3
page2
request1
null
request3
--%>
session=<br>
<%=pageContext.getAttribute("session", pageContext.SESSION_SCOPE)%><br>
<%=session.getAttribute("session")%><br>
<%--
session2
session2
--%>
</body>
</html>

JSP动作元素

JSP的七个动作元素
<jsp:forward>:请求的转发。相当于request.getRequestDispatcher(“”).foward(request,response);

<jsp:include>:动态包含。相当于request.getRequestDispatcher(“”).include(request,response);

<jsp:param>:参数传递。和jsp:forward或jsp:include配合使用用来传递参数。

<jsp:useBean>:在页面上使用JavaBean类的对象。

JavaBean的特点:
是一个public类。
所有属性都是private的,并提供共有的get、set方法。
只能有默认的无参构造。
必须定义包名。

<jsp:getProperty>:获取JavaBean中的属性值,相当于调用get方法

<jsp:setProperty>:向JavaBean的制定属性设置值,相当于调用set方法

<jsp:plugins>:在页面上引入java applet组件或javabean组件

<jsp:include>动作元素【动态包含】

动态包含:把其他的页面内容,合并到当前要包含的页面,最后一块输出。

基本语法格式:

<jsp:include page=“被包含页面的URL” flush=“true或false”></jsp:include>

动态包含的特点:多个页面的内容合并输出,多个jsp页面生成多个java文件,编译成多个class文件。

静态包含的特点:多个页面的内容合并输出,多个jsp页面生成一个java文件,编译成一个class文件。

在这里插入图片描述

<jsp:include>包含的原理是将被包含的页面编译处理后将结果包含在页面中。当浏览器第一次请求一个使用<jsp:include>包含其他页面的页面时,Web容器首先会编译被包含的页面,然后将编译处理后的返回结果包含在页面中,之后编译包含页面,最后将两个页面组合的结果回应给浏览器。

案例:
浏览器:
5秒之后,输出了Welcome here!!!

JspInclude1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>JspInclude1</title>
</head>
<body>
欢迎页面:<br>
<jsp:include page="jspInclude2.jsp" flush="true"/>
</body>
</html>

JspInclude2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>JspInclude2</title>
</head>
<body><%Thread.sleep(5000);
%>
welcome here!!!
</body>
</html>

<jsp:forward>动作元素

请求转发:是同一个请求
只能请求站内资源,不能请求百度等资源

请求转发地址栏不会发生改变,因为只是一次请求;而重定向地址栏会发生改变
在这里插入图片描述
案例:
浏览器
转到了jspForward2.jsp
在这里插入图片描述
jspForward1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp Forword:请求转发1</title>
</head>
<body>
欢迎来到!!!<br>
<jsp:forward page="jspForward2.jsp"></jsp:forward>
</body>
</html>

jspForward2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp Forword:请求转发2</title>
</head>
<body>你当前的时间:<br>
<%out.write(new Date().toString());
%>
</body>
</html>

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

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

相关文章

listview bcb 行的颜色_文明交通安全行手抄报简单又漂亮

在生活中我们要特别注意交通安全&#xff0c;因为生命是宝贵的。全国交通安全日将至&#xff0c;下面小编给大家准备了文明交通安全行手抄报&#xff0c;一起来学习交通安全知识吧!文明交通安全行手抄报交通安全常识出家门&#xff0c;路边走&#xff0c;交通法规要遵守;过马路…

小米C++开发 面试 准备阶段和部分真题

真题 C 函数指针和指针函数的区别 o(╥﹏╥)o堆和栈的区别函数重载&#xff1f;为什么返回值不可以区分函数重载&#xff1f;o(╥﹏╥)o封装、继承和多态的定义&#xff0c;自己描述一下这三者的区别和联系。多态的构成(应该是想听虚函数&#xff0c;当时没有想到 o(╥﹏╥…

电脑屏保海底世界_水下栖息地:人类能否在海洋中居住?真的有人住在海底吗?...

慧缘开运讲坛&#xff1a;真的有人住在海底吗&#xff1f;对于这个问题&#xff0c;你肯定首先会想到美人鱼&#xff0c;对于未知的事物&#xff0c;我们并没有证据证明它们的存在。人类如何居住海底呢&#xff1f;那首先需要一个密闭的生态环境供进入海底的人生活。我们可以称…

中科大 计算机网络16 P2P应用

P2P架构 每一个节点即是客户端又是服务器&#xff0c;分布式的&#xff0c;可靠性高 钉钉&#xff0c;QQ打电话采用P2P的方式 文件分发&#xff1a;C/S和P2P 上载&#xff1a;客户端向服务器发送文件 下载&#xff1a;客户端从服务器拉取文件 C/S&#xff1a; 所有的客户端…

密码学专题 SSL协议

SSL协议为不同的高层协议(http、FTP)提供安全服务SSL握手协议、SSL修改密文协议和SSL告警协议的目的是为了 管理 和SSL相关的密文交换连接&#xff1a;两台主机之间提供特定类型的数据传输&#xff0c;是点对点的关系&#xff1b;连接是短暂的&#xff0c;每一个连接都会和一个…

1709 ltsb 内存占用_深挖Python的内存管理机制:垃圾回收机制

Python 程序在运行时&#xff0c;需要在内存中开辟出一块空间&#xff0c;用于存放运行时产生的临时变量&#xff0c;计算完成后&#xff0c;再将结果输出到永久性存储器中。但是当数据量过大&#xff0c;或者内存空间管理不善&#xff0c;就很容易出现内存溢出的情况&#xff…

Python学习11 继承

面向对象三大特征 继承 Python多继承&#xff0c;默认从左到右依次继承&#xff0c;使用&#xff0c;隔开 默认继承object类 #继承了object类&#xff0c;可以省略 class m:def eat(self):print(m)class m2(object):def eat(self):print(m)继承的注意事项 class A(object):de…

qq浏览器网页翻译_iOS 14中直接在Safari浏览器中翻译网页的方法!

在 iOS 14 中&#xff0c;苹果推出了「翻译」的应用程序&#xff0c;可以实时翻译数种不同的语言。同时&#xff0c;Safari 浏览器也新增了翻译功能。借助新的网页翻译功能&#xff0c;Safari 会根据设备的首选语言列表自动检测书否需要翻译访问的网页内容&#xff0c;以便继续…

密码学专题 相关概念的解析 对称算法|算法的安全性|非对称算法存在的问题|单向散列函数|数字签名的弊端|密钥交换

对称加密算法 对称加密算法又可以分成流加密算法和块加密 算法。流加密算法又称为序列加密算法或序列密码&#xff0c;它每次只对明文中的单个位或单个字节 进行加密操作。这种算法的优点是能够实时进行数据传输和解密&#xff0c;缺点是抗攻击能力比 较弱。块加密算法又称为分…

java 交换两个数的值(临时变量,加减,异或)

临时变量 开发中一般使用此方式 加减 第二种写法&#xff1a; //3.使用加减d1d1d2;d2d1-d2;d1d1-d2;System.out.println("d1"d1"\td2"d2);异或&#xff08;位运算符&#xff09; 原理 ^异或:相同为0,不同为1 总代码 class ExchangeNumber {public st…

51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...

单片机是一种可编程控制器&#xff0c;搭好硬件电路后&#xff0c;可以利用程序实现很多非常复杂的逻辑功能&#xff0c;与纯硬件电路相比&#xff0c;简化了硬件外围的设计、方便了逻辑的设计、丰富了逻辑的输出。不同厂家的单片机需要不同编程IDE来实现编程。在学习单片机之前…

java 使用三元运算符和if-else获取两个和三个数中的最大值

三元运算符格式 三元运算符:获取两个数中最大值 三元运算符:获取三个数中最大值 三元运算符:总代码 //案例1&#xff1a;获取两个数中最大的数int num178;int num256;int max1(num1>num2)?num1:num2;System.out.println("max1"max1);//max178//案例2&#xff1a;…

密码学专题 鉴别协议|实际应用的混合协议

鉴别是指确定一个人的身份&#xff0c;即确定一个人是否是他所宣称的身份 基于口令的鉴别协议 口令是最常用和最常见的鉴别协议。当登录一台重要的计算机时&#xff0c;它会要求输入用户 名和密码&#xff0c;用户名代表你的身份&#xff0c;口令起鉴别作用&#xff0c;如果你…

如何用texstudio下载ctex_公众号素材库视频如何下载,用这种方法就可以哦

随着微信的不断崛起&#xff0c;它现在不仅仅是一个交流软件还包含着很多功能&#xff0c;其中里面就有各种微信公众号&#xff0c;我们可以在公众号上找到许多有用的视频&#xff0c;今天拓途数据就告诉大家公众号素材库视频如何下载吧。 如何下载微信公众号里的视频文件 复制…

java 进制转换 十进制转二,八,十六进制

十进制转其他进制 因为在java中位运算符是直接对数值的二进制数进行操作的 并且 写的是二进制数在输出和操作时是以十进制数的形式&#xff1b; 所以十进制转二&#xff0c;八&#xff0c;十六进制&#xff1b;就已经实现了二进制&#xff0c;八进制&#xff0c;十进制&#x…

密码学专题 密钥生成|分组加密的模式 ECB|CBC|CFB|OFB

密钥生成 如何安全地生成密钥。即如何生成可信任的密钥&#xff0c;保证用户得到的密钥是安全的&#xff0c; 生成密钥的机器或程序是可信的。如何生成安全的密钥。安全的密钥没有统一准确的定义&#xff0c;但一般来说是指密钥抗 猜测和抗穷举等针对密钥攻击的能力。涉及密钥…

excel高级筛选怎么用_Excel表格中高级筛选的优点以及常用方法介绍

在Excel表格中普通的数据筛选只能满足一些基本的筛选要求&#xff0c;这篇文章为朋友们总结一下高级筛选的优点以及常用方法。一.与普通筛选相比&#xff0c;高级筛选可以使用比较运算符。在下图中要筛选性别为男并且评分大于90的人员。如果使用普通筛选需要一个个的勾选成绩大…

STL源码剖析 第二次温习 细节审核

临时对象的产生 临时对象也叫做 无名对象&#xff0c;(使用pass by value的方式会引发copy的操作&#xff0c;于是产生一个临时的对象)&#xff0c;造成效率的负担&#xff0c;但是可以可以制造一些临时对象在型别的后面 直接加上() 并可以指定初始数值&#xff0c;相当于调用…

java 彩票游戏

题目 Math.random()获取随机数 Math.random()返回的是一个[0.0,1.0)的doule类型的数 所以&#xff0c;获取0-9&#xff1a;(int)Math.random()*10–> [0,10) 获取0-10&#xff1a;(int)Math.random()*101–> [0,11) 获取10-99&#xff1a;(int)Math.random()9010–> […

python异常处理_Python入门 断言与异常处理

一、断言断言&#xff0c;可以理解为判断是否断开的预言。assert 表达式 , 描述表达式为我们的预期结果&#xff0c;当表达式的结果为False时&#xff0c;抛出 AssertionError 异常&#xff0c;如无异常捕获程序遇到异常时直接结束运行。反之&#xff0c;表达式结果为True 程序…