JavaWeb 速通JSP

news2024/12/28 10:27:10

目录

一、JSP快速入门

        1.基本介绍 : 

        2.运行原理 : 

二、JSP语法

        1.page指令 : 

        2.声明脚本 : 

        3.表达式脚本 : 

        4.Java代码脚本 : 

        5.JSP注释 : 

三、JSP对象

        1.九大内置对象 : 

        2.四大域对象 : 

            1° 基本介绍

            2° 应用实例

        3.关于请求转发标签 : 


一、JSP快速入门

        1.基本介绍 : 

        (1) JSP 全称Java Server Pages,即Java服务器页面;JSP是一种基于Servlet的服务器渲染技术,可以理解为JSP就是对Servlet的包装

        (2) HTML只能为用户提供静态数据,而JSP允许在页面中嵌套 java代码,为用户提供动态数据注意:JSP页面不能像HTML页面一样直接通过浏览器运行, 而必须先启动Tomcat,再通过浏览器地址栏的URL进行访问
        (3) Servlet很难对数据进行排版,而JSP在用Java代码产生动态数据的同时,也很容易对数据进行排版

        2.运行原理 : 

        (1) JSP页面本质是一个Servlet程序(即本质就是Java程序),性能与Java关联。

        (2) 第一次访问JSP时,Tomcat服务器会把JSP页面先解析成.java的源文件,并进一步编译成.class的字节码文件,实际执行的就是.class字节码程序。eg : index.jsp ---> index_jsp.java 和 index_jsp.class。

                如下图所示 : 


二、JSP语法

        1.page指令 : 

        language 表示JSP解析后是什么语言文件, 目前只支持java语言。
        contentType 表示JSP返回的数据类型,对应源码中 response.setContentType()中的参数值。
        3° pageEncoding 属性,表示当前JSP页面文件本身的字符集。
        import 属性的使用与java源代码中类似,可用于导包,导类。

        2.声明脚本 : 

        声明脚本的格式是 : <%! java声明 %>可以用Java代码在声明脚本中定义JSP需要的属性、方法、静态代码块和内部类等,即给该JSP文件对应的java类定义成员

        demo.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP demo</title>
</head>
<body>
    <h1>demo.jsp</h1>
    <%!
        private String name;
        private int age;
        private String gender;
        private static String color;

        public String getName() {
            return this.name;
        }
        public int getAge() {
            return this.age;
        }
        public String getGender() {
            return this.gender;
        }
        static {
            color = "Cyan";
        }
    %>
</body>
</html>

        对应生成的.java文件如下图所示 : 

        3.表达式脚本 : 

        (1) 表达式脚本的格式是:<%=表达式%>
        (2) 表达式脚本的作用是:在JSP页面上输出数据
        (3) 表达式脚本的注意事项 : 表达式不能以分号结束

        expression.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Expression</title>
</head>
<body>
    <%
        String name = "Cyan_RA9";
    %>
    public : <%=141 + 130%> <br/>
    name : <%=name%> <br/>
    job : <%="Java Full Stack Developer"%>
</body>
</html>

        运行效果 : 

        4.Java代码脚本 : 

        代码脚本的语法格式 :<% java 代码%>
        代码脚本的作用 : 在JSP页面中使用Java代码完成业务需求。
        可以由多个代码脚本块组合成一个完整的Java语句,即允许有多个Java代码脚本
        代码脚本还可以和表达式脚本一起组合使用,在JSP页面上输出数据。

        首先定义一个JavaBean类,Student类代码如下 : 

package script;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
public class Student {
    private String name;
    private int age;
    private String gender;
    
    public Student() {
    }
    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

                在javacode.jsp页面中,利用List集合存入几个Student对象的信息。
                javacode.jsp代码如下 : 

\<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="script.Student" %> <%--自动导包--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Java Code script</title>
</head>
<body>
    <%
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("Cyan", 21, "male"));
        students.add(new Student("Five", 22, "female"));
        students.add(new Student("Ice", 20, "male"));
    %>
    <table bgcolor="#e0ffff" border="2px" bordercolor="pink" cellspacing="0" width="300px">
        <tr>
            <th>Name</th>
            <th>Age</th>
            <th>Gender</th>
        </tr>
    <%
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
    %>
        <tr>
            <td><%=student.getName()%></td>
            <td><%=student.getAge()%></td>
            <td><%=student.getGender()%></td>
        </tr>
    <%
        }
    %>
    </table>
</body>
</html>

        运行结果 : 

        5.JSP注释 : 

        JSP中不仅支持HTML格式的注释,还支持自己特有的注释格式 :  <%-- --%>

        此外,在JSP的Java代码脚本中,也可以使用Java的行注释和段注释。

        note.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Note demo</title>
</head>
<body>
<!-- 这是HTML格式的注释√ -->
<%
    //这是Java代码的行注释;
    /*
        这是Java代码的段注释。
     */
%>
<%-- 这是JSP特有的注释格式√ --%>
</body>
</html>

