【JavaWeb程序设计】JSP编程

目录

一、编写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.mfbz.cn/a/775933.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Purple Pi OH 更改SDK的编译选项

本文适用于在Purple Pi OH开发板更改SDK编译选项。触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党&#xff0c;极客&#xff0c;工程师&#xff0c;极大降低了开源鸿蒙开发者的入门门槛&#xff0c;具有以下…

【一念发动便是行】念头,就是命运

一个个恶念累积就是负能量&#xff0c;念头就是命运&#xff0c;克除恶念&#xff0c;防范念头&#xff0c;念头都有能量&#xff0c;学圣学须内外庄严检肃&#xff0c;言语有灵 多数人的问题都是出在念头上&#xff0c;念头&#xff0c;就是自己的命运&#xff1b; 当我们对自…

12 Dockerfile详解

目录 1. Dockerfile 2. Dockerfile构建过程 2.1. Dockerfile编写规则&#xff1a; 2.2. Docker执行Dockerfile的大致流程 2.3. 总结 3. Dockerfile指令 3.1. FROM 3.2. MAINTAINER 3.3. RUN 3.4. EXPOSE 3.5. WORKDIR 3.6. USER 3.7. ENV 3.8. VOLUME 3.9. ADD …

51单片机STC89C52RC——14.1 直流电机调速

目录 目的/效果 1&#xff1a;电机转速同步LED呼吸灯 2 通过独立按键 控制直流电机转速。 一&#xff0c;STC单片机模块 二&#xff0c;直流电机 2.1 简介 2.2 驱动电路 2.2.1 大功率器件直接驱动 2.2.2 H桥驱动 正转 反转 2.2.3 ULN2003D 引脚、电路 2.3 PWM&…

大模型LLMs概述:利用大模型 (LLMs) 解决信息抽取任务

论文标题&#xff1a;Large Language Models for Generative Information Extraction: A Survey 论文链接&#xff1a;https://arxiv.org/pdf/2312.17617.pdf 论文主要探讨了大型语言模型&#xff08;LLMs&#xff09;在生成式信息抽取&#xff08;IE&#xff09;任务中的应用…

知识库系统平台管理与优化

在之前做的关于FAQ知识库问答系统中&#xff0c;总结了相关踩坑内容&#xff0c;梳理如下&#xff0c;供大家参考。系统平台的管理与优化对于企业来说至关重要&#xff0c;它不仅关乎数据处理的效率&#xff0c;还直接影响到用户体验和业务成果。本文将从系统平台管理方式、系统…

World of Warcraft [CLASSIC] Talent Tree

World of Warcraft [CLASSIC] Talent Tree 天赋树模拟器 01&#xff09;初始化整个页面&#xff0c;选择游戏职业&#xff0c;初始化3个天赋树 02&#xff09;初始化天赋树结构&#xff0c;层次为N层 03&#xff09;每层有4个技能&#xff0c;设置可显示&#xff0c;设置隐藏…

通用代码生成器模板体系,语句和语句组

通用代码生成器或者叫动词算子式通用目的代码生成器是一组使用Java编写的通用代码生成器。它们的原理基于动词算子和域对象的笛卡尔积。它们没有使用FreeMarker和或者Velocity等现成的文件式模板引擎。而是使用java语言开发了一套专门为动词算子式代码生成器使用的模板API。而其…

uniapp启动安卓模拟器mumu

mumu模拟器下载 ADB&#xff1a; android debug bridge &#xff0c; 安卓调试桥&#xff0c;是一个多功能的命令行工具&#xff0c;他使你能够与连接的安卓设备进行交互 # adb连接安卓模拟器 adb connect 127.0.0.1:port # 查看adb设备 adb deviceshubuilderx 有内置的adb&a…

使用 Git Hooks 防止敏感信息泄露

