JSP学习笔记一

news2025/1/16 19:08:37

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:JSP学习笔记一
更多内容点击👇
      Servlet转发与重定向

本文目录

  • 一、Servlet响应页面的问题
  • 二、JSP(Java Server Pages)
    • 2.1 概念
    • 2.2 作用
  • 三、JSP开发(重要)
    • 3.1 创建JSP
      • 3.1.1 JSP编写Java代码
      • 3.1.2 访问JSP
    • 3.2 JSP与Servlet
    • 3.3 JSP实现原理
      • 3.3.1 JSP.java源文件存放目录
  • 四、JSP与HTML集成开发
    • 4.1 脚本
      • 4.1.1 普通脚本
      • 4.1.2 声明脚本
      • 4.1.3 输出脚本
    • 4.2 JSP注释
      • 4.2.1 语法规则
      • 4.2.2 注释示例
    • 4.3 JSP指令
      • 4.3.1 page指令
      • 4.3.2 include指定
      • 4.3.3 taglib指令
    • 4.4 动作标签
      • 4.4.1 include
      • 4.4.2 useBean
      • 4.4.3 setProperty
      • 4.4.4 getProperty
      • 4.4.5 forward
      • 4.4.6 param
    • 4.5 内置对象
      • 4.5.1 四大域对象
      • 4.5.2 pageContext对象
      • 4.5.3 pageContext获取其它内置对象
      • 4.5.4 pageContext操作其它内置对象的作用域
    • 4.6 整合

在这里插入图片描述

一、Servlet响应页面的问题

在Servlet学习过程中,服务器端通过Servlet响应客户端页面,不足之处有很多:

  • 开发方式麻烦:继承父类、重写方法、配置Web.xml或注解
  • 代码修改麻烦:修改代码后需要重新编译、部署、重启服务等
  • 显示方式麻烦:通过response对象获取流、使用println(“”);逐行输出
  • 协同开发麻烦:前端负责开发、美化页面,程序员负责编写代码。前端不动Java,程序员不能将所有前端页面内容通过流输出

二、JSP(Java Server Pages)

2.1 概念

简化的Servlet设计,在HTML标签中嵌套Java代码,用以高校开发Web应用的动态网页

2.2 作用

替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)

三、JSP开发(重要)

3.1 创建JSP

在web目录下创建*.jsp文件(与WEB-INF平级)
在这里插入图片描述

3.1.1 JSP编写Java代码

使用<%= %>标签编写Java代码在页面中打印当前系统时间

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>第一个JSP页面</title>
    </head>
    <body>
        <h2>现在时间是:</h2>
        <%=new Date()%>
    </body>
</html>

3.1.2 访问JSP

在浏览地址栏中输入“http://localhost:8080/项目名称/资源名称”访问指定JSP

3.2 JSP与Servlet

  1. 关系
    • JSP文件在容器中会转换成Servlet执行
    • JSP是对Servlet的一种高级封装。本质还是Servlet
  2. 区别
    • 与Servlet相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println()语句
      在这里插入图片描述

3.3 JSP实现原理

Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端。

在这里插入图片描述

3.3.1 JSP.java源文件存放目录

使用IDEA开发工具,Tomcat编译后的JSP文件(Xxx_jsp_class和Xxx_jsp.java)的存放地点:

在这里插入图片描述

四、JSP与HTML集成开发

4.1 脚本

脚本可以编写Java语句、变量、方法或表达式

4.1.1 普通脚本

  • 语法:

    • <% Java代码 %>
  • 注意:

    • 普通脚本可以使用所有Java语法,除了定义函数
    • 脚本与脚本之间不可嵌套,脚本与HTML标签不可嵌套
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>第一个JSP页面</title>
    </head>
    <body>
        <%
            //在jsp页面中编写输出语句

            //带你内容在客户端页面
            out.print("hello jsp");
            //打印内容在控制台
            System.out.println("hello java");
        %>

    </body>
</html>

