javaweb使用Thymeleaf 最凝练的CRUD项目-下

news2024/11/24 14:08:17

javaweb使用Thymeleaf 最凝练的CRUD项目-下

10、执行保存

①目标

提交表单后,将表单数据封装为Soldier对象,然后将Soldier对象保存到数据库。

②思路

在这里插入图片描述

③代码

[1]Servlet方法

protected void saveSoldier(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 1.获取请求参数
String soldierName = request.getParameter("soldierName");
String soldierWeapon = request.getParameter("soldierWeapon");

// 2.创建Soldier对象
Soldier soldier = new Soldier(null, soldierName, soldierWeapon);

// 3.调用Service方法
soldierService.saveSoldier(soldier);

// 4.重定向请求
response.sendRedirect(request.getContextPath() + "/SoldierServlet?method=showList");

}

[2]Service方法

@Override
public void saveSoldier(Soldier soldier) {

    soldierDao.insertSoldier(soldier);

}

[3]Dao方法

@Override
public void insertSoldier(Soldier soldier) {

    String sql = "insert into t_soldier(soldier_name,soldier_weapon) values(?,?)";

    update(sql, soldier.getSoldierName(), soldier.getSoldierWeapon());
}

11、前往修改信息的表单页面

在这里插入图片描述

①创建超链接

<a th:href="@{/SoldierServlet(soldierId=${soldier.soldierId},method=toEditPage)}"></a>

②Servlet方法

执行步骤

  1. 从请求参数获取soldierId
  2. 根据soldierId查询Soldier对象
  3. 将Soldier对象存入请求域
  4. 前往更新的表单页面

protected void toEditPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 1.从请求参数获取soldierId
String soldierId = request.getParameter("soldierId");

// 2.根据soldierId查询Soldier对象
Soldier soldier = soldierService.getSoldierById(soldierId);

// 3.将Soldier对象存入请求域
request.setAttribute("soldier", soldier);

// 4.前往更新的表单页面
processTemplate("edit-page", request, response);

}

③Service方法

@Override
public Soldier getSoldierById(String soldierId) {
    return soldierDao.selectSoldierByPrimaryKey(soldierId);
}

④Dao方法

@Override
public Soldier selectSoldierByPrimaryKey(String soldierId) {
    String sql = "select soldier_id soldierId,soldier_name soldierName,soldier_weapon soldierWeapon from t_soldier where soldier_id=?";

    return getBean(Soldier.class, sql, soldierId);
}

⑤表单页面

<form th:action="@{/SoldierServlet}" method="post">

    <input type="hidden" name="method" value="updateSoldier" />
    <input type="hidden" name="soldierId" th:value="${soldier.soldierId}" />

    士兵姓名:<input type="text" name="soldierName" th:value="${soldier.soldierName}" /><br/>
    士兵武器:<input type="text" name="soldierWeapon" th:value="${soldier.soldierWeapon}" /><br/>

    <button type="submit">更新</button>

</form>

12、执行更新

在这里插入图片描述

①Servlet方法

执行步骤

1.获取请求参数
2.封装对象
3.调用Service方法执行更新
4.重定向请求

protected void updateSoldier(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // 1.获取请求参数
    String soldierIdOrigin = request.getParameter("soldierId");
    Integer soldierId = Integer.parseInt(soldierIdOrigin);
    String soldierName = request.getParameter("soldierName");
    String soldierWeapon = request.getParameter("soldierWeapon");

    // 2.封装对象
    Soldier soldier = new Soldier(soldierId, soldierName, soldierWeapon);

    // 3.调用Service方法执行更新
    soldierService.updateSoldier(soldier);

    // 4.重定向请求
    response.sendRedirect(request.getContextPath() + "/SoldierServlet?method=showList");
}

②Service方法

@Override
public void updateSoldier(Soldier soldier) {

    soldierDao.updateSoldier(soldier);

}

③Dao方法

@Override
public void updateSoldier(Soldier soldier) {
    String sql = "update t_soldier set soldier_name=?,soldier_weapon=? where soldier_id=?";
    update(sql, soldier.getSoldierName(), soldier.getSoldierWeapon(), soldier.getSoldierId());
}

