【JavaWeb程序设计】JSP编程

news2024/11/24 16:03:19

目录

一、编写JSP页面,在界面上显示1-9,9个链接,单击每个链接,能够在另一个页面打印该数字的平方。

1. 运行截图

2. 第一个jsp页面(index.jsp)

3. 第二个jsp页面(square.jsp)

二、完成如下要求

2.1 编写页面1,声明计算阶乘的方法,该页面能够接收一个参数,并将该参数转换为数值,计算该数值的阶乘,最后在页面上输出结果。

2.2 编写页面2,编写表单使之能够接受用户输入的数值,并提交到页面1进行阶乘计算并显示计算结果。

2.1.1 运行截图

2.1.2 页面1(factorial.jsp)

2.2.1 页面2(form.jsp)

三、按要求完成如下JSP页面

3.1 编写页面1,制作一个登陆表单,包含账号、密码输入框、提交按钮。输入账号和密码,点击提交按钮,如果账号密码相等(使用java脚本实现),则显示“登陆成功”,否则显示“登陆失败”。

3.1.1 运行截图

3.1.2 源代码

3.2 编写页面2,输入账号密码,进行登陆,如果账号和密码相同,认为登陆成功,转到页面3,页面3中显示一个文本框输入用户姓名,输入之后提交,在页面4中显示用户的账号和姓名。

3.2.1 运行截图

3.2.2 页面2(login2.jsp)

3.2.3 重定向页面(loginProcess.jsp)

3.2.4 页面3(inputName.jsp)

3.2.5 页面4(displayInfo.jsp)

四、心得体会

1. 出现中文乱码的问题如何解决?

1.1 页面2登录账号输入正确中文账号名变成乱码提示登录出错

1.2 页面3输入中文出现乱码如下


一、编写JSP页面,在界面上显示1-9,9个链接,单击每个链接,能够在另一个页面打印该数字的平方。

1. 运行截图

