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,一经查实,立即删除!

相关文章

【学习笔记】无人机(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…

代码检查规则语言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、二维码......格式化程序…

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

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

[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;商家、用户…

Golang | Leetcode Golang题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; func majorityElement(nums []int) (ans []int) {cnt : map[int]int{}for _, v : range nums {cnt[v]}for v, c : range cnt {if c > len(nums)/3 {ans append(ans, v)}}return }

找到完美的横道图工具:2024年选择指南

国内外主流的10款项目进度横道图软件对比&#xff1a;PingCode、Worktile、灵动计划&#xff08;Wolai&#xff09;、飞书项目、Tapd、麦客CRM、Asana、Trello、Smartsheet、Basecamp。 在管理项目时&#xff0c;确保所有进度和任务都按计划进行是每个项目经理面临的一大挑战。…

WordPress:无法创建新文章?创建新帖子时候页面空白

wordPress中我们新建文章的时候&#xff0c;会遇到页面空白&#xff0c;这个问题是怎么导致呢&#xff1f;我们可以打开F12开发者模式看下报错信息&#xff0c;这是一个警告信息 Warning: Creating default object from empty value in /pub 到数据库 wp_posts中查看生成了很…

漏洞挖掘 | 记某证书站任意账号接管漏洞

下文中所述漏洞已修复 在前段时间的漏洞挖掘中&#xff0c;上了某证书站&#xff0c;打点的一处逻辑漏洞 访问某一站点&#xff0c;发现了一处登录页 点击登录按钮之后&#xff0c;发现该站点大概率是自写站点&#xff0c;存在逻辑漏洞的可能性大大增大&#xff0c;利用前期信…

CentOS7配置阿里云yum源

前提&#xff1a;确认机器可以连接互联网&#xff0c;且系统已经安装了wget软件 先进入到/etc/yum.repos.d目录下查看是否有原来的yum源配置文件&#xff0c;如果有&#xff0c;就将它们备份一下 用yum repolist命令测试&#xff0c;当前系统已经没有可用yum源 输入命令wget -…

Java二十三种设计模式-建造者模式(4/23)

建造者模式&#xff1a;构建复杂对象的专家 引言 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于创建一个复杂的对象&#xff0c;同时允许用户只通过指定复杂对象的类型和内容就能构建它们&#xff0c;它将对象的构建和表示分离&am…

【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解

【机器学习】12.十大算法之一支持向量机&#xff08;SVM - Support Vector Machine&#xff09;算法原理讲解 一摘要二个人简介三基本概念四支持向量与超平面4.1 超平面&#xff08;Hyperplane&#xff09;4.2 支持向量&#xff08;Support Vectors&#xff09;4.3 核技巧&…

【Django+Vue3 线上教育平台项目实战】构建课程详情页与集成视频播放功能

文章目录 前言一、课程列表页面a.后端代码b.前端代码 二、课程详情页面a. 视频播放功能的集成1.获取上传视频的链接地址2.集成在前端页面中1>使用vue-alipayer视频播放组件2>使用video标签 b. 页面主要内容展示1.后端代码1>分析表2>核心逻辑 2.前端代码3.效果图 前…

线程池-拒绝策略

线程池-拒绝策略 RejectedExecutionHandlerAbortPolicyCallerRunsPolicyDiscardPolicyDiscardOldestPolicy自定义拒绝策略 当核心线程已用尽 & 阻塞队列已满 & 超过最大线程数时&#xff0c;再向线程池提交任务&#xff0c;则会触发线程池的拒绝策略。 RejectedExecuti…