JavaWeb课程设计项目实战(09)——项目编码实践6

news2024/11/23 17:00:13

版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

在这里插入图片描述
在本节教程中,我们实现修改学生的功能。当在学生列表页面点击修改后首先将依据id查询该生的详细信息,然后将这些信息展示在修改页面。当完成学生信息修改后点击修改即可将学生最新信息保存至数据库并回到学生列表。从以上分析可知,修改功能包含以下步骤:

  • 1、依据id查询学生信息
  • 2、在修改页面显示学生信息
  • 3、在修改页面修改学生信息
  • 4、将学生最新信息保存至数据库
  • 5、跳转至学生列表并刷新

QueryStudentServlet

请在servlet包下创建QueryStudentServlet,代码如下:

package com.cn.servlet;

import com.cn.util.C3P0Utils;
import com.cn.bean.Student;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
 * 本文作者:谷哥的小弟
 * 博客地址:http://blog.csdn.net/lfdfhl
 */

@WebServlet(name = "QueryStudentServlet", urlPatterns = "/QueryStudentServlet")
public class QueryStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int sid = Integer.parseInt(request.getParameter("id"));
        Student student = null;
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            connection = C3P0Utils.getConnection();
            String sql = "SELECT * FROM student WHERE id =?";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, sid);
            preparedStatement.executeQuery();
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String gender = resultSet.getString("gender");
                String hobby = resultSet.getString("hobby");
                student = new Student(id, name, age, gender, hobby);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            C3P0Utils.release(connection, preparedStatement, resultSet);
        }
        request.setAttribute("student", student);
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/studentUpdate.jsp");
        requestDispatcher.forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

图示如下:

在这里插入图片描述

修改学生页面

QueryStudentServlet查询到学生信息后将跳转到修改学生页面,图示如下:
在这里插入图片描述

请在web文件夹下创建studentUpdate.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<head>
    <title>更新学生</title>
    <style type="text/css">
        #updateForm {
            text-align: center;
            margin-top: 5%;
        }
        tr{
            height: 30px;
        }
    </style>
    <script type="text/javascript">
        function back() {
            window.location.href = "${pageContext.request.contextPath}/ShowStudentServlet";
        }
    </script>
</head>
<body bgcolor="#e2e6c2">
<div id="updateForm">
    <h3>学生信息</h3>
    <input type="button" name="back" value="返回" onclick="back()"/>
    <br/><br/>
    <form action="${pageContext.request.contextPath}/UpdateStudentServlet" method="post">
        <table style="margin: auto;">
            <tr>
                <td>学号</td>
                <td><input type="text" name="id" value="${student.id}" readOnly="true"/></td>
            </tr>
            <tr>
                <td>姓名</td>
                <td><input type="text" name="name" value="${student.name}"/></td>
            </tr>
            <tr>
                <td> 年龄 </td>
                <td><input type="text" name="age" value="${student.age}"/></td>
            </tr>
            <tr>
                <td> 性别</td>
                <td  style="display: flex;align-items: center;">
                    <input type="radio" style="width:10%" name="gender" value="男" ${student.gender=="男"?"checked":""} />男
                    <input type="radio" style="width:10%" name="gender" value="女" ${student.gender=="女"?"checked":""}/>女</td>
            </tr>
            <tr>
                <td>爱好 </td>
                <td><input type="text" name="hobby" value="${student.hobby}"/></td>
            </tr>
        </table>
        <input type="submit" value="修改">
        <input type="reset" value="重置">
    </form>
</div>
</body>
</html>

UpdateStudentServlet

当在studentUpdate.jsp页面填写完学生信息后点击修改将学生最新数据保存至数据库。请在servlet包下创建UpdateStudentServlet,代码如下:

package com.cn.servlet;

import com.cn.util.C3P0Utils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
/**
 * 本文作者:谷哥的小弟
 * 博客地址:http://blog.csdn.net/lfdfhl
 */