4.1.2 声明脚本

  • 语法:

    • <%! 定义变量、函数 %>
  • 注意:

    • 声明脚本声明的变量是全局变量
    • 声明脚本的内容必须在普通脚本<% %>中调用
    • 如果声明脚本中的函数具有返回值,可以使用输出脚本调用<%= %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>第一个JSP页面</title>
    </head>
    <body>
        <%-- 声明脚本--%>
        <%!
            int i = 100;
            int a,b,c;
            Object obj = new Object();

            //定义方法
            public void method1() {
                System.out.println("method1().....");
            }

            public int method2() {
                return 200;
            }

            public void sum(int num1, int num2) {
                System.out.println(num1 + num2);
            }

            public int sum(int num1, int num2, int num3) {
                return num1 + num2 + num3;
            }
        %>
    </body>
</html>

4.1.3 输出脚本

  • 语法:

    • <%= Java表达式 %>
  • 注意:

    • 输出脚本可以输出带有返回值的函数
    • 输出脚本中不能加分号;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>第一个JSP页面</title>
    </head>
    <body>
        <%-- 声明脚本--%>
        <%!
            int i = 100;
            int a,b,c;
            Object obj = new Object();

            //定义方法
            public void method1() {
                System.out.println("method1().....");
            }

            public int method2() {
                return 200;
            }

            public void sum(int num1, int num2) {
                System.out.println(num1 + num2);
            }

            public int sum(int num1, int num2, int num3) {
                return num1 + num2 + num3;
            }
        %>

        <%
            //调用声明脚本中的变量及方法
            System.out.println("i=" + i);
            System.out.println("a:" + a + ";b=" + b + ";c=" + c);
            System.out.println("object:" + obj);

            System.out.println("调用方法:");
            method1();
            System.out.println(method2());
            sum(1000, 2000);
            System.out.println(sum(100, 200, 300));
        %>

        <%--
            <%=%>会将内容输出在客户端
            输出脚本不能加分号
        --%>
        <%=method2()%>
        <%=sum(1000, 2000, 3000)%>


    </body>
</html>

4.2 JSP注释

JSP注释主要有2个作用:为脚本代码作注释、为HTML内容作注释

4.2.1 语法规则

语法描述
<%-- 注释内容 --%>JSP注释,注释内容不会被发送至浏览器甚至不会被编译
HTML注释,通过浏览器查看网页源代码时可以看见注释内容

4.2.2 注释示例

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>第一个JSP页面</title>
    </head>
    <body>
        <%-- 这是jsp注释,在网页中不会被显示,在Java文件中也不会显示--%>
        <!-- 这是HTML注释,在网页源代码中会显示-->
        <p>
            今天日期是:<%=new Date()%>
        </p>
    </body>
</html>

4.3 JSP指令

JSP指令用来设置与整个JSP页面相关的属性

指令描述
<%@ page…%>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等
<%@ include…%>包含其他文件
<%@ taglib…%>引入标签库的定义。可以是自定义标签

4.3.1 page指令

(1)page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

(2)语法:<%@ page attribute1=“value1” attribute2=“value2” … %>

属性描述
contentType指定当前JSP页面的MIME类型和字符编码格式
errorPage指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面
impotr导入要使用的Java类
language定义JSP页面所用的脚本语言,默认是Java
session指定JSP页面是否使用session、默认为true立即创建,false为使用时创建
pageEncoding指定JSP页面的解码格式

4.3.2 include指定

(1)通过include指令来包含其他文件

(2)被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)

(3)语法:<%@ include file=“被包含的JSP路径” %>

(4)可能会有重名的冲突问题。不建议使用

<%@ include file="header.jsp"%>
......
......
<%@ include file="footer.jsp"%>

4.3.3 taglib指令

(1)引入JSP的标准签库

(2)语法:<%@taglib uri=“外部标签库路径” prefix=“前缀” %>

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

4.4 动作标签

(1)动作标签指的是JSP页面在运行期间的命令

(2)语法:<jsp:action_name attribute=“value” />

4.4.1 include

(1)<jsp:include>动作元素会将外部文件输出结果包含在JSP中(动态包含)

(2)语法:<jsp:include page=“相对URL地址” />

