10.1 JSP语言入门

news2024/11/15 4:55:46

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 {
    @Override
    protected 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 {
    @Override
    protected 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.coloradmin.cn/o/1931971.html

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

相关文章

卷积神经网络(一)-LeNet-5

前言 LeNet开启了卷积神经网络的第一枪&#xff0c;这一网络模型由Yann LeCun等人在1998年提出&#xff0c;被视为卷积神经网络的开山之作。 论文地址&#xff1a; http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf 如果打不开就看csdn&#xff1a; https://download.…

LangChain-v0.2 Build an Agent 构建代理

语言模型本身不能采取行动&#xff0c;它们只是输出文本。LangChain的一个重要用例是创建代理。代理是使用LLM作为推理引擎来确定要采取哪些行动&#xff0c;以及传递哪些输入的系统。执行操作后&#xff0c;可以将结果反馈到LLM中&#xff0c;以确定是否需要更多操作&#xff…

陪玩系统小程序模式APP小程序H5系统搭建开发

随着移动互联网的营及和游戏行业的蓬轨发展&#xff0c;陪玩服务应远而生并迅速唱起&#xff0c;陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁&#xff0c;其模式系统的搭建与开发是得尤为重要&#xff0c;本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程&#xff0c;包…

基础动态规划题目基础动态规划题目

目录 题目1&#xff1a; P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles 代码示例&#xff1a; 题目2&#xff1a; Common Subsequence 代码示例 题目3 &#xff1a;最长上升子序列 最长不下降子序列 最长上升子序列oj答案 题目1&#xff1a; P1216 [USACO1.5]…

Linux热键,shell含义及权限介绍

君子忧道不忧贫。 —— 孔丘 Linux操作系统的权限 1、几个常用的热键介绍1、1、[Tab]键1、2、[ctrl]-c1、3、[ctrl]-d1、4、[ctrl]-r 2、shell命令以及运行原理3、权限3、1、什么是权限3、2、权限的本质3、3、Linux中的用户3、4、Linux中文件的权限3、4、1、快速掌握修改权限的…

华为HCIP Datacom H12-821 卷41

1.多选题 以下关于BGP Atomic_Aggregate和Aggregator的描述&#xff0c;正确的是哪些项? A、Aggregator属性属于可选过渡属性 B、Atomic_Aggregate属于公认任意属性 C、收到携带Atomic_Aggregate属性的路由表示这条路由不能再度明细化 D、 Agregator表示某条路由可能出现…

古玻璃制品的成分分析与鉴别详解【国一,附完整代码】

声明&#xff1a;2024年数模国赛即将来临&#xff0c;为助力国赛和钉钉杯&#xff0c;我将重温22年小样本国赛C题和23年大样本国赛C题&#xff0c;给出详细思路和完整代码&#xff0c;供广大数模爱好者阅览&#xff0c;如需比赛指导&#xff0c;请联系文章底部卡片咨询。 未经允…

UNiapp微信小程序Ucharts

效果图如下 以上为加载接口所得数据的玫瑰图与折线图 具体步骤如下 1&#xff0c;将插件导入Hbuiler 所需要的项目中&#xff08;插件地址&#xff1a;秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场&#xff09; 2&#xff0c;导入成功是这样的 3&#xff0c…

Windows终端远程登陆Linux服务器(SSH+VScode)

W i n d o w s 终端远程登陆 L i n u x 服务器&#xff08; S S H V S c o d e &#xff09; \huge{Windows终端远程登陆Linux服务器&#xff08;SSHVScode&#xff09;} Windows终端远程登陆Linux服务器&#xff08;SSHVScode&#xff09; 文章目录 写在前面通过SSH远程连接L…

rust + python+ libtorch

1: 环境&#xff0c;ubuntu 1.1 rust : rust-1.79.0 &#xff08;在官方下载linux版本后&#xff0c;解压文件夹&#xff0c;内部有个install的sh文件&#xff0c;可安装&#xff09; 安装成功测试&#xff1a;cargo --version 1.2 python3.10 (直接使用apt install pytho…

Redis-基础概念

目录 概念 Redis是什么 Redis 和 MySQL 的区别&#xff1f; Redis单线程有什么极端场景的瓶颈 Redis为什么快? 为什么Redis是单线程? Redis是单线程还是多线程 Redis为什么选择单线程做核心处理 Redis6.0之后引入了多线程&#xff0c;你知道为什么吗? 瓶颈是内存和I…

SAP PP学习笔记28 - 生产订单的收货及品质管理

上一章讲了生产订单的很多概念&#xff0c;比如确认&#xff08;报工&#xff09;以及报工的各种形式&#xff0c;反冲&#xff0c;自动入库等。 SAP PP学习笔记27 - Confirmation(报工/确认&#xff09;(CO11&#xff0c;CO11N&#xff0c;CO15&#xff0c;CO12)&#xff0c;…

IOS系统有什么好用的藏语翻译软件推荐吗?

藏语翻译通是我使用过的比较好用实用的藏语翻译软件。 藏语翻译通是一款专为藏语和汉语互译设计的智能翻译软件&#xff0c;它利用最新的人工智能技术&#xff0c;为用户提供高效、准确的翻译服务。软件界面简洁直观&#xff0c;易于操作&#xff0c;无论是藏语学习者、研究者…

C++中的变量的同名隐藏

同名隐藏是C中的一个概念&#xff0c;在一个类的继承关系中&#xff0c;子类中定义了一个与父类中同名的成员函数。当这种情况发生时&#xff0c;子类中的函数会隐藏掉所有父类中同名的函数&#xff0c;这意味着在子类中调用这个函数时&#xff0c;会优先调用子类中定义的版本&…

图书馆定位导航:RFID、VR与AR技术在图书馆中的应用

图书馆作为知识的宝库&#xff0c;承载着无数求知者的梦想与期待&#xff0c;随着馆藏书籍数量的激增与图书馆布局的日益复杂&#xff0c;读者在寻找目标书籍往往有许多困难。传统的索引号查询方式虽能提供书籍的基本信息&#xff0c;但在寻找过程中&#xff0c;因不熟悉图书馆…

智慧博物馆的“眼睛”:视频智能监控技术守护文物安全与智能化管理

近日&#xff0c;位于四川德阳的三星堆博物馆迎来了参观热潮。据新闻报道&#xff0c;三星堆博物馆的日均参观量达1.5万人次。随着暑假旅游高峰期的到来&#xff0c;博物馆作为重要的文化场所&#xff0c;也迎来了大量游客。博物馆作为文化和历史的重要载体&#xff0c;其安全保…

JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA)

JAVA零基础学习1&#xff08;CMD、JDK、环境变量、变量和键盘键入、IDEA&#xff09; CMD常见命令配置环境变量JDK的下载和安装变量变量的声明和初始化声明变量初始化变量 变量的类型变量的作用域变量命名规则示例代码 键盘键入使用 Scanner 类读取输入步骤示例代码 常用方法处…

网络开局 与 Underlay网络自动化

由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…

【程序大侠传】服务发布引发mq消息重复消费

前序 在编程武侠世界中&#xff0c;有一个门派“天机楼”&#xff0c;连接并协调各大门派之间的关系&#xff0c;确保整个江湖的运作流畅无阻。天机楼住要的业务范围主要如下&#xff1a; 信息传递的信使&#xff1a; 天机楼就像是江湖中的飞鸽传书&#xff0c;确保各门派之间…

学生管理系统(C语言)(Easy-x)

课 程 报 告 课 程 名 称&#xff1a; 程序设计实践 专 业 班 级 &#xff1a; XXXXX XXXXX 学 生 姓 名 &#xff1a; XXX 学 号 &#xff1a; 231040700302 任 课 教 师 &a…