三、JSP对象

        1.九大内置对象 : 

        1> JSP 内置对象(指已经创建好的对象, 可以直接使用[inbuild]),即Tomcat在解析JSP页面为Servlet 后,内部提供的九大对象,叫内置对象。
        2> 内置对象可以直接使用,不需要手动定义。

        3> 九大内置对象如下——

                ① out 向客户端输出数据,out.println("");
                ② request 处理来自客户端的HTTP请求
                ③ response 与回送的HTTP响应相关
                ④ session 会话对象
                ⑤ application 对应 ServletContext
                ⑥ pageContext JSP页面的上下文,是一个域对象,可以使用setAttribue()方法,但 作用范围只是本页面
                ⑦ exception 异常对象 , getMessage()
                ⑧ page 代表JSP 这个实例本身
                ⑨ config 对应 ServletConfig
        4> 九大内置对象与Servlet的关系图——

        2.四大域对象 : 

            1° 基本介绍

        1> pageContext域对象,存放的数据只能在当前页面使用。

        2> request域对象,存放的数据在一次Request请求中有效(eg : 请求转发)。

        3> session域对象,存放的数据在一次会话有效(sessionId)。

        4> application域对象,存放的数据在整个Web应用运行期间有效, 范围更大。

        作用域 : pageContext < request < session < application.

            2° 应用实例

                scope.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Scope</title>
</head>
<body>
<%-- 由于四个域对象是不同的对象,因此允许出现相同的name。 --%>
<%
    pageContext.setAttribute("color", "cyan");
    request.setAttribute("color", "pink");
    session.setAttribute("color", "cornflower");
    application.setAttribute("color", "lightblue");

    //请求转发
//    RequestDispatcher requestDispatcher = request.getRequestDispatcher("scope2.jsp");
//    requestDispatcher.forward(request, response);

    //请求重定向
    ServletContext servletContext = config.getServletContext();
    String contextPath = servletContext.getContextPath();
    response.sendRedirect(contextPath + "/scope2.jsp");