(3)前面介绍过的include指令,它是将外部文件的输出代码复制到当前JSP文件中。这里的jsp:include动作不同,是将外部文件的输出结果引入到当前的JSP文件中

属性描述
page包含在页面中的相对地址
<jsp:include page="index.jsp"/>

4.4.2 useBean

(1)jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean

(2)语法:<jsp:useBean id=“name” class=“package.className” />

(3)在类载入后,可以通过jsp:setProperty和jsp:getProperty动作来修改和获取bean的属性

<jsp:useBean id="user" class="com.cxyzxc.www.entity.User" />

4.4.3 setProperty

可以在jsp:useBean元素之后使用jsp:setProperty进行属性的赋值

属性描述
namename属性是必需的。它表示要设置属性的是哪个Bean
propertyproperty属性是必需的。它表示要设置哪个属性
valuevalue属性是可选的。该属性用来指定Bean属性的值
<jsp:useBean id="user" class="com.cxyzxc.www.entity.User" />
<jsp:setProperty name="user" property="name" value="zhangsan" />

4.4.4 getProperty

jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出

属性描述
name要检索的Bean属性名称、Bean必须已定义
property表示要提取Bean属性的值
<jsp:useBean id="user" class="com.cxyzxc.www.entity.User" />
<jsp:setProperty name="user" property="name" value="zhangsan" />
<jsp:getProperty name="user" property="name" />

4.4.5 forward

(1)jsp:forward动作把请求转到另外页面

(2)语法:<jsp:forward page=“相对URL地址” />

属性描述
pagepage属性包含的是一个相对URL
<jsp:forward page="index.jsp" />

4.4.6 param

(1)在转发动作内部使用,做参数传递

(2)语法:<jsp:param name=“” value=“” />

<jsp:forward page="index.jsp">
	<!-- http请求参数传递-->
	<jsp:param name="sex" value="nan" />
</jsp:forward>

4.5 内置对象

由JSP自动创建的对象,可以直接使用

对象名类型说明
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
sessionjavax.servlet.http.HttpSession由session="true"开关
applicationjavax.servlet.ServletContext
configjavax.servlet.ServletConfig
exceptionjava.lang.Throwable由isErrorPage="false"开关
outjavax.servlet.jsp.JspWriterjavax.servlet.jsp.JspWriter
pageContextjavax.servlet.jsp.PageContext
pagejava.lang.Object当前对象this当前servlet实例

4.5.1 四大域对象

JSP有4大作用域对象,存储数据和获取数据的方式一样,不同的是取值的范围有差别。

  • pageContext(javax.servlet.jsp.PageContext)当前JSP页面范围
  • request(javax.servlet.http.HttpServletRequest)一次请求有效
  • session(javax.servlet.http.HttpSession)一次会话有效(关闭浏览器失效)
  • application(javax.servlet.ServletContext)整个Web应用有效(服务器重启或关闭失效)

4.5.2 pageContext对象

  • pageContext对象是javax.servlet.jsp.PageContext类的实例,拥有作用域,用来代表整个JSP页面。
  • 当前页面的作用于对象,一旦跳转则失效
  • 通过setAttribute(“name”,value);存储值
  • 通过getAttribute(“name”);获取值
  • 用于获取其它8个内置对象或者操作其它对象的作用域
<%
	pageContext.setAttribute("name",value);//当前页面作用域有效
%>

4.5.3 pageContext获取其它内置对象

<%
	pageContext.getRequest();//返回request内置对象
	pageContext.getResponse();//返回response内置对象
	pageContext.getServletConfig();//返回config内置对象
	pageContext.getException();//返回exception内置对象
	pageContext.getPage();//返回page内置对象
	pageContext.getOut();//返回out内置对象
	pageContext.getServletContext();//返回application内置对象
	pageContext.getSession();//返回session内置对象
%>

4.5.4 pageContext操作其它内置对象的作用域

pageContext对象可以操作其它作用域存储和获取

<%
	//操作其他作用域存储数据
	pageContext.setAttribute("name",value);//当前页面有效
	pageContext.setAttribute("name",value,PageContext.REQUEST_SCOPE);//request作用域
	pageContext.setAttribute("name",value,PageContext.SESSION_SCOPE);//session作用域
	pageContext.setAttribute("name",value,PageContext.APPLICATION_SCOPE);//application作用域