@WebServlet(name = "UpdateStudentServlet", urlPatterns = "/UpdateStudentServlet")
public class UpdateStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        int age = Integer.parseInt(request.getParameter("age"));
        String gender = request.getParameter("gender");
        String hobby = request.getParameter("hobby");
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            connection = C3P0Utils.getConnection();
            String sql = "update student set name=?,age=?,gender=?,hobby=? where id=?";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, name);
            preparedStatement.setInt(2, age);
            preparedStatement.setString(3, gender);
            preparedStatement.setString(4, hobby);
            preparedStatement.setInt(5, id);
            int result = preparedStatement.executeUpdate();
            if (result > 0){
                System.out.println("success");
            } else{
                System.out.println("error");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            C3P0Utils.release(connection, preparedStatement, null);
        }
        String contextPath = request.getContextPath();
        response.sendRedirect(contextPath+"/ShowStudentServlet");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

图示如下:
在这里插入图片描述

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

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

相关文章

Transformer Encoder (Bert)

参考&#xff1a;图解Self-Attention_子燕若水的博客-CSDN博客 举个例子&#xff1a; 假设输入数据形状为(243,34),表示的是243帧,每帧包含34个特征(比如17个关键点的x,y坐标)。那么这个数据在Transformer Encoder中的流动过程如下: 输入数据shape是(243, 34),表示243个时间…

【字符流】案例:点名器

案例&#xff1a;点名器 1.需求&#xff1a; 我有一个文件里面存储了班级同学的姓名&#xff0c;每一个姓名占一行&#xff0c;要求通过程序实现随机点名器 2.思路&#xff1a; 创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字…

vue ---- filters过滤器中不能使用this问题

在日常开发中&#xff0c;使用filters是很正常&#xff0c;最近遇到切换单位&#xff0c;页面上显示的数据要根据单位转换&#xff0c;这时就需要根据data里面的变量去转换&#xff0c;可是filters里面不能使用this 解决&#xff1a; 1、先在return中声明一个变量that&#xf…

vuejs源码之模版编译原理

之前我们说过虚拟dom&#xff0c;也就是虚拟dom拿到vnode后所做的事情&#xff0c;而模版编译是如何让虚拟dom拿到vnode。 模版编译的目标就是生成渲染函数&#xff0c;而渲染函数的作用是每次执行它&#xff0c;它就会使用当前最新的状态生成一份新的vnode&#xff0c;然后用…

========Java基础——小结1========

一、Java 两大版本 Java 主要分为两个版本: Java SE 和Java EE。 Java SE 全称Java Platform Standard Edition&#xff0c;是 Java 的标准版&#xff0c;主要用于桌面应用程序开发&#xff0c;它包含了 Java 语言基础、JDBC (Java 数据库连接)、I/O (输入/输出)、TCP/IP 网络…

【问题记录】Ubuntu 22.04 环境下,程序报:段错误(核心已转储)怎么使用 core 文件和GDB调试器 解决?

目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware Workstation 16 Pro &#xff08;版本&#xff1a;16.1.2 build-17966106&#xff09;ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时&#xff0c;程序运行报&#xff1a…

语音基石模型Speech Foundation Models

语音基石模型&#xff08;Speech Foundation Models&#xff09; 主要包含三部分&#xff1a; 1.语音表示学习&#xff08;Speech representation learning&#xff09; 自监督学习模型&#xff08;Self-suprevised learning, SSL model&#xff09;Representation benchmark…

CMU 15-445 -- Embedded Database Logic - 12

CMU 15-445 -- Embedded Database Logic - 12 引言User-Defined Functions (UDF)SQL FunctionsExternal Programming Language Stored ProceduresStored Procedures 与 UDF 的区别 Database TriggersChange NotificationsUser-Defined Types (UDT)Viewsviews vs select...intov…

区别出过孔的内径、外径、单边孔环、电镀铜厚

自记&#xff1a; 这个参数是啥&#xff1f;下图区别出过孔的内径、外径、单边孔环、电镀铜厚 嘉立创单双面最小过孔内径0.3mm/外径0.6mm&#xff08;极限0.56mm&#xff09;&#xff0c;四、六层最小过孔内径0.2mm/外径0.45mm&#xff08;极限0.40mm&#xff09;&#xff0c;外…

学习day50

