JavaWeb05-JSP

news2024/11/15 8:20:54

目录

一、JSP

1.概述

2.主要作用

3.快速入门

4.JSP原理

5.JSP脚本

(1)主要分类

6.JSP使用

7.JSP缺点

8.EL表达式

(1)概述

(2)主要功能

(3)使用

(4)JavaWeb中的四大域对象

9.JSTL

(1)快速入门


一、JSP

了解即可,jsp还有用的吗~

1.概述

Java Server Pages,Java服务端页面

一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容

JSP = HTML + Java

2.主要作用

简化开发,避免了在Servet中直接输出HTML标签

3.快速入门

  • 导入JSP坐标

  • 创建JSP文件

  • 编写html和java代码

 <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
<!--            与Servlet一样,Tomcat封装了jsp的jar包-->
            <scope>provided</scope>
        </dependency>

Java代码需要加上<%java代码%>

4.JSP原理

JSP本质上是一个Servlet

5.JSP脚本

JSP脚本用于在 JSP页面内定义Java代码

(1)主要分类
  • <%..%>:内容会直接放到 _jspService()方法之中

  • <%=...%>:内容会放到out.print()中,作为out.print()的参数

  • <%!..%>:内容会放到_jspService()方法之外,被类直接包含

6.JSP使用

展示用户信息

体验并不好~

<%@ page import="com.util.SqlSessionFactoryUtils" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="com.mapper.UserMapper" %>
<%@ page import="com.pojo.User" %>
<%@ page import="java.util.List" %>
​
<%
    final SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
    final SqlSession sqlSession = sqlSessionFactory.openSession();
    final UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    final List<User> users = mapper.selectAll();
    sqlSession.close();
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>hello JSP</h1>
​
    <table border="1px solid black">
        <tr>
            <th>用户id</th>
            <th>用户名</th>
            <th>邮箱</th>
        </tr>
        <%
            for (int i = 0; i < users.size(); i++) {
                final User user = users.get(i);
        %>
        <tr>
            <td><%= user.getId()%></td>
            <td><%= user.getUsername()%></td>
            <td><%= user.getPassword()%></td>
        </tr>
        <%
            }
        %>
    </table>
​
</body>
</html>

测试:

7.JSP缺点

由于 JSP页面内,既可以定义 HTML标签,又可以定义Java代码,造成了以下问题

  • 书写麻烦:特别是复杂的页面

  • 阅读麻烦

  • 复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE.

  • 占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存调试困难:出错后,需要找到自动生成的.java文件进行调试不利于团队协作:

  • 前端人员不会 Java,后端人员不精 HTML

  • ...

所以淘汰是必然的,但是得知道,史前老项目还有用的~

8.EL表达式

(1)概述

Expression Language 表达式语言,用于简化JSP页面内的Java代码

(2)主要功能

获取数据

//获取域中存储的key为expression的数据
${expression(表达式)}
(3)使用
  • 先写一个html,发送请求

<form action="/getInfo" method="post">
  <input type="submit" value="查询用户数据">
</form>
  • 创建一个GetInfoServlet

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取数据
        final SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
        final SqlSession sqlSession = sqlSessionFactory.openSession();
        final UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        final List<User> users = mapper.selectAll();
        sqlSession.close();
        //将数据存到Request域中
        request.setAttribute("info",users);
        //请求转发
        request.getRequestDispatcher("/el.jsp").forward(request,response);
    }
  • 创建一个el.jsp

${info}
<%--下方可选,获取数据--%>
<%
    final Object info = request.getAttribute("info");
    System.out.println(info.toString());
%>

测试:

可能会出现的问题:

${info}会原样输出,如下图:

解决:

参考这个,不写了

el表达式不生效(原样输出问题不被解析)问题的解决办法 - yanggb - 博客园 (cnblogs.com)

(4)JavaWeb中的四大域对象
  • page:当前页面有效

  • request:当前请求有效

  • session:当前会话有效

  • application:当前应用有效

el表达式获取数据,会依次从这4个域中寻找,直到找到为止

9.JSTL

JSP标准标签库(sp Standarded Tag Library),使用标签取代JSP页面上的Java代码

(1)快速入门
  • 导入坐标

  • 在jsp页面上引入JSTL标签库

 <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
​
        <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

jsp:

