10.1 JSP语言入门

JSP语言入门

  • 目录
    • 一、 基础概念
      • 1. 什么是JSP?
      • 2. 工作原理
      • 3. 基本语法
    • 二、 表达式语言(EL)
      • 1. 简介
      • 2. 语法
    • 三、 JSTL(JSP Standard Tag Library)
      • 1. 简介
      • 2. 核心标签库
      • 3. 常用标签
    • 四、 高级话题
      • 1. 会话管理
      • 2. 自定义标签
      • 3. MVC模式
    • 五、 实践项目
      • 1. 项目描述
      • 2. 项目结构

目录

JSP(JavaServer Pages) 是一种用于创建动态网页的技术,允许在HTML页面中嵌入Java代码。
以下是一个详细的JSP教程,涵盖从基础到高级的内容。

一、 基础概念

1. 什么是JSP?

  • JSP是一种服务器端技术,类似于PHP和ASP,主要用于生成动态网页内容。
  • JSP文件扩展名为.jsp,内部可以包含HTML、Java代码、以及JSP标签。

2. 工作原理

  1. 客户端请求:用户通过浏览器请求一个JSP页面。
  2. 服务器处理:服务器接收到请求,将JSP页面转换为一个Servlet(Java类),并编译。
  3. 响应生成:Servlet处理请求,生成HTML内容返回给客户端。

3. 基本语法

  • 脚本元素:用来嵌入Java代码。

    <% code %>:脚本片段
    <%= expression %>:表达式
    <%! declaration %>:声明


  • 指令元素:用来设置JSP页面的全局属性。

    <%@ page %>:定义页面依赖,比如编码格式、导入包等。
    <%@ include %>:引入文件。
    <%@ taglib %>:引入标签库。


  • 动作元素:用来执行特定任务。

    jsp:forward:请求转发。
    jsp:include:包含其他资源。

代码示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>JSP示例</title>
</head>
<body><% String message = "Hello, JSP!";%><h1><%= message %></h1>
</body>
</html>

二、 表达式语言(EL)

1. 简介

EL(Expression Language) 是一种简洁的语法,用于访问Java对象的属性,调用方法等。EL使得在JSP中嵌入Java代码更加简单和直观。

2. 语法

  • ${expression}:表达式语法,用于输出值。
  • 支持基本运算关系运算逻辑运算 等。

示例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>EL示例</title>
</head>
<body><c:set var="name" value="John Doe" /><h1>Hello, ${name}!</h1>
</body>
</html>

三、 JSTL(JSP Standard Tag Library)

1. 简介

JSTL 是一个标准标签库,为JSP提供了一组常用功能,如条件判断、循环、国际化等。

2. 核心标签库

导入核心标签库:<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

3. 常用标签

  • 条件判断:<c:if>,<c:choose>,<c:when>,<c:otherwise>
  • 循环:<c:forEach>,<c:forTokens>
  • 设置/移除变量:<c:set>,<c:remove>
  • 输出:<c:out>

代码示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>JSTL示例</title>
</head>
<body><c:forEach var="i" begin="1" end="5"><p>Number: ${i}</p></c:forEach>
</body>
</html>

四、 高级话题

1. 会话管理

Session:用于在客户端和服务器之间保存用户数据。

代码示例

<%HttpSession session = request.getSession();session.setAttribute("username", "John Doe");
%>
<p>Username: <%= session.getAttribute("username") %></p>

2. 自定义标签

  • 创建自定义标签可以提高代码的重用性和可读性。
  • 步骤
    1. 创建标签处理类,继承TagSupport或SimpleTagSupport。
    2. 定义标签库描述文件(TLD)。
    3. 在JSP页面中导入并使用自定义标签。

3. MVC模式

  • 将JSP与Servlet结合使用,实现MVC(Model-View-Controller)设计模式。
  • Model:JavaBeans或其他Java类,负责业务逻辑和数据。
  • View:JSP页面,负责显示数据。
  • Controller:Servlet,负责处理请求和响应。

五、 实践项目

1. 项目描述

创建一个简单的用户登录系统,包括用户注册、登录、注销功能。

2. 项目结构

- WebContent- index.jsp- login.jsp- register.jsp- welcome.jsp- WEB-INF- web.xml- lib- jstl.jar- standard.jar
- src- com.example- LoginServlet.java- RegisterServlet.java- User.java

示例代码