2. 第一个jsp页面(index.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>求数字平方</title>
</head>
<body>
    <p>点击下方数字求平方和</p>
    <ul>
       <% for(int num=1;num<=9;num++){ %>
            <li><a href="square.jsp?num=<%= num %>"><%= num %></a> </li>
       <% } %>
    </ul>

</body>

</html>

3. 第二个jsp页面(square.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>求数字平方</title>
</head>
<body>
    <%
        String numStr = request.getParameter("num");
        int num = Integer.parseInt(numStr);
        int squaredNum = num * num;
        out.println(num + " 的平方是 " + squaredNum);
    %>
</body>
</html>

二、完成如下要求

2.1 编写页面1,声明计算阶乘的方法,该页面能够接收一个参数,并将该参数转换为数值,计算该数值的阶乘,最后在页面上输出结果。

2.2 编写页面2,编写表单使之能够接受用户输入的数值,并提交到页面1进行阶乘计算并显示计算结果。

2.1.1 运行截图

2.1.2 页面1(factorial.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>计算阶乘</title>
</head>
<body>
<%!
    //声明计算阶乘的方法
    long factorial(int n) {
        if (n == 0) return 1;
        else return n * factorial(n - 1);
    }
%>
<%
    //获取传递的参数值
    String param = request.getParameter("number");
    int number = Integer.parseInt(param);

    //调用计算方法
    long result = factorial(number);
%>

<p>阶乘为:<%= result %></p>
</body>
</html>

2.2.1 页面2(form.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>阶乘计算</title>
</head>
<body>
<form action="factorial.jsp" method="get">
    <label for="number">请输入一个数值:</label>
    <input type ="number" id="number" name="number" required>
    <input type="submit" value="计算阶乘">
</form>

</body>
</html>

三、按要求完成如下JSP页面

3.1 编写页面1,制作一个登陆表单,包含账号、密码输入框、提交按钮。输入账号和密码,点击提交按钮,如果账号密码相等(使用java脚本实现),则显示“登陆成功”,否则显示“登陆失败”。

3.1.1 运行截图

3.1.2 源代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<%--------------------JSP程序段------------------------%>
<%
    //获取账号密码
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    //如果账号密码相同,提示登录成功,否则提示登录失败。
    if (username != null && password != null) {
        if ("可爱小浩".equals(username) && "lh666".equals(password)) {
    %>
    <span style="color: #FF0000"><%="登录成功"%></span>
    <%
    } else {%>
    <span style="color: #FF0000"><%="登录失败"%></span>
    <%
            }
    }
%>

<%------------------------登录表单-------------------------%>
<form action="./login.jsp" method="get">
    <label for="username">账号:</label>
    <input type="text" id="username" name="username" value="<%= username!=null?username:""%>" required>
    <br><br>
    <label for="password">密码:</label>
    <input type="text" id="password" name="password" value="<%= password!=null?password:""%>" required>
    <input type="submit" value="提交">
</form>


</body>
</html>

3.2 编写页面2,输入账号密码,进行登陆,如果账号和密码相同,认为登陆成功,转到页面3,页面3中显示一个文本框输入用户姓名,输入之后提交,在页面4中显示用户的账号和姓名。

3.2.1 运行截图

页面2输入账号和密码:

 重定向到页面3:

输入姓名:

 页面4显示账号和姓名:

3.2.2 页面2(login2.jsp)

输入账号密码,如果登录成功跳转到页面3,否则输出“登录失败!”

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<%---------------------JSP程序段--------------------------%>
<%
    //输错账号密码提示登录失败的信息
    String msg = request.getParameter("msg");
    if (msg != null) {%>
        <span style="color: #FF0000"><%="登录失败!"%></span>
<% }%>

<%------------------------登录表单-------------------------%>
<form action="loginProcess.jsp" method="POST">
    <label for="username">账号:</label>
    <input type="text" id="username" name="username" required>
    <br><br>
    <label for="password">密码:</label>
    <input type="text" id="password" name="password" required>
    <input type="submit" value="提交">
</form>

</body>
</html>

3.2.3 重定向页面(loginProcess.jsp)

如果登录成功,重定向到页面3(inputName.jsp),并且将页面2的username编码传递给页面3;否则,重定向到页面2(login2.jsp)。

<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.nio.charset.StandardCharsets" %><%--
  Created by RUI.
  User: 86189
  Date: 2023/10/8
  判断账号密码是否相同
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%--------------------------JSP程序段------------------------------%>
<%
//    解决中文乱码问题
    request.setCharacterEncoding("UTF-8");
//    登录验证
    String username = request.getParameter("username");
    String password = request.getParameter("password");

//    如果账号密码相同,则重定向到页面3(inputName.jsp)
    if ("小煊".equals(username) && "ryx666".equals(password)) {

        //通过表单提交数据或在 URL 中传递中文参数时,由于我这边浏览器编码是ACSII编码,无法对中文进行编码
        //故对 username 进行编码,并将编码后的结果作为参数传递给 inputName.jsp 页面
        String encode = URLEncoder.encode(username, StandardCharsets.UTF_8);
        response.sendRedirect("inputName.jsp?username=" + encode);
    } else {
//        否则重定向到页面1(login2.jsp)并显示登录失败的消息。
        response.sendRedirect("login2.jsp?msg=failed");
    }
%>

3.2.4 页面3(inputName.jsp)

输入姓名,接收loginProcess.jsp传来的对页面2(login2.jsp)中username经过编码的参数值且解码

<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.nio.charset.StandardCharsets" %><%--
  Created by RUI.
  User: 86189
  Date: 2023/10/8
  输入姓名
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>输入姓名</title>
</head>
<body>
<%
//    获取 loginProcess.jsp 经过编码的参数值
    String userName = (String) request.getParameter("username");
//    解码
    userName = URLDecoder.decode(userName, StandardCharsets.UTF_8);
%>
<%-----------------------------输入姓名表单--------------------------%>
<form action="displayInfo.jsp" method="POST">
    <label for="name">请输入姓名:</label>
    <input type="text" id="name" name="name" required>
    <input type="hidden" id="username" name="username" value="<%=userName%>" required>
    <input type="submit" value="提交">
</form>
</body>
</html>

3.2.5 页面4(displayInfo.jsp)

显示页面2中的username和页面3中的name

<%--
  Created by RUI.
  User: 86189
  Date: 2023/10/8
  显示用户的账号和密码
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户信息</title>
</head>
<body>
<%---------------------JSP程序段--------------------------%>
<%
    request.setCharacterEncoding("UTF-8");  //解决中文乱码问题
    String username = request.getParameter("username"); //账号
    String name = request.getParameter("name"); //密码
%>
<p> 账号:<%= username %> </p>
<p> 姓名:<%= name %>  </p>

</body>
</html>

四、心得体会

1. 出现中文乱码的问题如何解决?

1.1 页面2登录账号输入正确中文账号名变成乱码提示登录出错

解决办法如下

在loginProcess.jsp接收请求的JSP 页面的开头部分,添加以下代码来手动设置请求的字符编码为 UTF-8

1.2 页面3输入中文出现乱码如下

解决办法如下

在displayInfo.jsp接收请求的JSP 页面的开头部分,添加以下代码来手动设置请求的字符编码为 UTF-8:

重新运行成功解决!

2. 学习和掌握 JSP 的基本语法、URL 传值和表单传值等,深入了解了 JSP 的工作原理,并熟练掌握在集成环境中编辑、部署和运行 Web 工程。

3. 在实验过程中也遇到了一些困难和问题。最初,我对 JSP 的语法不太熟悉,需要花费一些时间来学习和理解。此外,在处理 URL 传值和表单传值时,我也遇到了一些小问题。

        比如在页面2的账号输入中文时,发现重定向不到页面3,但是浏览器任何提示都没有,通过debug发现,输入中文之后浏览器无法为之编码,直接视为无效被移除了。

        

        下面的代码中使用了 URLEncoder.encode() 方法对 username 进行编码,并将编码后的结果作为参数传递给 sendRedirect() 方法。这样可以确保传递的参数在 URL 中正确编码,以防止特殊字符或非ASCII字符引起的问题。

然后,通过调用 response.sendRedirect() 方法进行重定向,将编码后的用户名作为参数附加到目标页面(inputName.jsp)的 URL 中。

        

        在 inputName.jsp 页面中使用下面的代码来获取传递的参数,这样可以首先通过 request.getParameter() 获取经过编码的参数值,然后使用 URLDecoder.decode() 对其进行解码,得到原始的 username 值。

        通过查阅文档和教程,我很快就解决了这些问题,并加深了对 JSP 的理解。

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

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

相关文章

信创-办公软件应用工程师认证

随着国家对信息技术自主创新的战略重视程度不断提升&#xff0c;信创产业迎来前所未有的发展机遇。未来几年内&#xff0c;信创产业将呈现市场规模扩大、技术创新加速、产业链完善和国产化替代加速的趋势。信创人才培养对于推动产业发展具有重要意义。应加强高校教育、建立人才…

卫星网络——Walker星座简单介绍

一、星座构型介绍 近年来&#xff0c;随着卫星应用领的不断拓展&#xff0c;许多任务已经无法单纯依靠单颗卫星来完成。与单个卫星相比&#xff0c;卫星星座的覆盖范围显著增加&#xff0c;合理的星座构型可以使其达到全球连续覆盖或全球多重连续覆盖&#xff0c;这样的特性使得…

SpringBoot的在线教育平台-计算机毕业设计源码68562

摘要 在数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;在线教育已成为教育领域的重要趋势。为了满足广大学习者对于灵活、高效学习方式的需求&#xff0c;基于Spring Boot的在线教育平台应运而生。Spring Boot以其快速开发、简便部署以及良好的可扩展性&#xff0c…

CVPR2024自动驾驶轨迹预测方向的论文整理

2024年自动驾驶轨迹预测方向的论文汇总 1、Producing and Leveraging Online Map Uncertainty in Trajectory Prediction 论文地址&#xff1a;https://arxiv.org/pdf/2403.16439 提出针对在线地图不确定性带给轨迹预测的影响对应的解决方案。 在轨迹预测中&#xff0c;利用在…

Linux系统的基础知识和常用命令

1、什么是Linux&#xff1f; 是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹于1991年10月5日首次发布&#xff0c;它主要受到Minix和Unix思想的启发&#xff0c;是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行…

基于Springboot的智慧信息化机房管理系统

1 项目介绍 1.1 研究目的和意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对高校共享机房管理方面的要求也在不断提高&#xff0c;需要高校共享机房的人数更是不断增加&#xff0c;使得高校共享机房管理…

【Linux进阶】磁盘分区3——目录树,挂载

Linux安装模式下&#xff0c;磁盘分区的选择&#xff08;极重要&#xff09; 在Windows 系统重新安装之前&#xff0c;你可能会事先考虑&#xff0c;到底系统盘C盘要有多大容量&#xff1f;而数据盘D盘又要给多大容量等&#xff0c;然后实际安装的时候&#xff0c;你会发现其实…

【系统架构设计师】计算机组成与体系结构 ⑩ ( 磁盘管理 | 磁盘移臂调度算法 | 先来先服务算法 | 最短寻道时间优先 | 扫描算法 | 循环扫描算法 )

文章目录 一、磁盘移臂调度算法1、磁盘移臂调度算法简介2、先来先服务算法3、最短寻道时间优先4、扫描算法5、循环扫描算法 二、最短寻道时间优先算法示例 一、磁盘移臂调度算法 1、磁盘移臂调度算法简介 磁盘 数据块读取 的 性能 主要由 寻道时间旋转延时 决定 ; 旋转延时 …

软设之UML图中的用例图

UML图中用例图 用例图描述一组用例&#xff0c;参与者及它们之间的关系 关系包括&#xff1a; 包含关系&#xff0c;扩展关系&#xff0c;泛化关系 用例建模的流程&#xff1a; 识别参与者 合并需求获得用例 细化用例描述 调整用例模型

《C语言》认识数据类型和理解变量

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C语言基础 目录 前言 一、数据类型的介绍 1.1 字符型 1.2 整形 1.3 浮点型 1.4 布尔类型 1.5 各种数据类型的长度 1.5.1 sizeof操作符 1.5.2 数据类型长度…

【React Hooks原理 - useCallback、useMemo】

介绍 在实际项目中&#xff0c;useCallback、useMemo这两个Hooks想必会很常见&#xff0c;可能我们会处于性能考虑避免组件重复刷新而使用类似useCallback、useMemo来进行缓存。接下来我们会从源码和使用的角度来聊聊这两个hooks。【源码地址】 为什么要有这两个Hooks 在开始…

2.4章节python中字符串类型

在Python中&#xff0c;字符串&#xff08;String&#xff09;是一种基本的数据类型&#xff0c;用于表示文本信息。字符串可以包含字母、数字、标点符号或任何Unicode字符。Python中的字符串是不可变的&#xff0c;这意味着一旦创建了字符串&#xff0c;就不能更改字符串中的字…

无人机运营合格证及无人机驾驶员合格证(AOPA)技术详解

无人机运营合格证及无人机驾驶员合格证&#xff08;AOPA&#xff09;技术详解如下&#xff1a; 一、无人机运营合格证 无人机运营合格证是无人机运营企业或个人必须获得的证书&#xff0c;以确保无人机在运营过程中符合相关法规和标准。对于无人机运营合格证的具体要求和申请…

TF-IDF计算过程一步步推导详解含代码演示

相关概念 TF-IDF TF-IDF&#xff08;Term Frequency–Inverse Document Frequency&#xff09;是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法&#xff0c;用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在…

交叉测试的优点和缺点!

交叉测试在软件测试中具有重要的地位和作用。通过交叉测试&#xff0c;可以提高软件质量、提升用户体验、增加测试覆盖率、提高测试效率以及满足市场需求和竞争优势。因此&#xff0c;在软件开发和测试过程中&#xff0c;应充分重视交叉测试的实施和应用。 以下是对其优缺点的…

STM32/GD32驱动步进电机芯片TM2160

文章目录 官方概要简单介绍整体架构流程 官方概要 TMC2160是一款带SPI接口的大功率步进电机驱动IC。它具有业界最先进的步进电机驱动器&#xff0c;具有简单的步进/方向接口。采用外部晶体管&#xff0c;可实现高动态、高转矩驱动。基于TRINAMICs先进的spreadCycle和stealthCh…

el-input-number 点击加减只能加一次

el-input-number 点击加减只能加一次 <el-input-number v-model"editForm.quantity" placeholder"请输入下单数量(店均)" change"quantityChangeFn"></el-input-number>需要在方法里面加 this.$forceUpdate() quantityChangeFn(val…

Postman保存API返回的token以全局使用的整个流程

1、 调通获取token的接口&#xff0c;包含传递参数的类型&#xff0c;和输入密码是否需要md5加密&#xff0c;根据接口的要求&#xff0c;传入数据 2、 查看接口响应的报文&#xff0c;可以看到token的有效时间&#xff0c;token的类型&#xff0c;里面的access_token就是想要获…

如何利用代理IP打造热门文章

作为内容创作者&#xff0c;我们都知道&#xff0c;有时候地理限制和访问障碍可能会成为我们获取新鲜素材和优质信息的障碍。使用代理IP&#xff0c;正是突破这些限制的好方法&#xff01; 1. 无缝获取全球视野 如果你还在苦恼看不到其他地区的热点文章&#xff0c;你可以尝试…

react 自定义 年-月-日 组件,单独选择年、月、日,并且产生联动

自定义 年-月-日 组件 code import { useState } from react function Year_Month_Date() {const [yearList, setYearList] useState([])const [monthList, setMonthList] useState([])const [dateList, setDateList] useState([])const [currentYear, setCurrentYear] u…