【JavaWeb程序设计】JSP编程II

news2024/11/18 4:30:47

目录

一、输入并运行下面的import_test.jsp页面

1.1 代码运行结果

1.2 修改编码之后的运行结果

二、errorPage属性和isErrorPage属性的使用

2.1 下面的hello.jsp页面执行时将抛出一个异常,它指定了错误处理页面为errorHandler.jsp。

2.1.2 运行截图

2.2 下面的errorHandler.jsp是错误处理页面。

2.2.1 运行截图

2.3 按下面方法修改hello.jsp页面,将请求参数值编码转换为汉字编码。

三、表单处理

3.1 编写表单页面regUser.jsp

3.2 表单提交到页面UserInfo.jsp,显示注册信息。

3.3 要求页面提交时使用javascript脚本对表单元素进行检查,如必填字段、邮件、电话的格式检查以及字段长度的检查等。注意中文的处理。

3.1.1 运行截图

3.1.2 regUser.jsp

(1)JS代码

(2) CSS代码

(3) HTML代码 

3.1.3 UserInfo.jsp

(1)CSS代码

(2)HTML代码 


一、输入并运行下面的import_test.jsp页面

<%@ page import="java.util.Date,java.text.DateFormat" %>

<html>

<head><title>page指令示例</title></head>

<body>

<h3 align="center">使用page指令导入java.util.Date类</h3>

<% Date date = new Date();

  String s = DateFormat.getDateInstance().format(date);

  String s2 = DateFormat.getDateInstance(DateFormat.FULL).format(date);

%>

<p align="center">现在的时间是:<%=s%>

<p align="center">现在的时间是:<%=s2%>

</body>

</html>

访问上述JSP页面,输出结果如下图所示

图1 import_test.jsp页面的运行结果

可以看到页面中最后一行的中文显示为乱码,将下面代码加到JSP页面中:

<%@ page contentType="text/html;charset=UTF-8" %>

重新访问页面,中文显示正常。这说明可以使用page指令的contentType属性指定页面输出使用的字符编码。默认情况下,JSP页面使用的字符集是iso-8859-1编码,如使用汉字编码应指定为 UTF-8  其他支持中文的字符集 

1.1 代码运行结果

1.2 修改编码之后的运行结果

二、errorPage属性和isErrorPage属性的使用

2.1 下面的hello.jsp页面执行时将抛出一个异常,它指定了错误处理页面为errorHandler.jsp。

<%@ page contentType="text/html;charset=gb2312" %>

<%@ page errorPage="errorHandler.jsp" %>

<html>

<body>

<%

 String name = request.getParameter("name");

if (name == null){

throw new RuntimeException("没有指定name 属性。");

}

%>

Hello, <%= name %>

</body>

</html>

2.1.2 运行截图

2.2 下面的errorHandler.jsp是错误处理页面。

<%@ page contentType="text/html; charset=gb2312" %>

<%@ page isErrorPage="true" %>

<html>

<body>

请求不能被处理:<%=exception.getMessage()%><br>

请重试!

</body>

</html>

用下面的URL访问hello.jsp页面,就会产生下面结果:

  http://localhost:8080/bookstore/hello.jsp

图6.3 errorHandler.jsp页面的运行结果

这说明没有提供name参数,hello.jsp页面中抛出RuntimeException异常,所以调用错误页面。

如果使用下面URL访问hello.jsp页面,将产生下面正常的页面:

  http://localhost:8080/bookstore/hello.jsp?name=Mary

图6.4 hello.jsp页面的运行结果

2.2.1 运行截图

注意:如果请求参数值使用汉字,仍然产生乱码,例如:

  http://localhost:8080/bookstore/hello.jsp?name=欧阳清风

这是因为请求参数默认使用iso-8859-1编码传递,如果要正确显示中文,应将请求参数编码转换为gb2312编码

由于我的Tomcat服务器是在8.0以上编码为UTF-8,所以我这边显示中文的时候并不会出现乱码。