index.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>首页</title>
</head>
<body><h1>欢迎</h1><a href="login.jsp">登录</a> | <a href="register.jsp">注册</a>
</body>
</html>

login.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>登录</title>
</head>
<body><h1>登录</h1><form action="LoginServlet" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><button type="submit">登录</button></form>
</body>
</html>

register.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>注册</title>
</head>
<body><h1>注册</h1><form action="RegisterServlet" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><button type="submit">注册</button></form>
</body>
</html>

welcome.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<%HttpSession session = request.getSession();String username = (String) session.getAttribute("username");if (username == null) {response.sendRedirect("login.jsp");}
%>
<html>
<head><title>欢迎</title>
</head>
<body><h1>欢迎, <%= username %>!</h1><a href="LogoutServlet">注销</a>
</body>
</html>

LoginServlet.java

package com.example;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");if ("admin".equals(username) && "password".equals(password)) {HttpSession session = request.getSession();session.setAttribute("username", username);response.sendRedirect("welcome.jsp");} else {response.sendRedirect("login.jsp");}}
}

RegisterServlet.java

package com.example;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class RegisterServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 简单模拟注册逻辑if (username != null && password != null) {HttpSession session = request.getSession();session.setAttribute("username", username);response.sendRedirect("welcome.jsp");} else {response.sendRedirect("register.jsp");}}
}

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1"><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.example.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping><servlet><servlet-name>RegisterServlet</servlet-name><servlet-class>com.example.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>RegisterServlet</servlet-name><url-pattern>/RegisterServlet</url-pattern></servlet-mapping>
</web-app>

在这里插入图片描述


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

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

相关文章

React@16.x(58)Redux@4.x(7)- 实现 combineReducers

目录 1&#xff0c;分析2&#xff0c;实现2.1&#xff0c;简单实现2.2&#xff0c;参考源码具体实现实现 1&#xff0c;分析 大型项目中&#xff0c;数据和操作都比较复杂&#xff0c;所以会对 reducer 进行细分管理。 combineReducers 的作用&#xff1a;结合多个 reducer。…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十一)-无人机服务可用性用例需求

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

Python:while循环

while循环体 while 条件: 符合条件执行语句 .... 执行完后需执行的语句 # while循环 i1 while i<5:print(i)ii1 print("Done") test. 做一颗圣诞树吧 答案&#xff1a; # while循环 i 1 j5 while i < 5:print( * j* * i)i i 2jj-1 print("Done"…

护佑未来!引领儿童安全新时代的AI大模型

引领儿童安全新时代的AI大模型 一. 前言1.1 AI在儿童安全方面的潜在作用1.2 实时监控与预警1.3 个性化安全教育与引导1.4 家长监护与安全意识提升 二. AI大模型的优势2.1. 保护儿童隐私和安全的重要性2.2. AI大模型如何应用于儿童安全领域2.1 儿童内容过滤2.2.1 儿童行为监测 2…

视觉/AIGC面经->多模态

1.ocr检测如何做?qwen的文本检测是否合理? paligemma: <loc0110><loc0124><loc0224><loc0389> plate ; <loc0244><loc0130><loc0281><loc0430> plate ; <loc0364><loc0820><loc0403><loc0951> pl…

代码检查规则语言CodeNavi中代码语句的节点和节点属性

本文分享至华为云社区《CodeNavi 中代码语句的节点和节点属性》。作者&#xff1a;Uncle_Tom 1. 前期回顾 《寻找适合编写静态分析规则的语言》 根据代码检查中的一些痛点&#xff0c;提出了希望寻找一种适合编写静态分析规则的语言。 可以满足用户对代码检查不断增加的各种需求…

使用 PyAMF / Django 实现 Flex 类映射

1、问题背景 PyAMF 是一个用于在 Flex 和 Python 之间进行通信的库&#xff0c;在使用 PyAMF 与 Flex 应用进行通信时&#xff0c;经常会遇到错误。例如&#xff0c;在发送一个 Flex Investor 对象到 Python 时&#xff0c;会得到一个 ‘KeyError: first_name’ 的错误。这是因…

DevToys-开源免费开发工具箱

个人觉得相较于那些在线的工具箱&#xff0c;这种离线的工具箱客户端更加可信一些。 DevToys 提供了30 个默认工具&#xff1a; 转换器&#xff1a;JSON <> YAML、日期、数字基数......编码器/解码器&#xff1a;HTML、URL、Base64、GZip、JWT、二维码......格式化程序…