%>
<h1>四个域对象,在本页面获取数据的情况</h1>
pageContext-color : <%=pageContext.getAttribute("color")%>  <br/>
request-color : <%=request.getAttribute("color")%> <br/>
session-color : <%=session.getAttribute("color")%> <br/>
application-color : <%=application.getAttribute("color")%> <hr/>
</body>
</html>

                运行效果 : (本页面访问域对象)

                scope2.jsp代码如下 : (外页面访问域对象)

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>scope2</title>
</head>
<body>
<h1>在scope2页面获取数据的情况:</h1>
pageContext-color : <%=pageContext.getAttribute("color")%>  <br/>
request-color : <%=request.getAttribute("color")%> <br/>
session-color : <%=session.getAttribute("color")%> <br/>
application-color : <%=application.getAttribute("color")%> <hr/>
</body>
</html>

                运行效果 : (scope请求转发

                运行效果:(scope请求重定向

        3.关于请求转发标签 : 

        <jsp:forward page="URL"></jsp:forward>

        注意 : 1> 此处的URL是在服务器端解析的。

                   2> 请求转发标签常用于一个入口页面,转发到其他功能资源。

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

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

相关文章

用友-NC-Cloud远程代码执行漏洞[2023-HW]

用友-NC-Cloud远程代码执行漏洞[2023-HW] 一、漏洞介绍二、资产搜索三、漏洞复现PoC小龙POC检测脚本: 四、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#…

KafkaStream:Springboot中集成

1、在kafka-demo中创建配置类 配置kafka参数 package com.heima.kafkademo.config;import lombok.Data; import org.apache.kafka.common.serialization.Serdes; import org.apache.kafka.streams.StreamsConfig; import org.springframework.boot.context.properties.Configu…

基于grpc从零开始搭建一个准生产分布式应用(2) - 工程构建

开始本章之前默认读者已经配置好了以下环境&#xff1a;Intellij IDEA 2022.1.2、JDK 1.8.0_144、Maven 3&#xff0c;另外也建议大家在一些免费代码托管平台开个帐号&#xff0c;这样就可以免费使用git做版本处理了&#xff0c;笔者自己私人使用的是阿里云的云效平台。因为此专…

【Lua基础入门】解密世界上最快的脚本语言

文章目录 前言一、Lua简介二、Lua功能三、安装LuaUbuntu LinuxWindows安装Lua 四、第一个Lua程序总结 前言 Lua是一种轻量级、快速且可嵌入的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统、脚本扩展等领域。它的设计目标是简单、高效、可定制和易于集成。本文将介绍Lu…

射频入门知识-1

信号源 示波器 综合测试仪 功率计 噪声测试仪 频谱分析仪 频谱分析仪: 放大器的噪声系数测试 放大器增益测试 噪声和增益是放大器的最关键指标&#xff0c;学学怎么用频谱仪做放大器的噪声测试 那个 hbf740 输入和输出阻抗匹配具体怎么搞 《ADS2011射频电路设计与…

iOS Epub阅读器改造记录

六个月前在这个YHEpubDemo阅读器的基础上做了一些优化&#xff0c;这里做一下记录。 1.首行缩进修复 由于分页的存在&#xff0c;新的一页的首行可能是新的一行&#xff0c;则应该缩进&#xff1b;也可能是前面一页段落的延续&#xff0c;这时候不应该缩进。YHEpubDemo基于XDS…

Cenos7 搭建Minio集群部署服务器(一)

------> 道 | 法 | 术 | 器 | 势 <------ 多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) 企业级开源对象存储(看看官网吹的牛B) 开源为云提供动力。开源为企业提供动力。开源为 MinIO 提供支持。每天都有成千上万的客户和社区成员信任 Mi…

Spring Boot @Validated 验证注解的使用

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非对象参数 参数如果是非对象格式&#xff0c;需要在controller类上面添…

cf暑假训练 1700-1800 day1

cf暑假训练 1700-1800 day1 1852B Imbalanced Arrays1850H. The Third Letter1833G Ksyusha and Chinchilla1833F Ira and Flamenco&#xff08;补完线段树来看&#xff09;1809D Binary String Sorting1780D Bit Guessing Game&#xff08;这题真的好难&#xff0c;我只能说我…

yolov5、YOLOv7、YOLOv8改进:注意力机制CA

论文题目&#xff1a;《Coordinate Attention for Efficient Mobile NetWork Design》论文地址&#xff1a; https://arxiv.org/pdf/2103.02907.pdf 本文中&#xff0c;作者通过将位置信息嵌入到通道注意力中提出了一种新颖的移动网络注意力机制&#xff0c;将其称为“Coordin…

msvcp120.dll丢失的解决方法?分享三种常见解决方法

msvcp120.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C Redistributable包中的一个组成部分。它是用于支持C编程语言的运行时库文件之一。它包含了许多标准库函数、容器类、算法和其他与C语言相关的功能。这些功能包括内存管理、字符串处理、数学计算、文件操作…

每日一题 206反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; …

浅谈XML配置实现逻辑

XML简介 什么是XML&#xff1f; xml是可扩展的标记语言 XML的作用 主要作用&#xff1a; 1.用来保存数据&#xff0c;而且这些数据具有自我描述性 2.他可以作为项目或者模块的配置文件 3.还可以作为网络传输数据的格式&#xff08;现在JSON为主&#xff09; 第一个实例 命…

计算机组成原理-笔记-汇总

&#x1f4da; 前言 本人在备考408&#xff0c;王道讲得的确不错&#xff0c;本人之前也看过哈工大【刘宏伟老师】的课&#xff0c;两者对比下来。 王道——更加基础&#xff0c;对小白更加友好哈工大——偏实践偏硬件&#xff08;会将更多的代码硬件设计&#xff09; PS&#…

SpringBoot2-Tomcat部署

1.排除内置 Tomcat 在pom.xml文件中的下添加以下代码&#xff0c;用于排除SpringBoot内置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion&…

什么是CSS中的渐变(gradient)?如何使用CSS创建线性渐变和径向渐变?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 渐变&#xff08;Gradient&#xff09;在CSS中的应用⭐ 线性渐变&#xff08;Linear Gradient&#xff09;语法&#xff1a;示例&#xff1a; ⭐ 径向渐变&#xff08;Radial Gradient&#xff09;语法&#xff1a;示例&#xff1a; ⭐ 写…

Kotlin和Java互操作时的可空性

注&#xff1a;文中demo的kt版本是1.7.10 一、kotlin语言中的可空性设计 在Java语言中的NPE&#xff08;NullPointerException&#xff09;可以说非常常见&#xff0c;而且诟病已久。 kotlin做为后起之秀&#xff0c;在空指针的问题上进行了升级&#xff0c;即&#xff1…

day9 10-牛客67道剑指offer-JZ66、19、20、75、23、76、8、28、77、78

文章目录 1. JZ66 构建乘积数组暴力解法双向遍历 2. JZ19 正则表达式匹配3. JZ20 表示数值的字符串有限状态机遍历 4. JZ75 字符流中第一个不重复的字符5. JZ23 链表中环的入口结点快慢指针哈希表 6. JZ76 删除链表中重复的结点快慢指针三指针如果只保留一个重复结点 7. JZ8 二…

HttpRunner自动化工具之设置代理和请求证书验证

httprunner设置代理&#xff1a; httprunner 库本身没有提供设置代理的接口&#xff0c;但是底层使用了urllib.requests 等库&#xff0c;可以设置HTTP_PROXY 和HTTPS_PROXY 环境变量&#xff0c;常用的网络库会自动识别这些环境变量。 日常调试使用代理&#xff08;如charles…

SQL-每日一题【】

题目 Employees 表&#xff1a; EmployeeUNI 表&#xff1a; 展示每位用户的 唯一标识码&#xff08;unique ID &#xff09;&#xff1b;如果某位员工没有唯一标识码&#xff0c;使用 null 填充即可。 你可以以 任意 顺序返回结果表。 返回结果的格式如下例所示。 示例 1&a…