2.3 按下面方法修改hello.jsp页面,将请求参数值编码转换为汉字编码。

<%@ page contentType="text/html;charset=gb2312" %>

<%@ page errorPage="errorHandler.jsp" %>

<html><body>

<%

String name = request.getParameter("name");

if (name==null){

  throw new RuntimeException("没有指定name 属性。");

}

else{

  // 将字符串name的字符编码转换为汉字编码

  name = new String(name.getBytes("iso-8859-1"),"gb2312");

}

%>

Hello, <%=name %>

</body></html>

此时,还会出现中文乱码吗,应如何处理?

由于浏览器对中文编码,所以依旧会出现中文乱码。(这里看不懂可以看我上一篇博客)

解决办法:添加下列代码

修改之后再次运行,成功显示中文。 

三、表单处理

3.1 编写表单页面regUser.jsp

3.2 表单提交到页面UserInfo.jsp,显示注册信息。

3.3 要求页面提交时使用javascript脚本对表单元素进行检查,如必填字段、邮件、电话的格式检查以及字段长度的检查等。注意中文的处理。

3.1.1 运行截图

由于保护个人隐私,部分信息会打马赛克

(1)*必填未填写完整提交表单

(2)密码格式错误

(3)两次输入的密码不一致

(4)*必填填完提交表单

        成功提交表单 

(5)邮箱格式/手机格式错误

无法提交表单

 (6)正确输入

提交的表单信息:没有获取密码!!

【备注】代码中引用的jquery:

3.1.2 regUser.jsp

(1)JS代码
<script type="text/javascript" src="../../JS/jquery-3.4.1.min.js"></script>
    <script>
        /*************************格式检查*******************************/
        // 密码:6-12位
        var passwordPattern = /^[A-Za-z0-9]{6,12}$/;
        // 邮箱
        var emailPattern = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
        // 手机号:11位数字
        var phonePattern = /^\d{11}$/;

        //自定义函数:设置错误信息元素的文本内容和样式类
        function setErrorElement(errorElement, text, removeClass, addClass) {
            errorElement.text(text); //要设置的文本内容
            errorElement.removeClass(removeClass); // 要移除的样式类
            errorElement.addClass(addClass); // 要添加的样式类
        }

        //获取输入框的值并设置错误信息的相关元素
        function validateField(input, isRequired, isSubmit) {
            var value = input.value.trim(); //获取了输入框的值,并使用trim()方法去除前后的空白字符
            var errorId = input.id + "-errorMessage";//根据输入框的id生成对应的错误信息元素的id
            var errorElement = $("#" + errorId);//使用jQuery选择器通过错误信息元素的id获取对应的元素,并将其赋值给变量errorElement

            //清除之前的错误信息
            errorElement.text("");

            //对输入框的值进行判空处理
            if (value === "") {
                //如果是必填字段
                if (isRequired === true) {
                    //在表单提交时验证
                    if (isSubmit) {
                        setErrorElement(errorElement, "该字段不能为空!!", "success-message", "error-message");
                        return false; //验证不通过,阻止表单提交
                    } else {
                        //失去焦点时验证
                        setErrorElement(errorElement, "*必填", "success-message", "error-message");
                        return true; //验证通过,可以稍后再填
                    }
                } else {
                    //如果不是必填字段,则验证通过
                    return true;
                }
            }
            //格式检查,如果没有按要求输入,则给出相应的提示
            switch (input.id) {
                case "password": //1. 密码
                    if (!passwordPattern.test(value)) {
                        setErrorElement(errorElement, "请输入6-12位数字或字母!", "success-message", "error-message");
                        return false;
                    }
                    break;
                case "confirmPwd": //2. 第二次输入的密码
                    // 判断两次输入的密码是否一致
                    var password = $("#password").val();
                    if (value !== password) {
                        setErrorElement(errorElement, "两次输入的密码不一致!", "success-message", "error-message");
                        return false;
                    }
                    break;
                case "phone":   //3. 手机
                    if (!phonePattern.test(value)) {
                        setErrorElement(errorElement, "请输入11位数字!", "success-message", "error-message");
                        return false;
                    }
                    break;
                case "email":  //4. 邮箱
                    if (!emailPattern.test(value)) {
                        setErrorElement(errorElement, "邮箱格式错误!", "success-message", "error-message");
                        return false;
                    }
                    break;
            }
            //按要求输入的话,输入框后打√
            setErrorElement(errorElement, "✔", "error-message", "success-message")
            return true;
        }
 /*************************最终验证****************************/
        function validateForm() {
            //验证输入框的值:先获取各字段的id,再判断该输入框是否必填,最后是表单提交的验证。
            var flag0 = validateField(document.getElementById("username"), true, true);
            // var flag0 = validateField($("#username").object, true);
            var flag1 = validateField(document.getElementById("password"), true, true);
            var flag2 = validateField(document.getElementById("confirmPwd"), true, true);
            var flag3 = validateField(document.getElementById("realName"), true, true);
            var flag4 = validateField(document.getElementById("email"), false, true);
            var flag5 = validateField(document.getElementById("phone"), false, true);
            if (flag0 === true && flag1 === true && flag2 === true && flag3 === true && flag4 === true && flag5 === true) {
                return true;
            } else {
                return false;
            }
        }

        $(document).ready(function () {
            $('#regForm').submit(function () {
                return validateForm();
            });
        });

    </script>