欢迎关注公众号&#xff1a;冬瓜白 在日常开发中&#xff0c;我们可能会不小心将敏感信息提交到 Git。为了防止这种情况&#xff0c;可以利用 Git Hooks 编写一个简单的脚本&#xff0c;当发现提交中包含敏感词时&#xff0c;给出提示。 以下是一个基于 pre-commit 钩子的示例…

【MindSpore学习打卡】应用实践-计算机视觉-深入解析 Vision Transformer(ViT):从原理到实践

在近年来的深度学习领域&#xff0c;Transformer模型凭借其在自然语言处理&#xff08;NLP&#xff09;中的卓越表现&#xff0c;迅速成为研究热点。尤其是基于自注意力&#xff08;Self-Attention&#xff09;机制的模型&#xff0c;更是推动了NLP的飞速发展。然而&#xff0c…

Git代码提交流程

1. 核心流程 2. 完成流程

LeetCode 196, 73, 105

目录 196. 删除重复的电子邮箱题目链接表要求知识点思路代码 73. 矩阵置零题目链接标签简单版思路代码 优化版思路代码 105. 从前序与中序遍历序列构造二叉树题目链接标签思路代码 196. 删除重复的电子邮箱 题目链接 196. 删除重复的电子邮箱 表 表Person的字段为id和email…

我遭遇的奥数难题(持续更新)

第一题 地上有四堆石子&#xff0c;石子数分别是1、9、15、31。如果每次从其中的三堆同时各取出1个&#xff0c;然后都放入第四堆中&#xff0c;那么&#xff0c;能否经过若干次操作&#xff0c;使得四堆石子的个数都相同?(如果能&#xff0c;请说明具体操作&#xff0c;不能…

【html】许多大型网页都会有一个自己的主题色

许多网站确实会选择一种或几种特定的颜色作为他们的主题色&#xff0c;这通常是为了建立品牌识别度和一致性。 主题色在网站设计中起着至关重要的作用&#xff0c;它们不仅影响网站的视觉效果&#xff0c;还能传达品牌的情感和价值观。选择适当的主题色可以增强用户的品牌记忆…

从传统到智能:工业园区消防管理开始华丽转身

一、工业园区的消防管理现状 然而&#xff0c;当我们审视当前工业园区的消防管理现状时&#xff0c;不难发现其中存在诸多不足。首先&#xff0c;消防信息的智能化程度低&#xff0c;仿佛一位年迈的守望者&#xff0c;力不从心&#xff0c;难以即时将现场的数据信息传达至指挥…

重定向与转发

转发参数不会自动包含在新的请求中。若要将参数传递给重定向地址&#xff0c;可以在服务器端显式地添加参数到重定向URL中。 在重定向URL中包含参数 import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; impor…

TCP的pop网络模式

TCP的pop网络模式 1、tcp连接的状态有以下11种 CLOSED&#xff1a;关闭状态LISTEN&#xff1a;服务端状态&#xff0c;等待客户端发起连接请求SYN_SENT&#xff1a;客户端已发送同步连接请求&#xff0c;等待服务端相应SYN_RECEIVED&#xff1a;服务器收到客户端的SYN请请求&…

巨头们涌入的医疗大模型,何时迎来最好的商业时代?_google医疗大模型 医疗大模型

当下极为火爆的大模型&#xff0c;在医疗赛道同样炙手可热。谷歌刚刚发布了准确率达 91.1%、性能远超 GPT-4 系列的多模态医学大模型 Med-Gemini&#xff0c;国内市场亦很热闹。自 2023 年以来&#xff0c;百度、腾讯、京东等诸多大厂都相继加码医疗大模型领域&#xff0c;与医…

C++:Level3阶段测试

1、黑客小知识&#xff1a; &#xff08;1&#xff09;常用的黑客头文件有____和____。 &#xff08;2&#xff09;创建文件的函数叫做________。 &#xff08;3&#xff09;我更新了____个黑客头文件。 &#xff08;4&#xff09;万能头文件包含的黑客头文件是________。 …