当前位置: 首页 > news >正文

Servlet练习

练习准备

编写Student和StudentDao

package beans;public class Student{private String num;private String name;public Student(){}public String getNum() {return num;}public String getName() {return name;}public void setNum(String num) {this.num = num;}public void setName(String name) {this.name = name;}
}
package dao;import beans.Student;import java.sql.*;
import java.util.ArrayList;public class StudentDao{private Connection conn = null;public void initConnection() throws Exception {//连接mysqlClass.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaee", "root", "123456");}//返回所有学生public ArrayList<Student> getAllStudents() throws Exception{ArrayList<Student> all = new ArrayList<Student>();initConnection();String sql = "select * from java2022";Statement st = conn.createStatement();ResultSet rs = st.executeQuery(sql);while(rs.next()){Student stu = new Student();stu.setNum(rs.getString("num"));stu.setName(rs.getString("name"));all.add(stu);}closeConnection();return all;}//添加学生public void addStudent(String num , String name) throws Exception {initConnection();String sql1 = "select * from java2022 where num =?";PreparedStatement ps1 = conn.prepareStatement(sql1);ps1.setString(1, num);ResultSet rs = ps1.executeQuery();if (!rs.next()){String sql = "insert into java2022(num,name) value(?,?)";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, num);ps.setString(2, name);ps.executeUpdate();}closeConnection();}//查找学生public Student findStudent(String num) throws Exception {initConnection();String sql = "select * from java2022 where num=?";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, num);ResultSet rs = ps.executeQuery();Student student = new Student();if(rs.next()){student.setNum(rs.getString("num"));student.setName(rs.getString("name"));}closeConnection();return student;}//修改学生public void updateStudent(String num, String name) throws Exception {initConnection();String sql = "update java2022 set name=? where num=?";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, name);ps.setString(2, num);ps.executeUpdate();closeConnection();}//删除学生public void deleteStudent(String num) throws Exception {initConnection();String sql = "delete from java2022 where num=?";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, num);ps.executeUpdate();closeConnection();}public void closeConnection() throws SQLException {conn.close();}
}

一、显示所有专业信息

  1. 在src下新建servlet包;
  2. 在该包下新建Servlet,命名ShowAllStudentsServlet,该Servlet用来查询所有学生信息,并使用session保存所有学生信息,保存之后跳转到showAllStudents.jsp文件;
  3. showAllStudents.jsp文件用于获取并显示所有学生信息
package servlet;import beans.Student;
import dao.StudentDao;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;import java.io.IOException;
import java.util.ArrayList;@WebServlet(name = "showAllStudentServlet1", value = "/showAllStudentServlet1")
public class ShowAllStudentServlet1 extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse reponse) throws IOException {HttpSession session = request.getSession();StudentDao studentDao = new StudentDao();try {ArrayList<Student> students = studentDao.getAllStudents();session.setAttribute("students", students);} catch (Exception e) {throw new RuntimeException(e);}reponse.sendRedirect("showAllStudents1.jsp");}}
<%@ page import="beans.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>显示所有学生信息</title>
</head>
<body>
<a href="addNum1.jsp">添加学号 > </a>
<table border="1"><tr><td>学号num</td><td>姓名name</td><td>编辑</td></tr><%ArrayList<Student> students = (ArrayList) session.getAttribute("students");if(students == null){students = new ArrayList<>();session.setAttribute("students", students);}else {//for(Student student : students){student.getNum()}for(int i=0; i<students.size(); i++) {out.println("<tr>");out.println("<td>"+students.get(i).getNum()+"</td>");out.println("<td>"+students.get(i).getName()+"</td>");out.println("<td>");out.println("<a href='findStudentByNumServlet1?num="+students.get(i).getNum()+"'>修改</a>");out.println("<a href='deleteStudentServlet1?num="+students.get(i).getNum()+"'>删除</a>");out.println("</td>");out.println("</tr>");}}%>
</table>
</body>
</html>

增加新学号功能实现

  1. 新建Servlet,命名AddStudentServlet,AddStudentServlet文件获取所输入的学生信息,使用JDBC将信息添加到数据表java2022,添加完成跳转到ShowAllStudentsServlet
  2. 用户点击“添加新学号”链接,页面跳转到addNum.jsp页面,在该页面中输入学生信息,点击确认按钮,跳转到AddStudentServlet,完成新专业的添加
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>添加学号</title>
</head>
<body>
<form action="addStudentServlet1" method="post">学号:<input type="text" name="num"><br>姓名:<input type="text" name="name"><br><input type="submit" value="添加">
</form>
</body>
</html>

package servlet;import dao.StudentDao;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.sql.*;@WebServlet(name = "addStudentServlet1", value = "/addStudentServlet1")
public class AddStudentServlet1 extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException {String num = request.getParameter("num");String name = request.getParameter("name");StudentDao studentDao = new StudentDao();try {studentDao.addStudent(num, name);} catch (Exception e) {throw new RuntimeException(e);}response.sendRedirect("showAllStudentServlet1");}
}