使用pytest-playwright截图和录制视频并添加到Allure报告

一、依赖环境 python, version==3.9.5 pytest-playwright, version==0.5.1 allure-pytest, version==2.13.5 pytest, version==6.2.5 allure, version==2.22.0pytest-playwright支持如下命令行参数: Playwright:--browser={chromium,firefox,webkit}Browser engine which …

如何理解LTI系统的线性相位和群延迟

原文出自微信公众号【小小的电子之路】 在信号处理领域&#xff0c;经常会提到两个名词-线性相位与群延迟&#xff0c;那么&#xff0c;什么是线性相位&#xff1f;什么是群延迟&#xff1f;二者之间又有什么关系呢&#xff1f; 一、理论原理 1、线性相位 对于线性时不变系统…

C# SqlSugar 如何使用Sql语句进行查询,并带参数进行查询,防注入

一般ORM查询单表数据已经是很简单的一种方式了 详情可以看我的另一篇文章&#xff1a;ORM C# 封装SqlSugar 操作数据库_sqlsugar 基类封装-CSDN博客 下面是介绍有些数据是需要比较复杂的SQL语句来进行查询的时候&#xff0c;则需要自行组装SQL语句来进行查询&#xff0c;下面…

[BJDCTF2020]EzPHP1

知识点&#xff1a;1. url编码绕过 2. %0a绕过 3. post优先级绕过 4. php伪协议 5. 数组的强类型比较绕过 6. 取反绕过 进入之后发现了一个很帅气的页面&#x1f60e;~ 看看网页源代码试试~ 是base32编码&#xff0c;尝试一下解码. https://www.qqxiuzi.cn/bianma/base.php 解…

SpringBoot+Vue实现简单的文件上传(Excel篇)

SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 页面 3 效果&#xff1a;只能上传xls文件且大小限制为2M&#xff0c;选择文件后自动上传。 4 前端代码 <template><div class"container"><el…

Java---类与对象(二)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录 封装访问限定符&#xff08;重点&#xff0…

基于springboot 大学校园拼够系统设计与实现

摘 要 大学校园拼购系统是为了方便用户能够在网站上查看校园拼购、公告信息等&#xff0c;于是开发了基于springboot框架设计与实现了一款简洁、轻便的大学校园拼购系统。本系统解决了大学校园拼购管理事务中的主要问题&#xff0c;包括以下多个功能模块&#xff1a;商家、用户…

apollo国产化部署配置

数据库配置 数据修改如下 apolloconfigdb库下serverconfig表 key为eureka.service.url的value值为对应的Eureka服务Urlapolloportaldb库下serverconfig表 将对应的key为apollo.portal.envs的value值改为直接配置的地址如下jar启动命令dev_meta、fat_meta、uat_meta、pro_meta则…

玩转springboot之springboot集成redis乱码问题

springboot集成redis乱码问题 在使用redis操作字符串时发现会变成乱码&#xff0c;这是因为RedisTemplate默认是使用的是JdkSerializationRedisSerializer序列化方式&#xff0c;这里可以使用StringRedisTemplate来进行操作&#xff0c;StringRedisTemplate中默认使用的是Stri…

c语言选择屏幕分辨率

#include <stdio.h> // 定义一些可能的分辨率 typedef struct { int width; int height; } Resolution; Resolution resolutions[] { {640, 480}, {1024, 768}, {1280, 720}, {1920, 1080}, {2560, 1440}, {3840, 2160} }; // 根据输入…

相机-雷达联合标定direct_visual_lidar_calibration开源算法编译踩坑记录

基于场景的相机-雷达联合标定编译记录direct_visual_lidar_calibration 编译 1.本机环境Ubuntu18.04 Melodic 相关依赖版本&#xff1a;Cmake-3.18.0 gcc-8.4.0 pcl-1.13.0 2.相关依赖 # Install dependenciessudo apt install libomp-dev libboost-all-dev libglm-dev li…

Kylin系列(八)实时分析:实现 Kylin 实时数据处理

目录 1. 数据流配置 1.1 Kafka配置 1.2 数据生产者配置 1.3 Kylin的Kafka数据源配置 2. 实时Cube构建 2.1 创建实时Cube 2.2 配置增量构建策略 2.3 配置Kafka数据同步 3. 查询优化 3.1 配置查询缓存 3.2 优化查询语句 3.3 使用并行查询 4. 实例演示 4.1 数据生成…