<%--
逻辑判读
test属性:必须,值为逻辑表达式
--%>
​
<c:if test="${info != null }">
    <h1>有值</h1>
    <%--
    item:需要遍历的容器
    var:临时变量
    与foreach一样
    --%>
    <table border="1px solid black">
        <tr>
            <th>序号</th>
            <th>ID</th>
            <th>用户名</th>
            <th>邮箱</th>
        </tr>
​
        <c:forEach items="${info}" var="user" varStatus="status">
            <tr>
                    <%--                index从0开始,count从1开始--%>
                <td>${status.count}</td>
                    <%--                ${user.id} => Id => getId()--%>
                <td>${user.id}</td>
                <td>${user.username}</td>
                <td>${user.email}</td>
            </tr>
        </c:forEach>
    </table>
    <%--
    begin:开始数
    end:结束数
    step:步长
    var:循环变量
    --%>
    <c:forEach begin="1" end="10" step="1" var="i">
        <a href="">${i}</a>
    </c:forEach>
​
</c:if>
<c:if test="${info ==null }">
    <h1>无值</h1>
</c:if>

更多自行查阅吧

标准标签库:

JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)

JSP 表达式语言_w3cschool

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

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

相关文章

Java中JDK定时任务

Java中JDK定时任务 一、JDK自带Timer1.Timer核心方法&#xff08;1&#xff09;schedule与scheduleAtFixedRate区别schedule侧重保持间隔时间的稳定scheduleAtFixedRate保持执行频率的稳定 2.java.util.TimerTask&#xff08;1&#xff09;TimerTask核心方法 3.Timer的缺陷4.Ti…

内部审计2.0时代:数字化工具和方法全面升级

文章目录 一、内部审计的发展阶段二、内部审计的逻辑架构三、内部审计数字化转型面临的问题&#xff08;1&#xff09;缺少内部审计数字化转型规划和方案&#xff08;2&#xff09;非结构化数据的采集和后续利用不足&#xff08;3&#xff09;依赖编程或使用新工具的数据分析能…

MySQL分析sql语句的性能瓶颈的几种方式介绍

在 MySQL 中&#xff0c;性能瓶颈可能会导致数据库系统运行缓慢&#xff0c;影响用户体验。为了确保数据库的性能&#xff0c;识别和解决性能瓶颈是非常重要的。以下是一些常用的方法来分析 SQL 语句的性能瓶颈&#xff1a; 1. EXPLAIN 语句 EXPLAIN 是一个强大的工具&#xff…

发布DDD脚手架到Maven仓库,IntelliJ IDEA 配置一下即可使用

这篇文章将帮助粉丝伙伴们更高效地利用小傅哥构建的DDD&#xff08;领域驱动设计&#xff09;脚手架&#xff0c;搭建工程项目&#xff0c;增强使用的便捷性。让&#x1f46c;&#x1f3fb;兄弟们直接在 IntelliJ IDEA 配置个在线的链接&#xff0c;就能直接用上这款脚手架&…

day1-C++

1>提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成。 代码&#xff1a; #include <iostream> #include <string.h> using namespace std;int main() {string str ;int low 0, …

在funtion中用分号间隔还是逗号间隔

问: 回答: 这段代码是一个Vue组件方法的实现&#xff0c;名为resetForm。该方法的主要作用是关闭一个对话框&#xff08;通过设置this.dialogFormVisible false&#xff09;&#xff0c;重置表单字段&#xff08;使用this.$refs[formName].resetFields();&#xff09;&#x…

ROS机器人程序设计课程进度安排-2023-2024-2

进度安排由人工智能审核制定。 课程 教学进度表预期效果与课程内容详细描述 一、预期效果 此教学进度表旨在确保《ROS机器人程序设计》课程在2023&#xff5e;2024学年度第二学期内&#xff0c;按照预定的教学计划和进度&#xff0c;有序、高效地进行。通过本课程的教学&…

容器(0)-DOCKERFILE-安装-常用命令-部署-迁移备份-仓库

1.安装 启动 systemclt start docker //启动 systemctl status docker //状态 docker info systemclt stop docker systemctl status docker systemctl enable docker //开机启动 2.常用命令 镜像查看 docker images 镜像查看 docker status 镜像拉取 docker pull centos:…

【Spring】idea连接mysql数据库

1 MySQL安装 下载地址&#xff1a;https://dev.mysql.com/downloads/installer/ 安装server only选项&#xff0c;之后的可以选择默认安装选项 2 MySQL登录并创建数据 -- 创建数据库 create databases spring_db; use spring_db; -- 创建表 create table users (id INT AUTO…