(2) CSS代码
  <style>
        body {
            display: flex;
            justify-content: center;
        }

        #form-container {
            display: flex;
            justify-content: center;
        }

        .redText {
            color: red;
        }

        .pinkTest {
            color: deeppink;
        }

        .error-message {
            color: red;
        }

        .success-message {
            color: green;
        }

        .address-contain {
            width: 250px;
            height: 80px;
        }

    </style>
(3) HTML代码 
<%--
  Created by IntelliJ IDEA.
  User: 86189
  Date: 2023/10/9
   在必填字段和有格式要求字段的输入框旁边有一个红色文本用于显示输入错误信息。
  当字段失去焦点时,会触发相应的验证函数进行格式检查,并在错误信息文本中显示相应的提示。
  表单提交时调用validateForm()函数进行最终验证,如果所有字段都通过了格式检查,则允许表单提交。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>新用户注册</title>
    
  
</head>
<body>
<div id="form-container">
    <form action="UserInfo.jsp" onsubmit="return validateForm()" method="post">
        <table width="600px">
            <h1 align="center" class="pinkTest">新用户注册</h1>
<%--------------------------输入用户名------------------------------%>
            <tr>
                <td align="left" width="150px">用户名:</td>
                <td align="left">
                    <input type="text" id="username" name="username" onblur="validateField(this,true,false)">
                    <span class="redText" id="username-errorMessage">*必填</span>
                </td>
            </tr>
<%---------------------------输入密码-------------------------------%>
            <tr>
                <td>用户密码:</td>
                <td><input type="password" id="password" name="password" onblur="validateField(this,true,false)">
                    <span class="redText" id="password-errorMessage">*必填</span></td>
            </tr>
<%--------------------------再次输入密码----------------------------%>
            <tr>
                <td>确认密码:</td>
                <td><input type="password" id="confirmPwd" name="confirmPwd" onblur="validateField(this,true,false)">
                    <span class="redText" id="confirmPwd-errorMessage">*必填</span></td>
            </tr>
<%------------------------输入姓名-------------------------------%>
            <tr>
                <td>真实姓名:</td>
                <td><input type="text" id="realName" name="realName" onblur="validateField(this,true,false)">
                    <span class="redText" id="realName-errorMessage">*必填</span></td>
            </tr>
<%--------------------------选择性别-----------------------------%>
            <tr>
                <td style="height: 60px">性别:</td>
                <td>
                    <input type="radio" id="male" name="gender" value="男"> 男
                    <input type="radio" id="female" name="gender" value="女"> 女
                </td>
            </tr>
<%-----------------------选择出生日期-------------------------%>
            <tr>
                <td>出生日期:</td>
                <td><input type="date" id="birthDate" name="birthDate" onblur="validateField(this,false,false)"></td>
            </tr>
<%--------------------------输入邮件-------------------------%>
            <tr>
                <td>电子邮件:</td>
                <td>
                    <input type="email" id="email" name="email" style="width: 300px;"
                           onblur="validateField(this,false,false)">
                    <span class="redText" id="email-errorMessage"></span>
                </td>
            </tr>
<%-------------------------输入联系电话-----------------------------%>
            <tr>
                <td>联系电话:</td>
                <td>
                    <input type="tel" id="phone" name="phone" style="width: 300px;"
                           onblur="validateField(this,false,false)">
                    <span class="redText" id="phone-errorMessage"></span>
                </td>
            </tr>
<%-------------------------输入联系地址-----------------------------%>
            <tr>
                <td>联系地址:</td>
                <td><textarea id="address" name="address" class="address-contain"
                              onblur="validateField(this,false,false)"></textarea>
                </td>
            </tr>
<%--------------------------两个按钮------------------------------%>
            <tr>
                <td align="center"><input type="submit" value="提交"></td>
                <td align="center"><input type="reset" value="重置"></td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

3.1.3 UserInfo.jsp

(1)CSS代码
 <style>
        table {
            display: flex;
            justify-content: center;
            /*border: 1px black solid;*/
        }
    </style>
(2)HTML代码 
<%--
  Created by IntelliJ IDEA.
  User: 86189
  Date: 2023/10/9
  Time: 11:10
  显示注册信息
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 获取从注册页面传递过来的参数,除了密码 --%>
<%
    request.setCharacterEncoding("utf-8");
    String UN_WRITE = "未填写";
    String UN_CHOOSE = "未选择";
    String username = request.getParameter("username"); //必填
    String realName = request.getParameter("realName"); //必填
    String gender = request.getParameter("gender") == null ? UN_CHOOSE : request.getParameter("gender");
    String birthDate = request.getParameter("birthDate").equals("") ? UN_WRITE : request.getParameter("birthDate");
    String email = request.getParameter("email").equals("") ? UN_WRITE : request.getParameter("email");
    String phone = request.getParameter("phone").equals("") ? UN_WRITE : request.getParameter("phone");
    String address = request.getParameter("address").equals("") ? UN_WRITE : request.getParameter("address");
%>
<html>
<head>
    <meta charset="UTF-8">
    <title>注册信息</title>
   
</head>
<body>
<div><h1 align="center">注册信息</h1></div>
<div>
    <table>
        <tr>
            <td>用户名:</td>
            <td><%= username %>
            </td>
        </tr>
        <tr>
            <td>真实姓名:</td>
            <td><%= realName %>
            </td>
        </tr>
        <tr>
            <td>性别:</td>
            <td><%= gender %>
            </td>
        </tr>
        <tr>
            <td>出生日期:</td>
            <td><%= birthDate %>
            </td>
        </tr>
        <tr>
            <td>电子邮件:</td>
            <td><%= email %>
            </td>
        </tr>
        <tr>
            <td>联系电话:</td>
            <td><%= phone %>
            </td>
        </tr>
        <tr>
            <td>联系地址:</td>
            <td><%= address %>
            </td>
        </tr>
    </table>
</div>
</body>
</html>

四、心得体会

1. 除了学习掌握基本的语法和表单处理,我还学会了JSP的指令和动作,特别是page指令的属性。通过设置<%@ page contentType="..." %>和<%@ page pageEncoding="..." %>属性,我可以指定响应的内容类型和页面的字符编码,确保正确的数据传输和显示。此外,我还学习了如何处理错误页面和设置当前页面为错误页面,以及如何使用其他指令和动作来增强JSP页面的功能。

2. 学会用JS进行表单验证,如:

(1)对输入框进行格式检查:在输入框失去焦点时,会触发相应的验证函数进行格式检查,并在错误信息文本中显示相应的提示。例如,密码必须是6-12位的数字或字母,手机号码必须是11位数字等。

(2)设置错误信息元素的文本内容和样式类:自定义了一个函数setErrorElement,用于设置错误信息元素的文本内容和样式类。

(3)尝试使用jQuery库,以便简化DOM操作。

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

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

相关文章

罗剑锋的C++实战笔记学习(一):const、智能指针、lambda表达式

1、const 1&#xff09;、常量 const一般的用法就是修饰变量、引用、指针&#xff0c;修饰之后它们就变成了常量&#xff0c;需要注意的是const并未区分出编译期常量和运行期常量&#xff0c;并且const只保证了运行时不直接被修改 一般的情况&#xff0c;const放在左边&…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署ComfyUI:功能最强大、模块化程度最高的Stable Diffusion图形用户界面和后台

目录 ComfyUI的特性介绍 开始安装 做点准备工作 在Conda虚拟环境中进行 依赖项的安装 运行 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&…

2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码

经过不懈的努力&#xff0c; 2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码已完成&#xff0c;代码为C题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模…

适用于 Windows的 5 个最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式&#xff0c;但是&#xff0c;此类文件存在限制&#xff0c;使其难以修改或编辑。因此&#xff0c;您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器&#xff0c;每个转换器的功能略有不同…

KDTree 简单原理与实现

介绍 K-D树是一种二叉树的数据结构&#xff0c;其中每个节点代表一个k维点&#xff0c;可用于组织K维空间中的点&#xff0c;其中K通常是一个非常大的数字。二叉树结构允许对多维空间中的点进行非常有效的搜索&#xff0c;包括最近邻搜索和范围搜索&#xff0c;树中的每个非叶…

嵌入式系统中状态机实现详解

嵌入式开发中系统经常处于某种状态,如何处理呢?接下来分析一下,状态机的实现无非就是 3 个要素:状态、事件、响应。转换成具体的行为就 3 句话。 发生了什么事? 现在系统处在什么状态? 在这样的状态下发生了这样的事,系统要干什么? 用 C 语言实现状态机主要有 3 种方法…

机器学习——岭回归

1、岭回归与线性回归的区别 岭回归&#xff08;Ridge Regression&#xff09;和线性回归&#xff08;Linear Regression&#xff09;都是用于回归分析的统计方法&#xff0c;但它们在处理方式和应用场景上有一些关键的区别&#xff1a; a)基本概念 线性回归&#xff1a;目标是…

帕金森病患者在选择运动疗法时应该注意哪些事项?

帕金森病患者在选择运动疗法时&#xff0c;应该遵循以下几点注意事项&#xff1a; 个性化运动处方&#xff1a;根据患者的病情、年龄、健康状况、以往运动能力等因素&#xff0c;制定个体化的运动处方。 避免运动负荷过大&#xff1a;运动时间不宜过长&#xff0c;注意控制心率…

【优化论】约束优化算法

约束优化算法是一类专门处理目标函数在存在约束条件下求解最优解的方法。为了更好地理解约束优化算法&#xff0c;我们需要了解一些核心概念和基本方法。 约束优化的核心概念 可行域&#xff08;Feasible Region&#xff09;&#xff1a; 比喻&#xff1a;想象你在一个园艺场…

量化机器人:金融市场的智能助手

引言 想象一下&#xff0c;在繁忙的金融市场中&#xff0c;有一位不知疲倦、冷静客观的“超级交易员”&#xff0c;它能够迅速分析海量数据&#xff0c;精准捕捉交易机会&#xff0c;并自动完成买卖操作。这位“超级交易员”不是人类&#xff0c;而是我们今天要聊的主角——量…