自定义指令总结&#xff1a; 一&#xff1a;定义语法&#xff1a; (1)局部指令&#xff1a; new Vue({ directives{指令名&#xff0c;配置对象} }) 或 new Vue({ directives{指令名&#xff0c;回调函数} }) (2)全局对象 Vue.dir…

基于Gym Anytrading 的强化学习简单实例

近年来强化学习(RL)在算法交易领域受到了极大的关注。强化学习算法从经验中学习并基于奖励优化行动使其非常适合交易机器人。在这篇文章&#xff0c;我们将简单介绍如何使用Gym Anytrading环境和GME (GameStop Corp.)交易数据集构建一个基于强化学习的交易机器人。 强化学习是…

【Java从0到1学习】05 Java 数组

1. 数组概述 需求&#xff1a;现在需要统计某公司员工的工资情况&#xff0c;例如计算平均工资、找到最高工资等。假设该公司有80名员工&#xff0c;用前面所学的知识&#xff0c;程序首先需要声明80个变量来分别记住每位员工的工资&#xff0c;然后在进行操作&#xff0c;这样…

MySQL一些知识

六、MySQL命令参数 七、远程登录 use mysql 八、SQL语句和常见的SQL操作 九、数据库和表的创建及插入 指定字段名称&#xff0c;按照表的字段名称顺序写&#xff1a; 指定字段名称&#xff1a; 字段名称可以不全部指定&#xff1a;

SpringBoot(三)

文章目录 前言一.日志的作用二.日志的使用2.1 自定义日志打印三.日志的级别3.1 日志级别的作用3.2 日志级别的分类和使用 四.⽇志持久化 前言 日志在应用程序中扮演着至关重要的角色&#xff0c;它是软件开发、运维和故障排查中不可或缺的工具。无论是大型企业级应用还是小型个…

node插件的安装、HTTP协议

接口测试与UI测试&#xff08;功能测试&#xff0c;UI的自动化测试&#xff09;有什么区别&#xff1f; 1、接口测试更多测试的是客户端与后端之间的交互 2、接口测试也是可以完全的测试产品功能测试场景 UI测试&#xff1a; 1、页面的交互 2、页面的各种提示信息的验证 …

C#栈、List结构的简单搭建

1、栈是一种先进后出的结构&#xff0c;如图&#xff1a; 我们用代码&#xff0c;简单实现一下&#xff1a; public class StackTest<T>{private T[] stack { get; set; }public int length { get; set; }public StackTest(){length 0;stack new T[length];}public vo…

[JVM]String str1 = new String(“yhz“)和 String str2 = “yhz“ 的区别

文章目录 0、前情1、相同之处2、不同之处3、解释前情 0、前情 为什么str1 str2 就返回true&#xff0c;而str1str3 就返回false&#xff1f;先看内存图解释 1、相同之处 String str1new String(“yhz”)和String str2“yhz”&#xff0c;都会先去字符串常量池中查看是否已经存…

Helm KinD kubectl krew Istio急速安装

本篇更新网上许多安装失效的工具&#xff0c;如krew和KinD。 本篇测试使用时间为2023/7/20&#xff0c;基本都为最新版本或最新稳定版本。 前置 Helm 是 Kubernetes 的一个包管理工具&#xff0c;用于简化 Kubernetes 应用的部署和管理。Helm 使用名为 "chart" 的打…

QDialog的两种显示方式

QDialog的两种显示方式 模态显示非模态显示 QDialog不能嵌入到其他窗口中显示&#xff08;无论继承与否&#xff09; 模态显示 d->exec(); 阻塞程序的执行 非模态显示 d->show(); 不阻塞程序

A--玉米大炮--2022河南萌新联赛第(三)场:河南大学

输入 3 3 1 1 2 2 3 3 输出 0 说明 开始时,小蓝控制所有大炮立即发射炮弹,僵王博士受到 666 点伤害,直接被击溃。 示例2 输入 2 20 5 1 5 3 输出 2 说明 开始时,小蓝控制所有大炮立即发射炮弹,僵王博士受到 101010 点伤害, 一秒后一号大炮装填完毕,小蓝控制其攻击僵王…