%>

<%
	//操作其他作用域获取
	pageContext.getAttribute("name");//当前页面作用域
	pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//request作用域
	pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//session作用域
	pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);//application作用域
	pageContext.findAttribute("name");//从pageContext、request、session、application依次查找
%>

4.6 整合

将EmpProject项目所有显示页面JSP的Servlet替换为JSP页面,使用脚本进行显示


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

shell第七天作业——awk(上)

题目 1、获取根分区剩余大小 2、获取当前机器ip地址 3、统计出apache的/var/log/httpd/access_log文件中访问量最多的前3个IP 4、打印/etc/passwd中UID大于500的用户名和uid 5、/etc/passwd 中匹配包含root或sys或tcp的任意行 6、请打印出/etc/passwd 第一个域&#xff0…

STM32MP157驱动开发——Regmap API

STM32MP157驱动开发——Regmap API0.前言一、Regmap API 简介1.Regmap 驱动框架2.regmap 结构体3.regmap_config 结构体4.Regmap 操作函数①Regmap 申请与初始化②Regmap释放③regmap 设备访问 API 函数5. regmap_config 掩码设置二、驱动开发1.修改设备结构体&#xff0c;添加…

RxJava VS kotlin flow

1.基础概念介绍 1.1 观察者模式 观察者模式&#xff0c;其实对于Android开发者而言&#xff0c;并不陌生&#xff0c;button的setOnClickListener&#xff0c;就是一个典型的观察者模式。控件button是被观察者&#xff0c;它产生一个事件(点击)&#xff0c;观察者OnClickList…

量化策略——准备2 量化技能树量化术语

文章目录量化技能树量化/金融术语1. 俗语2. 持仓术语3. 资金术语4. 策略术语5. 股票软件界面实用术语量化必然用到的核心价格数据其他数据/指标含义6. 委托单术语量化技能树 首先&#xff0c;量化金融&#xff08;Quantitative Finance&#xff0c;简称“量化”&#xff0c;Qu…

《小猫猫大课堂》三轮1——深度解析数据在内存中的存储

宝子&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重…

学习网络协议

概述 先从知乎盗个图&#xff1a;怎么开始学习网络协议&#xff1f; - 知乎 1、应用层 作用&#xff1a;定义数据格式并按照对应的格式解读数据。 2、传输层 作用&#xff1a;定义端口&#xff0c;标识应用程序身份&#xff0c;实现端口到端口的通信。 3、网络层 作用&…

5个技巧提高项目领导技能

作为项目经理&#xff0c;一个典型的工作日涉及处理许多任务。监督不同的时间表和里程碑。解决问题&#xff0c;主动解决瓶颈。 这些后勤工作很重要&#xff0c;但您也知道成功的项目管理比协调这些细节要多得多。为了做好你的工作&#xff08;并且把它做好&#xff09;&am…

C语言模拟QT的信号与槽功能

文章目录前言一、Qt信号与槽的实现机理二、简化后的实现步骤1. 定义一些必要的宏2. 实现声明信号的宏3. 实现发射信号的宏4. 取代QObject类5. 实现connect函数6. 可有可无的slots三、完整的代码实现四、使用方法与QT中的区别1. SIG_SLOT_OBJ取代QObject2. 定义信号不同3. 发射信…

【NI Multisim 14.0原理图环境设置——原理图的组成】

目录 序言 一、原理图的组成 &#x1f46c; 1. 元器件 &#x1f46c;2. 仪表 &#x1f46c;3.导线 &#x1f46c;4.丝印层 &#x1f46c;5. 端口 &#x1f46c;6.网络标号 &#x1f46c;7.电源符号 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设…

为iframe正名,你可能并不需要微前端

作者&#xff1a;刘显安(码怪) 任何新技术、新产品都是有一定适用场景的&#xff0c;它可能在当下很流行&#xff0c;但它不一定在任何时候都是最优解。 前言 最近几年微前端很火&#xff0c;火到有时候项目里面用到了iframe还要偷偷摸摸地藏起来生怕被别人知道了&#xff0c;…

