JSP学习日记

news/2024/5/20 5:57:00/文章来源:https://blog.csdn.net/yuqu1028/article/details/128055659

JSP简述

Java Sever Pages----->Java服务器界面 用于前后端结合

jsp为什么淘汰?

由于JSP的前后端耦合性极高,编写代码非常臃肿。前后端的代码放在一起,所以JSP可以看成是已经被淘汰的技术。

为什么还要学jsp?

由于一些公司的项目较老,更新换代成本较高,只能选择不断维护。而维护的同时就需要用到jsp老知识
JSP在编译后也是一个和Java文件,并且会生成class文件,可以打开Tome cat 指定路径查看:

D:\simon\tools\Tomcat\apache-tomcat-8.5.20\work\Catalina\localhost\ROOT\org\apache\jsp
在这里插入图片描述
由此可以得出:

JSP本质上就是一个Servlet

JSP生成Java文件剖析

下面是JSP文件编译后生成的Java文件

// 类声明定义
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {

可以看出 index_jsp继承了HttpJspBase类,继续向上找,发现HttpJspBase继承了JspPage,JspPage继承了Servlet

public interface HttpJspPage extends JspPage {
public interface JspPage extends Servlet {

所以说JSP就是一个Servlet

JSP语法

<!-- HTML注释 -->
<%-- JSP注释 --%>

JSP声明语句: <%!%>
特点:定义全局变量,可以声明方法、类、支持任意Java数据类型

<!-- JSP声明语句 -->
<%! String str = "全局变量";static{System.out.println("静态代码块");
} %>

JSP表达式:<%=%>
特点:常用于输出内容、插入表达式

<input type="text" name="<%= 变量或表达式 %>" value="<%= 变量或表达式%>">

JSP脚本程序:<%%>
特点:定义局部变量、编写语句 不能定义方法 也可输出内容

<% for (int i = 0; i < 10; i++) { %>
<h1>HELLO WORLD <%= i %></h1>
<% } %>

注释:

<!-- HTML注释 -->
<%-- JSP代码注释 --%>
区别:在网页中查看源代码时:jsp注释不会显示,但HTML注释会显示

JSP指令

Page

  1. 定制错误页面
<%-- 头文件page 声明了页面类型  编码集  语言等 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 显示声明这个是一个错误界面 --%>
<%@ page isErrorPage="true" %> 
<%-- 错误页面也可以在web.xml中声明 如下: --%>
<!--  ERROR Page  --><error-page><error-code>404</error-code><location>/error/404.jsp</location></error-page><error-page><error-code>500</error-code><location>/error/500.jsp</location></error-page>
  1. 其他指令如:autoFlush:是否被刷新 import : 导包 …

include

<%-- 提取公共页面   例如网页的头部尾部导航栏 --%>
<%@ include file="./beInclude.jsp" %>
<!-- @include 属于是将另一个页面包含进来  所以一旦出现同名变量就会报错 -->
<!-- --------------- -->
<!-- 利用jsp标签 属于是将页面进行拼接 每个页面中的变量相互独立 -->
<%--  也可以用jsp标签提取公共页  --%><jsp:include page="beInclude.jsp"/>

taglib

标签库 引入:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSP的内置对象

在第一次访问jsp网页时,会由服务器将该jsp文件转换为Java文件并生成字节码文件,在生成的Java文件中会包含经常使用的一些内置对象

// 如下所示
final javax.servlet.jsp.PageContext pageContext; // 上下文
final javax.servlet.ServletContext application;// 存储数据
final javax.servlet.ServletConfig config; // 配置信息
javax.servlet.jsp.JspWriter out = null;  // 输出
final java.lang.Object page = this;   // 当前页面
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
// 除此之外 还包含了
HttpRequest req  // 请求
HttpResponse resp  // 响应
Execption // 异常错误

九大内置对象

  1. PageContext // 可以访问所有的jsp内置对象
// 常用
pageContetx.getRequest()//返回当前页面中的request对象。
pageContetx.getResponse()//使用此方法将返回当前页面中的response对象。
pageContetx.getPage()//此方法返回当前页面中的page对象。
pageContetx.getSession()//返回当前页面中的session对象。
pageContetx.getOut()//返回当前页面中的out对象。
pageContetx.setAttribute(String name)//给指定的属性名设置属性值。
pageContetx.getAttribute(String name)//根据属性名称找到相应的属性值。
pageContetx.findAttribute(String name)//寻找一个属性并返回,如果没有找到则返回一个null。
  1. Request // 请求
request.setAttribute(String name,Object value) //储存此请求中的属性
request.getAttribute(String name) //返回指定属性的属性值
request.getParameter(String name) //返回name指定参数的参数值
request.getParameterValues(String name) //返回包含参数name的所有值的数组
  1. Response
response.getCharacterEncoding() //返回响应用的是何种字符编码
response.getWriter() //返回可以向客户端输出字符的一个对象
response.sendRedirect(java.lang.String location) //重新定向客户端的请求
  1. Session
session.getId()//返回session的ID号
session. setAttribute(String name,Object value)//将value值存在session域中,名字为name
session.getAttribute(String name)//返回与此会话中的指定名称绑定在一起的值,如果没有值绑定在该名称下,则返回null
session.invalidate()//销毁session
  1. out
  2. aplication
application.setAttribute(key,value)//设置应用对象中指定名字的属性值
application.getAttribute(key)//获取应用对象中指定名字的属性值
application.getAttributeNames()//获取应用对象中所有属性的名字 枚举
  1. config
  2. Page
  3. execption

pageContext.setAttribute的作用域

// 只在一个网页中有效
pageContext.setAttribute("name1","张一");
// 只在一个请求中有效  请求转发时将会携带
request.setAttribute("name2","张二");
// 在一次会话中均可读取  打开浏览器到关闭浏览器
session.setAttribute("name3","张三");
// 在服务器中有效  从打开服务器到关闭服务器
application.setAttribute("name4","张四");

使用场景:

  1. request: 客户端向服务端请求的数据,用过之后即销毁。再次请求需要重新加载----> 新闻
  2. Session : 用户向服务器请求得到的数据需要保存,后续还会使用 购物车
  3. application: 用户向服务器发送请求,使用该数据,使用完毕后还可以给其他用户使用

JSP标签

  1. <jsp:forward page="beInclude.jsp"><jsp:param name="name" value="张三"/><jsp:param name="age" value="18"/></jsp:forward>
    <%-- 在另一jsp中获取 --%>
    姓名:<%= request.getParameter("name")%>
    年龄:<%= request.getParameter("age")%>
    // 注意处理编码问题
    

EL表达式

全称 Express Language

  • 获取数据
    按照域对象从小到大进行获取,依次是:
    pageContext < request < Session < application

  • 执行运算

  • 获取Web

<%pageContext.setAttribute("name","张三");request.setAttribute("name","张四");session.setAttribute("name","张五");application.setAttribute("name","张六");List<String> list = new ArrayList<>();list.add(0,"张三");list.add(1,"张四");list.add(2,"张五");list.add(3,"张六");list.add(4,"张七");request.setAttribute("list",list);
%>
<pre>获取pageContext作用域中的name: ${pageScope.name}获取request作用域中的name: ${requestScope.name}获取session作用域中的name: ${sessionScope.name}获取application作用域中的name: ${applicationScope.name}获取集合指定索引的数据:${list[0]} ${list[4]}
<%--  张三 和  张七  --%>获取集合长度:${list.size()}
</pre>

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

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

相关文章

基于遗传算法的自主式水下潜器路径规划问题附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

MFC编辑框控件属性和用法

目录 一、编辑框的属性 1.want return 2.Multiline 3.滚动条 4.添加完效果 二、初始化编辑框内容 三、复制与退出 四、edit control的值类型 五、思维拓展 一、编辑框的属性 默认情况下编辑框edit control 是可以横向无限输入的 1.want return 支持换行&#xff0c;…

自动化项目倍加福测距仪QSM WCS RS485 与西门子S7 200通信

1、程序流程图 2、WCS位置数据处理流程 第一步&#xff1a;设置S7-200的RS485的通讯波特率19.2kbps&#xff0c;通讯格式&#xff08;8&#xff0c;1&#xff0c;E&#xff09;&#xff1b; 第二步&#xff1a;PLC向WCS发送请求码&#xff1a; A0A1为0&#xff0c;表示读码器地…

《人月神话》(The Mythical Man-Month)1 看清问题的本质:如果我们想解决问题,就必须试图先去理解它...

第一章 焦油坑&#xff08;The Tar Pit&#xff09;史前史中&#xff0c;没有比巨兽在焦油坑中垂死挣扎的场面更令人震撼的了。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈&#xff0c;焦油纠缠得越紧&#xff0c;没有任何猛兽足够强壮或具有足够的技巧&a…

【C++数据结构】程序性能分析

程序性能分析 2.1 什么是程序性能 程序性能&#xff1a;所谓程序性能&#xff08;performance of a program&#xff09;是指运行这个程序所需要的内存和时间的多少。 性能分析&#xff1a;在性能分析&#xff08;performance analysis&#xff09;时&#xff0c;采用分析方…

基于粒子群算法的配电网重构研究matlab程序

基于粒子群算法的配电网重构研究matlab程序 参考文献&#xff1a;基于改进灰狼算法的含分布式电源配电网重构研究 &#xff08;本文未考虑分布式电源&#xff09; 摘要&#xff1a;使用基本环矩阵编码的智能优化算法在处理配电网重构问题中&#xff0c;通常使用无序的解空间&a…

玩链子游戏

一 游戏描述 有一条链子&#xff0c;上面有 n 颗钻石&#xff0c;钻石编号为 1&#xff5e;n 。可以对该链子执行两种操作&#xff1a; ① CUT a b c &#xff08;区间切割操作&#xff09; 切下从第 a 颗钻石到第 b 颗钻石的链子&#xff0c;把它插在剩余链子的第 c 颗钻石…

Pytorch中CrossEntropyLoss()详解

一、损失函数 nn.CrossEntropyLoss() 交叉熵损失函数 nn.CrossEntropyLoss() &#xff0c;结合了 nn.LogSoftmax() 和 nn.NLLLoss() 两个函数。 它在做分类&#xff08;具体几类&#xff09;训练的时候是非常有用的。 二. 什么是交叉熵 交叉熵主要是用来判定实际的输出与期望…

水泥行业工业互联网平台(CCPS)解决方案

水泥行业经过过去十年的发展和调整&#xff0c;基本实现了集团化。集团管控当前面临的主要问题是数字的分散化和碎片化&#xff0c;建设工业互联网是新时期加强集团管控的必经之路。 CCPS平台优势 1.融合SOA理念的架构平台和系统框架。具有跨平台、易维护、可集成、可扩展、分…

【图像处理】基于图像聚类的无监督图像排序问题(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

遥感技术及高分遥感影像在地震中的应用及高分二号获取

长期以来&#xff0c;地震预报监测、灾害调查、灾情信息获取主要依靠实地勘测手段&#xff0c;其获取的数据精度和置信度虽然较高&#xff0c;但存在工作量大、效率低、费用高和信息不直观等缺点。遥感技术手段可在一定程度上克服传统实地勘测手段的缺点&#xff0c;并具有其他…

BUUCTF Misc ningen1 小明的保险箱1 爱因斯坦1 easycap1

ningen1 下载文件 使用kali中的binwalk查看 binwalk xxx.jpg 分离文件 打开 压缩包加密了&#xff0c;爆破 爆破成功&#xff0c;密码&#xff1a;8368 得到flag flag{b025fc9ca797a67d2103bfbc407a6d5f} 小明的保险箱1 下载文件 用010 editor打开 可以看到图…

Springboot——Controller层开发、请求与响应、RESTful开发规范

目录 一、入门案例&#xff08;小了解&#xff0c;没啥用&#xff09; 1.1 创建Springboot工程 1.2 导入maven坐标 1.3 controller层代码 1.4 postman测试 二、 REST常用注解 2.1 Controller 2.2 RequestMapping&#xff08;请求映射路径&#xff09; 2.3 Response…

UE5笔记【十】第一个蓝图项目:bluePrint。

我们将上升的斜坡或者楼梯隐藏&#xff0c;往下移动&#xff0c;使其隐藏在地面以下。然后将方块也向下移动&#xff0c;漏出一点来。我们要模拟的场景是&#xff1a;当人移动到蓝色方块上时&#xff0c;踩在方块上&#xff0c;上升的楼梯升起来。然后人可以上楼。 将蓝色方块…

有限元的学习笔记

杂七杂八 有限元刚度矩阵推导 例题 ppt matlab 特征值特征向量计算 西工大题 轴对称问题有限元法 高斯-赛德尔&#xff08;Gauss-Seidel&#xff09;迭代法求解线性方程组 A(a1,a2) B(b1,b2) AB (a1,a2)(b1,b2) a1b2-a2b1 A(a1,a2,a3) B(b1,b2,b3) AB (a1,a2,a3)(b1,b2,b3…

PyQt5学习笔记--多线程处理、数据交互

目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 1--引入多线程的原因 ① 如果Qt只采用单线程任务的方式&#xff0c;当遇到数据处理慢的情形时&#xff0c;会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷&#xff1a; …

JMETER也会遇到加密难题,中文乱码也能一并处理

文章目录加密的接口测试导出jar包&#xff0c;放入jmeter的lib/ext扩展目录JMeter输出中文乱码总结加密的接口测试 不管是接口测试还是性能测试&#xff0c;在遇到接口有加密入参的时候&#xff0c;该怎么办&#xff1f; 毫无疑问&#xff0c;放弃自己实现的想法&#xff0c;除…

现代密码学导论-16-选择明文攻击和CPA安全

目录 PCA不可区分实验 DEFINITION 3.21 PCA安全的加密方案 LR预言机实验 DEFINITION 3.22 多明文PCA安全的加密方案 THEOREM 3.23 定义3.21和定义3.22等价 PCA不可区分实验 通过运行G(1^n)获得密钥k敌手A被给定输入1^n并拥有访问预言机Enck()的权利&#xff0c;敌手A输出一…

VuePress构建一个文档管理网站

序言 目前无论笔记还是项目文档&#xff0c;大部分我都会通过 Markdown来记录&#xff0c;并且大部分文档写完都只存在自己电脑上&#xff0c;每次查找起来都需要耗费一些时间 自己的写的一部分技术教程由于初次记录时了解知识不多&#xff0c;内容存在偏差或考虑不全面&…

含电热联合系统的微电网运行优化附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …