javaweb10 JSP语法、JSTL、EL表达式、JSP标签、九大内置对象

news2024/12/22 20:38:40

文章目录

      • 一、JSP简介
      • 二、JSP原理
      • 三、JSP语法
      • 四、JSP指令
      • 五、九大内置对象
      • 六、EL表达式
      • 七、JSP标签
      • 八、JSTL标签

一、JSP简介

JSP(java sever pages):java服务器端页面,和servlet一样,用于动态web技术
写JSP就像在写HTML,但是HTML只给用户提供静态的数据,JSP页面可以嵌入java代码,为用户提供动态数据

二、JSP原理

服务器内部工作区:
tomcat中的work目录
IDEA中使用tomcat会在IDEA的tomcat中创建一个work目录

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问servlet
JSP最终也会被转换为一个java类

//初始化
  public void _jspInit() {
  }
//销毁
  public void _jspDestroy() {
  }
//JSPService
  public void _jspService(HttpServletRequest request,HttpServletResponse response)

流程:
1、判断请求
2、内置了一些对象

    final javax.servlet.jsp.PageContext pageContext;//页面上下文
    javax.servlet.jsp.HttpSession session;//session
    final javax.servlet.ServletContext application;//applicationContext
    final javax.servlet.ServletConfig config;//config配置
    javax.servlet.jsp.JspWriter out = null;//out输出对象
    final java.lang.Object page = this;//page代表当前页
    HttpServletRequest request//请求对象
    HttpServletResponse response//响应对象

3、输出页面前增加的代码
4、以上这些对象我们可以在JSP中直接使用

JSP页面先是转换为java文件,然后编译成class对象,返回给服务器
用户真正拿到的就是服务器处理完毕的class对象,实质上就是Servlet

三、JSP语法

在JSP中写java代码,需要<%%>
在JSP页面中,只要是java代码就原封不动出现,html代码则出现在out.write(xxx)中

<%--
  Created by IntelliJ IDEA.
  User: KerwinWan
  Date: 2023/1/14
  Time: 1:59
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
  String name1="wanger";
%>
name:<%=name1%>

</body>
</html>

<%@ page import="java.util.Date" %>
<%@ page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--JSP表达式 用来将程序的输出输出到客户端--%>
<%--公式:<%=变量或者表达式%> --%>
<%=new Date()%>
<%--JSP脚本片段--%>
<%
    int sum=0;
    for (int i = 0; i <=100; i++) {
        sum+=i;
    }
    out.print("<h1>Sum="+sum+"</h1>");
%>

<%--可以在代码中嵌入HTML代码--%>
<% for (int i = 0; i < 5; i++) {
%>
<h1>Hello World${i}</h1>
<%
    }
%>

<%--JSP声明 会被编译到JSP生成java类中,其他的就会生成到_jspService方法中--%>
<%!
    static {
        System.out.println("Loading Servlet");
    }
    private int globalvar=0;

    public void Hello(){
        System.out.println("进入了方法Hello");
    }
%>
<%--JSP注释不会显示在客户端,HTML则会--%>
</body>
</html>

四、JSP指令

语法
<%@ page args%>

web.xml指定错误页面

  <error-page>
    <error-code>500</error-code>
    <location>/error/500.jsp</location>
  </error-page>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="utf-8" %>
<html>
<%--定制错误界面--%>
<%@ page errorPage="/error/500.jsp" %>
<head>
    <title>Title</title>
</head>
<body>
<%
    int i=1/0;
%>

</body>
</html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%@ include file="JSPDemo1.jsp"%>
<h1>页面主体</h1>
<%--插入页面 include将页面合二为一--%>
<%@ include file="login2.jsp"%>

<%--jsp标签 进行的是页面的拼接--%>
<jsp:include page="JSPDemo1.jsp"/>
</body>
</html>

五、九大内置对象

1、PageContext
2、Request
3、Response
4、Session
5、Application(ServletContext)
6、config(ServletConfig)
7、out
8、page
9、exception

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--1PageContext--%>
<%--2Request--%>
<%--3Response--%>
<%--4Session--%>
<%--5Application(ServletContext)--%>
<%--6config(ServletConfig)--%>
<%--7、out--%>
<%--8、page--%>
<%--9、exception--%>
<%
  pageContext.setAttribute("name1","kerwin");//保存的数据只在一个页面中生效
  request.setAttribute("name2","zhangsan");//保存的数据只在一次请求中有效,请求转发会携带这个数据
  session.setAttribute("name3","lisi");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
  application.setAttribute("name4","wangwu");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
<%
    //作用域从底层到高层找,page->request->session->application
//  String name1 = (String) pageContext.findAttribute("name1");
//  String name2 = (String) pageContext.findAttribute("name2");
//  String name3 = (String) pageContext.findAttribute("name3");
//  String name4 = (String) pageContext.findAttribute("name4");
//  String name5 = (String) pageContext.findAttribute("name5");
    String name1 = (String) request.getAttribute("name1");
    String name2 = (String) request.getAttribute("name2");
    String name3 = (String) request.getAttribute("name3");
    String name4 = (String) request.getAttribute("name4");
%>
<%--el表达式输出--%>
输出的值为:<br>
${name1}<br>
${name2}<br>
${name3}<br>
${name4}<br>
${name5}
<%
    pageContext.forward("/pages/JSPDemo1.jsp");
    request.getRequestDispatcher("/pages/JSPDemo1.jsp").forward(request,response);
%>
</body>
</html>

六、EL表达式

EL表达式:${}
用于获取数据、执行运算、获取web开发的常用对象、调用java方法
页面加上标签使得EL表达式生效

<%@ page isELIgnored="false" %>

七、JSP标签

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--EL表达式:获取数据、执行运算、获取web开发的常用对象、调用java方法--%>

<%--JSP标签--%>
<%--跳转页面,并且可以带参数转发--%>
<jsp:forward page="Demo5Resuilt.jsp">
    <jsp:param name="name" value="zhangsan"/>
    <jsp:param name="age" value="18"/>
</jsp:forward>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
Result
<%=request.getParameter("name")%>
<%=request.getParameter("age")%>
</body>
</html>

八、JSTL标签

JSTL目的是弥补HTML的不足
有核心标签、格式化标签、SQL标签、XML标签

核心标签:
在这里插入图片描述

<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%--引入jstl核心标签库,才可以使用JSTL标签
tomcat中也要引入jstl的包,否则报错
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="JSTLDemo1.jsp" method="get">
<%--  EL表达式获取表单提交的信息 ${param.参数名}--%>
  <input type="text" name="username" value="${param.username}">
  <input type="submit" value="登录">
</form>
<c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="管理员欢迎你们"></c:out>
</c:if>
<c:out value="${isAdmin}"></c:out>
<%--定义一个变量--%>
<c:set var="score" value="99"></c:set>

<%--判断变量--%>
<c:choose>
    <c:when test="${score>=90}">
        你的成绩为优秀
    </c:when>
    <c:when test="${score>=80}">
        你的成绩为良好
    </c:when>
    <c:when test="${score>=70}">
        你的成绩为一般
    </c:when>
    <c:when test="${score>=60}">
        你的成绩为合格
    </c:when>
    <c:when test="${score<60}">
        你的成绩为不合格
    </c:when>
</c:choose>
<%--遍历标签--%>
<br>
<%
    ArrayList<String> people=new ArrayList<>();
    people.add("z1");
    people.add("z2");
    people.add("z3");
    people.add("z4");
    people.add("z5");
    request.setAttribute("list",people);
%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/><br>
</c:forEach>

<c:forEach var="people" begin="1" end="3" step="1" items="${list}">
    <c:out value="${people}"/><br>
</c:forEach>
</body>
</html>

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

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

相关文章

中国to B应用软件的突破之路

我曾经随手画过一个很简单的图&#xff1a;我就分为供需两端。&#xff08;1&#xff09;如何让生意越做越大&#xff1f;那就在需侧&#xff0c;增加尽量多的交互。有人理解在营销环节-客户关系触点经营&#xff0c;有人理解在销售环节-多渠道多业态销售&#xff08;如电话销售…

振弦采集模块配置工具VMTool生成寄存器值

振弦采集模块配置工具VMTool生成寄存器值 生成寄存器值 VMXXX 有很多按位使用的寄存器&#xff0c; 使用 VMTool 工具可进行方便的设置&#xff0c;当需要知道寄存器的实际值时&#xff0c;可通过以下两种方法获取。 &#xff08;保持【 自动读取】 复选框为非选中状态&#xf…

Unity 简易音乐播放系统

前言 众所周知, Unity自带音效播放没有回调,不能自动播放clip列表; 所以简单实现一个带自动播放功能的接口,用以实现音乐列表的逐个播放. 一. 功能分析 首先要求切换场景时音乐不停,只在需要时播放其次即传入音乐名和播放次数,即可将该音乐循环播放指定次数可以直接传入一个…

【OpenCV 例程 300篇】256. 特征检测之 CenSurE(StarDetector)算法

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】256. 特征检测之 CenSurE&#xff08;StarDetector&#xff09;算法 6.9.1 算法简介 中心环绕算法&#xff08;Center Surround Extremas, CenSurE&#xff09;是 Agrawal M 等于 2008年提出的关键…

K8S StatefulSet基本使用

K8S StatefulSet 清空K8S对象 为了避免之前学习的内容造成的影响&#xff0c;先手动把K8S集群中的所有对象清空&#xff0c;使用一个全新的环境来学习StatefulSet的基本使用。 查看对象 查看service对象 kubectl get services查看ReplicaSet对象 kubectl get rs查看Repli…

达梦数据库导入dmp文件

找到达梦数据库安装文件的bin目录按着Shift键&#xff0c;右键输入以下命令&#xff08;注意更改参数&#xff09;.\dimp DGYH(用户名)/DGYH(密码)127.0.0.1 FILEdmp所在文件夹路径\20230103.dmp fullY然后根据提示,写Y 或 N 回车即可注意&#xff1a;若导入成功&#xff0c;但…

Java9的新特性模块化(Module)

一、 模块化是什么&#xff1f; Java 9引入了模块化系统&#xff0c;称为"Java Platform Module System"&#xff08;JPMS&#xff09; 这个系统允许将Java程序分成模块&#xff0c;每个模块都有自己的规范&#xff0c;可以明确地声明它依赖于哪些其他模块&#xff…

小波分析在电力系统暂态信号处理中的应用

前面我们主要讲了小波分析在机械振动信号或者其他时间序列中的应用 基于小波包特征提取和随机森林的CWRU轴承数据集故障识别 - 哥廷根数学学派的文章 - 知乎 https://zhuanlan.zhihu.com/p/556172942 基于小波区间相关&#xff08;Interval-Dependent&#xff09;的信号降噪方…

nacos源码分析-心跳检测(服务端)

前言 前面我们讲了《nacos源码分析-服务注册(客户端)》 和 《nacos源码分析-服务注册(服务端)》&#xff0c;主要是讲的服务注册流程&#xff0c;本章节我们来讲服务心跳检测机制。 心跳续约客户端 其实我们在讲 nacos服务注册客户端的时候顺带就说了心跳&#xff0c;服务注…

iNav飞控AOCODARC-F7MINI固件编译

iNav飞控AOCODARC-F7MINI固件编译1. 编译目标&#xff08;AOCODARC-F7MINI&#xff09;2. 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 构建命令介绍Step 4 厂家目标板查询Step 5 目标固件编译Step 6 目标固件清理3. 参考资料iNav是一款非常出色的飞控航模开源软…

怎么恢复360删除的文件?360文件恢复,快速完成

日常生活和工作中&#xff0c;使用电脑总会保存着很多数据。其中有我们很多的文件&#xff0c;如果不小心删除了重要的文件&#xff0c;我们该怎么恢复呢&#xff1f; 很多人都喜欢在电脑上安装3 60安 全卫士&#xff0c;文件被误删&#xff0c;我们可以通过它来恢复数据。文件…

来看看我在CSDN上的好朋友们吧,看看有没有你

首先&#xff0c;感谢支持我的所有人&#xff0c;其次&#xff0c;感谢支持我的所有人&#xff0c;然后感谢支持我的所有人&#xff0c;最后&#xff0c;感谢支持我的所有人&#xff08;我这是废话吗&#xff1f;&#xff1f;&#xff1f;不是吧&#xff09; 今天就来看看我在…

基于transfomer架构的模型[GPT、BERT、VIT、ST、MAE等等]总结

Transformer首先我们来回顾一下Transformer模型架构图对于Transformer从宏观角度可以可以理解为6个Encoder6个Decoder组成各部分介绍输入部分主要就是词嵌入位置编码对于词嵌入比较简单&#xff0c;就是对一个句子里的每个词做一个嵌入操作映射到相应的维度。一般来说就是先把句…

一次非典型的Netty内存泄露案例复盘

背景 作为后端开发相信大家或多或少都接触过Nettty&#xff0c;说起Netty真实又爱又恨&#xff0c;因为基于它可以很简单的开发高性能的Java网络通信服务&#xff0c;但同时要是不小心就会出现各种奇奇怪怪的问题&#xff0c;特别是由于特殊的内存管理机制很容易出现内存泄漏问…

数据大佬的成长经验分享 | ​我的非典型数据分析之路

小飞象交流会哪有什么错过的人&#xff0c;会离开的都是路人。哪有什么命运不公&#xff0c;都是懒惰让你变得无能。内部交流│19期数据大佬的成长经验分享我的非典型数据分析之路data analysis●●●●分享人&#xff1a;夏宇‍在大数据、人工智能热、5G、物联网的时代&#x…

1、Mavan项目管理工具

1.1 什么是 Maven 1.1.1 什么是 Maven Maven 的正确发音是[ˈmevən]&#xff0c;而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词 语&#xff0c;代表专家、内行的意思。 一个对 Maven 比较正式的定义是这么说的&#xff1a;Maven 是一个项目管理工具&#xff0…

Spring Boot学习篇(十)

Spring Boot学习篇(十) shiro安全框架使用篇(二)——登录实例(密码以密文方式存储,不含记住密码) 1.模拟注册时,生成密文到数据库中 1.1 在zlz包下创建util包,并在下面创建SHAUtil01类(初始里面无方法)和SHAUtil02类,其目录结构如下所示 1.2 两种生成密文的方式 1.2.1 自己…

一篇文章彻底搞懂折半查找法[二分查找法]算法~

算法实现的要求&#xff1a; 折半查找法又称为二分查找法&#xff0c;这种方法对待查找的列表有两个要求&#xff1a; 1&#xff1a;必须采用顺序存储结构 2&#xff1a;必须按关键字大小有序排列算法思想&#xff1a; 将表中间位置记录的关键字与查找关键字进行比较&#x…

性能测试时那些「难以启齿」的问题-CPU相关

NO.1 为什么cpu使用率可以>100%? 小白的我在进行压测的时候&#xff0c;查看服务的cpu总使用率如下&#xff0c;总使用率会超过100%&#xff0c;这个数据是怎么来的呢&#xff0c;为什么会有大于100%的情况呢&#xff1f; 作为小白的我刚开始觉得这个问题应该很基础&#x…

Go语言实现猜数字小游戏

目录 前言 一、设计思路 二、代码编写 2.1 产生随机数 2.2 用户输入数据 2.3 核心代码 三、 全部代码 四、效果图 总结 前言 最近在学习go语言&#xff0c;刚刚学完go语言的基础语法。编写了一个猜数字的小游戏来练习循环、分支语句、变量定义、输入输出等基础的go语…