学习大数据,所需要Java基础(9)

文章目录 网络编程实现简答客户端和服务器端的交互编写客户端编写服务端 文件上传文件上传客户端以及服务器端实现文件上传服务器端实现&#xff08;多线程&#xff09;文件上传服务器端&#xff08;连接池版本&#xff09;关闭资源工具类 BS架构服务器案例案例分析BS结构服务器…

网络请求与数据解析

urllib是Python自带的标准库中用于网络请求的库 &#xff0c;无需安装&#xff0c;直接引用即可。通常用于爬虫开发、API&#xff08;应用程序编程接口&#xff09;数据获取和测试。 urllib库的几个模块&#xff1a; urllib.request :用于打开和读取URLurllib.error:包含提出…

Jenkins插件Parameterized Scheduler用法

Jenkins定时触发构建的同时设定参数。可以根据不同的定时构建器设置不同参数或环境变量的值。可以设置多个参数。并结合when控制stage流程的执行。结合when和triggeredBy区分定时构建的stage和手动执行的stage。 目录 什么是Parameterized Scheduler&#xff1f;如何配置实现呢…

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

需要准备材料&#xff1a;Origin、PL Decay数据txt文件 首先打开Origin画图软件 导入数据&#xff0c;按照下图箭头操作直接导入 双击你要导入的PL Decay的txt数据文件&#xff0c;然后点OK 继续点OK 数据导入后首先删除最大光子数之前的无效数据&#xff0c;分析的时候用…

react中的useEffect的使用

目录 React的useEffect深度解析与实战应用 一、useEffect的基本使用 二、useEffect的依赖项数组 三、避免无限循环 四、使用清空函数进行清理 React的useEffect深度解析与实战应用 React Hooks 是 React 16.8 版本引入的新特性&#xff0c;它允许我们在不编写 class 的情况…

AHU 汇编 实验二

一、实验名称&#xff1a;实验二 不同寻址方式的灵活运用 二、实验内容&#xff1a;定义数组a[6]&#xff0c;用多种寻址方式访问对应元素&#xff0c;实现&#xff08;a[0]a[1]&#xff09;*(a[2]-a[3])/a[4],将结果保存在内存a[5]中&#xff0c;用debug查询结果。 实验过程&a…

盘点 gma 中为 栅格数据 设计的切片操作

数据切片是 Python 中非常实用的方法&#xff0c;Numpy、Pandas 等第三方库的切片操作为数据处理提供了不少便利。如果能对栅格/矢量数据进行切片&#xff0c;那会使地理数据处理也变得方便和快捷。 基于此&#xff0c;自 gma 2.0.6.10 开始&#xff0c;gma 针对 打开的栅格数据…

【使用postman测试python接口】

打开python服务 设置postman如下&#xff0c;并发送&#xff1a; postman新建请求设置请求方式为post设置地址、raw、json方式、内容如下 结果&#xff1a; python如下&#xff1a; from flask import Flask, request, jsonifyapp Flask(__name__) # 实例化对象app.route…

酷开科技智慧AI助力酷开系统千屏千面

每台智能电视都有一个专属的操作系统&#xff0c;而酷开系统作为一款基于人工智能技术的智能电视操作系统&#xff0c;深受大众喜爱&#xff0c;其最大的特点就是“千屏千面”。这意味着每一位消费者在使用酷开系统时&#xff0c;通过酷开科技的智慧AI&#xff0c;都能根据自己…

SpringSecurity原理简述

文章目录 0. 简介1. 快速入门1.1 准备工作1.2 引入SpringSecurity 2. 认证2.1 登陆校验流程2.2 原理初探2.2.1 SpringSecurity完整流程2.2.2 认证流程详解 2.3 解决问题2.3.1 思路分析2.3.2 准备工作2.3.3 实现2.3.3.1 数据库校验用户准备工作核心代码实现 2.3.3.2 密码加密存储…

Java this 关键字

**1.上节课学习了Java对象的定义和使用&#xff0c;我们知道了对象是存在堆内存中的&#xff0c;Java要求程序员不能直接操作堆内存&#xff0c;因此出现了引用的概念。引用的实质是一个存放对象地址的局部变量。 定义一个对象的语法&#xff1a; **Student s1 new Student();…