Linux学习笔记——Tomcat安装部署

5.2、Tomcat安装部署 5.2.1、简介 Tomcat是由Apache开发的一个Servlet容器&#xff0c;实现了对Servlet和JSP的支持&#xff0c;并提供了作为Web服务器的一些特有功能&#xff0c;如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说&#xff0c;Tomcat是一个WEB应用…

内核解读之内存管理(3)内存管理三级架构之内存区域zone

文章目录1、zone类型2、zone结构体3、zone的初始化流程1、zone类型 NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对于任何一个CPU访问本地内存的速度比访问远程内存的速度要快, 而Linux为了兼容NUMA结构, 把物理内存…

Flink数据流类型之间的转换(WindowedStream、DataStream、KeyedStream、AllWindowStream之间的转换)

Flink提供了一些流API&#xff0c;其中包括WindowedStream、DataStream、KeyedStream和AllWindowStream。 &#x1f34a;WindowedStream是一种特殊的流&#xff0c;其中数据已按时间或数据元素的键进行分组&#xff0c;并且每个分组的数据都在窗口中按时间划分。这意味着&…

2023年出入境政策-喜忧参半

2023年已经到来&#xff0c;随着卫健委公布中国防控新冠措施调整优化以后&#xff0c;出入境政策相应也有了很大变化&#xff0c;知识人网小编概括为喜忧参半。喜的是从国外入境中国不再需要集中隔离&#xff1b;忧的是有些国家对于中国人入境增加了核酸检测要求。下面我们就这…

第一章 Java入门开发

第一章 Java入门开发 目录一&#xff0e; 概述二&#xff0e; JDK1. 概述2. 安装3. JDK目录一&#xff0e; 概述 Java是一门高级程序设计语言&#xff0c;是支持跨平台和完成面向对象的程序设计语言。针对不同的开发市场&#xff0c;sun公司将Java分为Java SE&#xff08;标准版…

关于clip通信架构设计的调研

网络上大部分关于clip-as-service的描述都是关于它如何使用&#xff0c;基于它的编码功能上去计算文本相似度&#xff0c;根据文字推荐图片等等&#xff0c;只有作者的创作思路里面提及通信架构的设计。 作者博客&#xff1a; 链接: link 如何解决多个客户端同时请求服务端的场…

STS4中MVC项目中把log4j从1.x升级到2.x中遇到的两个问题

文章目录问题一 升级后看Maven Dependencies中还是有依赖1.x的log4j问题二 web.xml配置不对项目原来的log4j版本是1.2.14&#xff0c;有漏洞需要升级到2.18.0.问题一 升级后看Maven Dependencies中还是有依赖1.x的log4j 原因是有关联依赖&#xff0c; 项目中别的jar库有依赖低…

【算法笔记】【专题】RMQ 问题:ST表/树状数组/线段树

0. 前言 好久没更算法笔记专栏了&#xff0c;正好学了新算法来更新…… 这也是本专栏的第一个专题问题&#xff0c;涉及到三种数据结构&#xff0c;如果写得有问题请各位大佬多多指教&#xff0c;谢谢&#xff01; 1. 关于 RMQ 问题 RMQ 的全称是 Range Minimum/Maximum Que…

《Linux运维实战:Centos7.6基于docker-compose一键离线部署单节点redis6.2.8 》

一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&#xff0c;而作为基础组件中的redis针对不同的客户环境需要多次部署&#xff0c;作为一个运维工程师&#xff0c;提升工作效率也是工作中的重要一环。所以我觉得有必要针对redis6.2.8…

使用 .NET 标记游戏地图关键坐标点

本文以天涯明月刀 OL 游戏的云上之城探索玩法为例&#xff0c;介绍如何使用 .NET 在游戏地图中标记大量关键坐标点。 1. 背景 大概很多程序员都是喜欢玩游戏的吧&#xff0c;我也不例外。我们经常会看到电视剧中的各路游戏大神&#xff0c;要么是有只有他一个人会的骚操作&…