SSM家庭理财个人理财系统-JAVA【数据库设计、源码、开题报告】

第一章 绪论 1.1 课题背景、目的及意义 从 20 世纪末以来&#xff0c;在全球经济日趋一体化的背景之下&#xff0c;中国经济也得到了飞速的发展&#xff0c;家庭收入也快速增长。居民的消费结构发生了巨大变化&#xff0c;购置房产、旅游、汽车消费、教育等成为居民消费重点。…

SQL使用join查询方式找出没有分类的电影id以及名称

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 现有电影信息…

ABAP 生成word文档

1.创建模板 通过开发工具->空间->格式文本为word添加变量 选中要设为变量的文本&#xff0c;点击格式文本&#xff0c;然后在属性页签设置变量名 模板使用示例参考ZABAPDOCX包下的模板 2. 代码生成 参考ZABAPDOCX包下示例程序&#xff0c;可直接执行下载word文档 如果…

linux ifconfig未找到命令

linux ifconfig未找到命令 1、使用yum安装net-tools yum install net-toolsyum报未找到命令请查看文章vim未找到命令&#xff0c;且yum install vim安装vim失败 2、安装后使用ifconfig命令 ifconfig

【Kubernetes】Pod 资源调度之亲和性调度

Pod 资源调度之亲和性调度 1.Node 亲和性调度1.1 Node 硬亲和性1.2 Node 软亲和性 2.Pod 亲和性调度2.1 Pod 硬亲和2.2 Pod 软亲和2.3 Pod 反亲和 Kubernetes 的 默认调度器 以 预选、优选、选定机制 完成将每个新的 Pod 资源绑定至为其选出的目标节点上&#xff0c;不过&#…

解决数据库PGSQL,在Mybatis中创建临时表报错TODO IDENTIFIER,连接池用的Druid。更换最新版本Druid仍然报错解决

Druid版本1.1.9报错Caused by: java.sql.SQLException: sql injection violation, syntax error: TODO IDENTIFIER : CREATE TEMPORARY TABLE temp_ball_classify (id int8 NOT NULL,create_time TIMESTAMP,create_by VARCHAR,classify_name VARCHAR) 代码如下&#xff1a; 测…

基于java+springboot+vue实现的在线课程管理系统(文末源码+Lw)236

摘要 本文首先介绍了在线课程管理系统的现状及开发背景&#xff0c;然后论述了系统的设计目标、系统需求、总体设计方案以及系统的详细设计和实现&#xff0c;最后对在线课程管理系统进行了系统检测并提出了还需要改进的问题。本系统能够实现教师管理&#xff0c;科目管理&…

Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了

新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死&#xff0c;鼠标和键盘都操作不了 大概原因就是,初始化默认Google的安卓模拟器占用的RAM内存是2048&#xff0c;如果电脑的性能和内存一般的话就可能卡死&#xff0c;解决方案是手动修改安卓模拟器的config文件&…

皮卡超级壁纸 | 幸运壁纸幸运壁纸app是一款涵盖了热门影视剧、动漫、风景等等资源的装饰工具,

软件下载链接&#xff1a;壁纸下载方式在链接中文章底部 皮卡超级壁纸 皮卡超级壁纸是一款专为手机用户设计的壁纸应用&#xff0c;它提供了丰富多样的高清壁纸资源&#xff0c;让用户的手机界面焕然一新。这款应用以其海量的壁纸库和用户友好的操作界面&#xff0c;在市场上…

模型加载gltf

3. 加载.gltf文件(模型加载全流程) | Three.js中文网 (webgl3d.cn) 1.引入GLFloader.js模型加载器 import {GLTFloader} from three/addons/loader/GLTFloader.js; 2.GLTF加载器new GLTFloader() 执行new GLTFloader()就可以实例化一个gltf加载器对象 const loader new …