三、根据学号num修改学生姓名name功能实现

  1. 用户点击“编辑”链接,跳转到FindStudentByNumServlet文件
  2. 新建Servlet,命名FindStudentByNumServlet,该文件查询指定Num的学生信息,并将信息保存到session中,页面重定向到updateStudent.jsp
  3. updateStudent.jsp文件获取session中保存的学生信息,显示并可修改指定Num的学生信息,点击提交按钮,跳转到UpdateStudentServlet文件
  4. 新建Servlet,命名UpdateStudentServlet,该文件获取updateStudent.jsp文件中所输入的学生信息,根据Num修改学生姓名
  5. 修改完成跳转到ShowAllStudentsServlet
package servlet;import beans.Student;
import dao.StudentDao;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;import java.io.IOException;@WebServlet(name = "findStudentByNumServlet1", value = "/findStudentByNumServlet1")
public class FindStudentByNumServlet1 extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException {String num = request.getParameter("num");HttpSession session = request.getSession();StudentDao studentDao = new StudentDao();try {Student student = studentDao.findStudent(num);session.setAttribute("student", student);} catch (Exception e) {throw new RuntimeException(e);}response.sendRedirect("updateStudent1.jsp");}
}

<%@ page import="beans.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>修改信息</title>
</head>
<body>
<%Student student = (Student) session.getAttribute("student");String num = student.getNum();String name = student.getName();
%>
<form action="updateStudentServlet1">学号:<input type="text" name="num" value="<%=num%>" readonly><br>姓名:<input type="text" name="name" value="<%=name%>"><br><input type="submit" value="修改">
</form>
</body>
</html>
package servlet;import dao.StudentDao;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet(name = "updateStudentServlet1", value = "/updateStudentServlet1")
public class UpdateStudentServlet1 extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException {String num = request.getParameter("num");String name = request.getParameter("name");StudentDao studentDao = new StudentDao();try {studentDao.updateStudent(num, name);} catch (Exception e) {throw new RuntimeException(e);}response.sendRedirect("showAllStudentServlet1");}
}

四、根据学号num删除学生信息功能实现

  1. 用户点击“删除”链接,页面跳转到DeleteStudentServlet 文件
  2. 新建Servlet,命名DeleteStudentServlet,在该文件中获取学号num,根据学号num删除学生信息
  3. 删除完成跳转到ShowAllStudentsServlet
package servlet;import dao.StudentDao;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet(name = "deleteStudentServlet1", value = "/deleteStudentServlet1")
public class DeleteStudentServlet1 extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException {String num = request.getParameter("num");StudentDao studentDao = new StudentDao();try {studentDao.deleteStudent(num);} catch (Exception e) {throw new RuntimeException(e);}response.sendRedirect("showAllStudentServlet1");}
}

相关文章:

Servlet练习