13、请求字符集设置

  • 设置请求体字符集需要调用request.setCharacterEncoding(“UTF-8”);
  • request.setCharacterEncoding(“UTF-8”);要求在所有request.getParameter()前面
  • 在执行子类Servlet方法时,其实都是先调用父类ModelBaseServlet的doPost()方法
  • doPost()方法中包含获取method请求参数的操作
  • 所以最前面的request.getParameter()在doPost()方法中
  • 所以request.setCharacterEncoding(“UTF-8”);要放在doPost()方法的request.getParameter()前面

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 0.在所有request.getParameter()前面设置解析请求体的字符集
request.setCharacterEncoding("UTF-8");

// 1.从请求参数中获取method对应的数据
String method = request.getParameter("method");

// ……

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

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

相关文章

第三方api对接怎么做?淘宝1688api接口怎么对接?

在今天的互联网上&#xff0c;第三方API对接是必不可少的。这种技术将不同的应用程序/服务连接在一起&#xff0c;创造了无限的可能性。 第三方api对接怎么做&#xff1f; 1、与支付公司签约 首先&#xff0c;通过正规的渠道&#xff0c;如支付公司官网或正规服务商&#xf…

spring boot学习第二篇:spring boot2.6.4版本启动接口服务

1、先启动好 参考我的spring boot学习第一篇文档&#xff1a;spring boot 1.5.x版本启动接口服务_veminhe的博客-CSDN博客 需要改动2个地方 pom.xml里面 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par…

第八章 SSD 电源管理

从 SATA 链路、PCIe 链路、NVMe 协议以及 SSD 内部主控管理等方面介绍 SSD 上的电源管理技术。 8.1 SATA 省电模式 Partial 和 Slumber PHY&#xff1a;物理层。 1. SATA 提供了两种低功耗模式&#xff0c;Partial 和 Slumber&#xff1a; &#xff08;1&#xff09; Part…

复习Javascript数组

JavaScript 数组 JS 数字属性JS 数组方法 JavaScript 数组用于在单一变量中存储多个值。 var cars ["Saab", "Volvo", "BMW"]; 什么是数组&#xff1f; 数组是一种特殊的变量&#xff0c;它能够一次存放一个以上的值。 如果您有一个项目清…

[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)

[GFCTF 2021]Baby_Web(CVE-2021-41773) 题目标签&#xff1a;WEB、PHP、CVE-2021-41773、变量覆盖 做后考点总结&#xff1a;CVEPHP中量代码审计 CVE-2021-41773是一个Apache Httpd Server 路径穿越漏洞 详情见&#xff1a;CVE-2021-41773_Jay 17的博客-CSDN博客 在源码中…

Docker安全开放远程访问连接权限

1、Docker完全开放远程访问 Docker服务完全开放对外访问权限操作如下&#xff1a; # 开启端口命令 &#xff08;--permanent永久生效&#xff0c;没有此参数重启后失效&#xff09; firewall-cmd --zonepublic --add-port2375/tcp --permanent # 重新载入 firewall-cmd --re…

模型与计算平台

说明&#xff1a;部分内容摘自参考文献&#xff0c;如有侵权&#xff0c;联系删除 模型概念 计算量 FLOPs FLOPs&#xff1a;floating point operations 指的是浮点运算次数&#xff0c;理解为计算量&#xff0c;可以用来衡量算法/模型时间的复杂度, 单位是 FLOPs。FLOPS&…

【Arduino小车实践】陀螺仪的使用

一、MPU6050简介 MPU6050是一款陀螺仪模块&#xff0c;可以测量X、Y、Z三轴的角速度和加速度&#xff0c;还带有温度传感器和数字运动处理器(DMP)。 二、学习步骤 1. I2C协议 MPU6050是通过I2C协议进行驱动的&#xff0c;配置寄存器和获取数据都需要通过I2C协议去实现开发板与…

OpenMMLab MMTracking目标跟踪环境搭建(一)