练习准备 编写Student和StudentDao package beans;public class Student{private String num;private String name;public Student(){}public String getNum() {return num;}public String getName() {return name;}public void setNum(String num) {this.num num;}public v…...

美国高速公路信号灯控制项目的大致逻辑和步骤 智慧公路设计

美国高速公路信号灯控制项目的大致逻辑和步骤&#xff1a; 美国那边先提供一个关于具体做什么需求、那边的设备&#xff08;信号灯&#xff09;有什么参数&#xff0c;什么接口&#xff0c;分别是什么属性等等的详细设计文档&#xff0c;开发人员拿到这个文档以后把它看懂&…...

数字电源专用IC,国产C2000, QX320F280049

一、特性参数 1、独立双核&#xff0c;32位CPU&#xff0c;单核主频400MHz 2、IEEE 754 单精度浮点单元 &#xff08;FPU&#xff09; 3、三角函数单元 &#xff08;TMU&#xff09; 4、1MB 的 FLASH &#xff08;ECC保护&#xff09; 5、1MB 的 SRAM &#xff08;ECC保护&…...

第六章 ARM汇编语言程序设计【嵌入式系统】

第六章 ARM汇编语言程序设计【嵌入式系统】前言推荐第六章 ARM汇编语言程序设计6.1 概述6.2 ARM汇编语言指示符6.3 ARM编程举例6.4 ARM过程调用6.5 典型举例6.6 内嵌汇编C与汇编相互调用最后前言 以下内容源自《【嵌入式系统】》 仅供学习交流使用 推荐 无 第六章 ARM汇编语…...

详细讲讲Java线程的状态

TERMINATED状态 是什么状态&#xff1f; 在Java线程的生命周期中&#xff0c;TERMINATED状态是线程的最终状态&#xff0c;表示线程已经执行完毕并已经退出。当一个线程完成了它的工作&#xff0c;或者因为异常而提前结束时&#xff0c;它会进入TERMINATED状态。此时线程不再执…...

企业月结快递管理教程

回答这个问题的之前&#xff0c;我们先来看看什么是企业月结快递管理...... 经济的发展&#xff0c;技术的进步&#xff0c;电商行业的加持之下&#xff0c;这几年快递行业的发展有目共睹。不仅是我们的生活离不开快递&#xff0c;很多企业的运作多多少少也离不开“快递”二字…...

cm cdp告警 Swap Memory Usage Suppress...

原因&#xff1a;服务器没有关swap&#xff0c;服务使用了swap 在cdp集群中&#xff0c;一般要关掉swap&#xff0c;如果没有关。可以使用 下面命令设置程序尽可能不使用swap&#xff0c;使用swap会影响性能 修改后&#xff0c;重启服务就不会使用swap了 sysctl -w vm.swappi…...

3.8——友元

类的主要特点之一是信息隐藏和封装&#xff0c;即类的私有成员和保护成员只能在定义的范围内使用&#xff0c;也就是说私有成员和保护成员只能通过类的成员函数来访问。但是&#xff0c;有时候我们在类外也需要访问私有成员数据或保护成员数据怎么办。这时我们就要通过友元函数…...

C++ OOP Feature Conclusion (更新中)

目录 1.类与对象 1.1 基本概念&#xff08;继承、封装、抽象、多态&#xff09; 1.2类的声明 1.3成员函数&#xff08;对象所占空间取决于数据成员&#xff0c;和成员函数无关&#xff09; 1.4数据成员&#xff08;不能在类中初始化&#xff09; 1.5构造与析构函数&#xff08…...

【HTTP】Cookie、Session、Token以及Cookie优化

Cookie、Session、TokenCookie优化Cookie、Session、Token 在开始介绍Cookie安全之前&#xff0c;我们先来了解一下实现授权的方式。 在登录功能中&#xff0c;为了记住登录成功后的信息&#xff0c;在客户端&#xff0c;我们通常会使用Cookie来记录&#xff0c;但是&#xf…...

npm之报错:Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules‘

1.报错 363 error [Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/tldr’ -> ‘/usr/local/lib/node_modules/.tldr-8nq4AGAt’] { 363 error errno: -13, 363 error code: ‘EACCES’, 363 error syscall: ‘rename’, 363 error path: ‘/usr/…...

「SQL面试题库」 No_30 超过5名学生的课

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff0…...

自定义maven插件,在项目中命令启动springboot并加载当前项目资源

背景 最近在制定团队内公用的基础框架&#xff0c;基于单应用多module的架构思路&#xff0c;使用maven管理项目依赖&#xff0c;在项目中定义了一个springboot模块&#xff0c;该模块依赖具体的业务实现模块&#xff0c;启动后通过扫描路径下的类加载服务&#xff0c;业务开发…...

Linux系统【Centos7】更新内核更新软件详细教程

更新内核&#xff1a; 1. 打开终端&#xff0c;输入命令 sudo yum update&#xff0c;等待更新完成。 2. 重启系统&#xff0c;输入命令 sudo reboot。 3. 在 GRUB 引导界面&#xff0c;选择最新的内核版本&#xff0c;按下回车键进入系统。 4. 在终端中输入命令 uname -r&…...

C++ 中new/delete与malloc/free详解

文章目录前言一、new/delete1. 序言2. 使用方法2.1. new 和 delete 基本语法2.2. new 和 delete 的底层实现原理3. 底层原理3.1. operator new 和 operator delete3.2. new 和 delete 的底层实现原理4. 注意事项5. 总结二、malloc/free1. 序言2. 使用方法2.1. malloc 和 free 基…...

crm软件哪个好?该如何选择?

crm软件哪个好&#xff1f;该如何选择&#xff1f; 首先我们需要明确一下什么是好的CRM系统&#xff0c;优质的CRM系统应该具备以下优势&#xff1a; 1&#xff09;提高销售效率&#xff1a;通过CRM系统&#xff0c;销售人员可以跟踪客户互动历史和交易记录&#xff0c;了解客…...

蓝桥杯第22天(Python)(疯狂刷题第5天)

题型&#xff1a; 1.思维题/杂题&#xff1a;数学公式&#xff0c;分析题意&#xff0c;找规律 2.BFS/DFS&#xff1a;广搜&#xff08;递归实现&#xff09;&#xff0c;深搜&#xff08;deque实现&#xff09; 3.简单数论&#xff1a;模&#xff0c;素数&#xff08;只需要…...

软件测试面试常问的问题有哪些?

互联发展是很快的&#xff0c;每年都会有新语言的诞生。 我干测试已经三年了&#xff0c;主要负责web功能测试&#xff0c;java编写接口自动化&#xff0c;APP功能测试&#xff0c;APP 接口自动化&#xff08;也是用的java&#xff09;&#xff0c;面过得测试也差不多30个&…...

js之文件信息读取篇高级基础

文章目录js之文件信息读取&#xff08;FileReader&#xff09;获取文件相关信息的两种方式js原生拖拽事件js之文件信息读取&#xff08;FileReader&#xff09; 首先这里面会讲一些知识点 bolb 对象FileReader对象 let blob new Blob([heewwekgewgwer], { type: text/plain …...

SQL Server的死锁说明

死锁指南一、了解死锁二、检测并结束死锁2.1、可能死锁的资源三、处理死锁四、最大限度地减少死锁4.1、以相同的顺序访问对象4.2、避免事务中的用户交互4.3、保持交易简短且在一个批次中4.4、使用较低的隔离级别4.5、使用基于行版本控制的隔离级别4.6、使用绑定连接4.7、停止事…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...