1、环境搭建 创建conda虚拟环境并激活。 conda create -n mmtrack python3.8 -y conda activate mmtrack 按照官方说明安装 PyTorch 和 torchvision 可以通过指定版本号切换到其他版本。 #如果网不好&#xff0c;可以这样安装 pip3 install torch1.8.2cu102 torchvision0.9…

基于SpringBoot+vue的校园闲置物品租售系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

postman:模拟发送一个需要 cookie 认证的请求

目录 前言&#xff1a; 1、chrome 已安装插件 intercept。 2、chrome 浏览器要设置打开&#xff0c;在运行期间浏览器要一直打开。 3、本人是用 fiddler 对 app 的请求进行抓包&#xff0c;也可以使用其他工具。查看 headers 里的 cookie&#xff0c;并复制。 4、将复制的…

Ubuntu安装zsh主题

安装zsh sudo apt install zsh安装git&#xff08;如果有跳过&#xff09; sudo apt install git(1条消息) 关于Git这一篇就够了_17岁boy想当攻城狮的博客-CSDN博客 安装oh my zsh git clone https://github.com/robbyrussell/oh-my-zsh切换目录到oh-my-zsh文件夹下的tools…

0基础学习VR全景平台篇 第62篇:通用功能-通用设置

公开&#xff1a;公开表示该作品对所有人可见&#xff0c;并且会在蛙色VR平台和个人主页显示。点击公开会切换成私人模式&#xff0c;私人则表示只有作者本人可以访问&#xff0c;他人即使获取了链接也无法打开。 预览&#xff1a;点击“预览”可以查看VR视频的效果&#xff0…

【LeetCode热题100】打卡第37天:岛屿数量反转链表

文章目录 【LeetCode热题100】打卡第37天&#xff1a;岛屿数量&反转链表⛅前言 岛屿数量&#x1f512;题目&#x1f511;题解 反转链表&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第37天&#xff1a;岛屿数量&反转链表 ⛅前言 大家好&#xff0c;我是…

kettle开发-Day41-数据清洗之字符串替换

前言&#xff1a; 昨天讲到了通过case/switch组件来进行分流&#xff0c;来区分日期里面三大类的数据&#xff0c;包括正常显示的2023/7/12 2:59:58的数据&#xff0c;一种是包含中文上午的数据&#xff0c;一种是包含中文下午的数据。但是我们发现这样直接存进去的数据还是包含…

时间有界 梦想无疆(NEBASE第十三课)

时间有界 梦想无疆(NEBASE第十三课) 1、计算机网络功能 数据通信、资源共享、增加数据可靠性、提高系统处理能力&#xff08;主要功能数所通信&#xff09; 2.标准&#xff1a;一致同意的规则可以理解为标谁 ISO&#xff08;国际标准化组织&#xff09;在网络通信中创建了OS…

前端学习——JS进阶 (Day1)

作用域 局部作用域 全局作用域 作用域链 JS垃圾回收机制 闭包 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&qu…

walkRE2019--属性批量赋值

1、选中待赋值的图形&#xff0c;在加工菜单栏中选择属性赋值&#xff0c;如下&#xff1a; 选择图形所在图层&#xff0c;并使图层处于可编辑状态。选择要赋值的属性字段&#xff08;即要更新的列&#xff09;&#xff0c;选择要赋值的表达式&#xff08;即赋值为&#xff09;…

产品经理必备技能:高效产品规划方法论

作为产品经理&#xff0c;进行产品规划是非常重要的一项工作。产品规划是一个方法化的过程&#xff0c;需要考虑多个因素&#xff0c;以确保产品能够满足用户需求并实现商业目标。以下是几点建议&#xff0c;帮助产品经理进行产品规划。 第一&#xff0c;了解用户需求和市场情况…

【Unity编辑器扩展】编辑器代码一键添加按钮响应事件

此功能能是基于UI变量代码生成工具的改良扩展&#xff1a;【Unity编辑器扩展】UI变量代码自动生成工具(编辑器扩展干货/大幅提高效率)_ui代码自动生成_TopGames的博客-CSDN博客 工具效果预览&#xff1a; UGUI的Button按钮在编辑面板添加响应事件非常繁琐&#xff0c;需要拖个…