1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > JavaWeb 项目案例(新能源汽车动力电池信息)

JavaWeb 项目案例(新能源汽车动力电池信息)

时间:2020-05-04 13:21:34

相关推荐

JavaWeb 项目案例(新能源汽车动力电池信息)

项目案例

目录

项目案例项目要求页面要求数据库设计具体操作项目编写新建数据库编写前端页面编写 JavaBean实现功能显示所有添加数据和表单验证删除数据修改数据查询数据

项目要求

一、语言和环境

A、实现语言

Java

B、环境要求

IDEA、JDK8、Tomcat9.*、MySQL5.7、jQuery-1.12.4

页面要求

使用JSP+Servlet+JavaBean实现新能源汽车动力电池远程监控系统,MySQL5.7作为后台数据库,该系统包括查看所有新能源汽车动力电池信息、修改新能源汽车动力电池信息、删除新能源汽车动力电池信息三大功能,具体要求如下:

打开新能源汽车动力电池监控系统首页,显示全部的新能源汽车动力电池信息,按照报警时间降序排列,所有新能源汽车动力电池信息隔行变色,如图-1所示。

点击编号超链接,进入修改新能源汽车动力电池页面,要求回显原始数据,如图-2所示。

点击“修改”按钮进行添加新能源汽车动力电池信息操作时,使用Q©y进行各项验证,车所属城市、使用单位、压差报警值、报警时间所有信息都不为空,否则给出楚示所示。压差报警值必须是数值类型,否则给出提示,如图-4所示。日期必须是“yyyy-MM-dd,否则给出提示,如图-5所示。

正确填写信息后,点击“修改”按纽可以将新能源汽车动力电池信息添加到数据库中,保存后给出相应的提示信息,如图-6所示,修改成功后跳转到新能源汽车动力电池信息列表页面如图-1所示。

新能源汽车动力电池信息列表页面,点击“别除”超链接,出现如图-7所示提示信息:点击“确定”按钮,使用ajax异步提交实现别除新能源汽在动力由油信息,并在删除成功时,移除页面对应信息。

数据库设计

1、建立数期表powerbattery,创建主健、设置约束并设置主健自增,添加测试数据(至少3条)

2、创建Web项目PowerBatteryMonitoringsyatem,导入数据库驱动包,在源文件夹中创建4个包:ent1ty包用于存放实体类,dao包用于存放数据访问类,service包用于存放业务逻辑处理类,servlet包用于存放servlet类

具体操作

3、创建实体类PowerBattery.java

A,参考powerbattery表编写属性

B、编写各属性的getter/setter方法

4、创建DAo基类:BaseDao.java包含基本数据库资源的获取、释放操作。注意释放资源时的先后顺序及异常处理

5、创建DAo类:PowerBatteryDao.java

A、编写查询方法,查询所有新能源汽车动力电池信息,查询结果按报警时间降序排列

B、编写删除方法,根据编号删除新能源汽车动力电池信息

C、编写根据编号查询方法,根据编号查询新能源汽车动力电池信息

D、编写修改方法,修改指定的新能源汽车动力电池信息

6、创建Service类:PowerBatteryService.java

A、编写查询方法,调用DQ类,查询所有新能源汽车动力电池信息,返回列表数据

B、编写删除方法,调用DAO类,根据编号删除新能源汽车动力电池信息

C、编写根据编号查询方法,调用D0类,根据编号查询新能源汽车动力电池信息

D、编写修改方法,调用DA0类,修改指定新能源汽车动力电池信息

7、创建新能源汽车动力电池列表页面

A、按照图-1所示进行页面设计,并使用cSS进行美化(背景、隔行变色等)

B、正确设置编号超链接,点击超链接能够查询出该电池信息,并跳转到修改页面

C、点击“删除”超链接,弹出确认提示,如图-7所示,点击“确定”,删除相应的新能源汽车动力电池

8、创建查询所有新能源汽车动力电池信息的Serv1et调用Service类的方法,正确查询出所有新能源汽车动力电池信息并跳转到新能源汽车动力电池信息列表页面

9、创建修改新能源汽车动力电池信息页面:

A、按照图-2进行页面设计

B、修改新能源汽车动力电治信息之能要通过0心y对各现格息进行非空验证,对新能源汽车动力电池压差报容位、日别格式检正,并弹出相应的株作提示,如图-3、图-4和图-5所示

10、创建根据编号查询新能源汽车动力电池信息的servlet

A、获得要查询的新能源汽车动力电池信息的编号

B、调用serv1©e类的方法,获取指定编号电池信息并返回到电池修改页面显示

11、创建修改新能源汽车动力电池信息的serv1et

A、获得要修改的新能源汽车动力电池信息

B、调用Service类的方法,修改新能源汽车动力电池信息

C、根据修政操作的结果给出相应的信息提示并返回响应

12、创建删除新能源汽车动力电池信息的Serv1et

A、获得要删除的新能源汽车动力电池信息的编号

B、调用Service类的方法,删除新能源汽车动力电池信息

C、根据删除操作的结果给出相应的JSON格式信息提示并返回响应

13、调试运行成功后导出SQL语句,其中包括创建表结构、创建主键并设置主键自增、插入测试数据的SQL语句,以SQL文件格式与代码文件一同提交。没有数据库文件或以共它文件类型提交,数据库项不得分。以非MySQL数据库完成数据库功能,数据库项不得分

14、相关业务操作必须通过Service实现,若通过JsP页面或Servlet直接调用DAO实现业务操作,则Service项不得分

15、JSP页参数的获取控制,必须通过Servlet进行实现,若通过JsP直接处理页面请求,则Servlet项不得分

五、注意事项

1、请注意界面美观,控件摆放整齐:

2、请注意代码的书写、命名符合规范,在代码中添加必要的注释:

3、请注意操作数据库时进行必要的异常处理。

项目编写

首先项目开始时导入各种包

本项目会用到

这些工具包,工具包我会上传到资源里,可以自行下载

注意:导入 lib 文件时需要添加为lib(库) 目录;在导入config.properties 这个配置文件时要修改里面的数据库路径和名称,还有Mysql 用户名和密码!!!

工具包中都写了注释可以参考

例:jsHelper中的检查日期填写

/*** @param value* @returns {number}* 验证日期* 参数 value 是一个字符串* 验证他是否合法* 规则 yyyy-MM-dd* 返回 0是格式有问题 ,返回-1是年有问题,-2是月有问题,-3是日有问题,1是合法*/function check_date(value) {// 定义一个正则表达式对象var reg = /^\d{4}-\d{1,2}-\d{1,2}$/;// 测一测用户输入的是否符合这个数据if (!reg.test(value)) {return 0;}// 测一测年,月,日的合法数据情况// 2222-22-11// 年 不合法的情况li = value.split("-");if (!(li[0] > 1600 && li[0] < 3000)) {return -1;}// 月不合法的情况if (!(li[1] >= 1 && li[1] <= 12)) {return -2;}// 日不合法的情况if (!(li[2] >= 1 && li[2] <= 31)) {return -3;}return 1;}

然后:新建数据库

新建数据库

建库语句

CREATE DATABASE `powerbatterysys2` /*!40100 DEFAULT CHARACTER SET utf8 */

这是建库语句,下面是建表语句

CREATE TABLE `powerbattery` (`id` int(11) NOT NULL auto_increment,`carName` varchar(10) NOT NULL,`cityName` varchar(50) NOT NULL,`userName` varchar(50) NOT NULL,`pressureValue` int(11) NOT NULL,`time` date NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8

数据库表结构

本项目工具包、数据库文件和代码 我会上传至资源

编写前端页面

(新建 JavaBean 和 编写前端页面都可以,这里我习惯先编写页面在处理代码)

编写表格前先导入 jstl 和 jq 并验证

<%@ taglib prefix="c" uri="/jsp/jstl/core" %>

<script src="jquery-1.8.2.min.js"></script>

初始表格状态为:

<%@ page import="bean.PowerbatteryBean" %><%@ page import="dao.PowerbatteryDao" %><%@ page import="dao.impl.PowerbatteryDaoImpl" %><%@ page import="tools.JDBCUtiles" %><%@ page import="java.sql.Connection" %><%@ page import="java.util.List" %><%--Created by IntelliJ IDEA.User: SSOADate: /6/3Time: 21:00To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="/jsp/jstl/core" %><html><head><title>显示页面</title><style>* {margin: 0;}table {width: 600px;margin: auto;text-align: center;}.thead_color {background-color: #cccccc;}.her_odd {background-color: aqua;}</style><script src="jquery-1.8.2.min.js"></script><script>// 隔行换色function colorChange() {// 偶数换色$("tbody tr:odd").addClass("her_odd");// 奇数移除颜色$("tbody tr:even").removeClass("her_odd");}$(function () {// 隔行换色colorChange();})</script></head><body><%// 这里主要是测试数据是否拿到Connection connection = JDBCUtiles.getConnection();out.print(connection);%><div align="center"><div style="display: inline-block"><form action="handle" method="get"><input type="hidden" name="action" value="search"><input type="text" name="search" placeholder="请输入您要搜索的内容"><input type="submit" value="搜索"></form></div><div style="display: inline-block;margin-left: 10px"><button class="add_data">添加数据</button></div><table cellpadding="0" cellspacing="0" border="1"><caption><h1>新能源汽车动力电池信息</h1></caption><thead><tr class="thead_color"><th>编号</th><th>车型</th><th>所属城市</th><th>使用单位</th><th>压差报警值</th><th>报警时间</th><th>操作</th></tr></thead><tbody><tr><td><a href="javascript">1</a></td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td><a href="javascript:;" class="del">删除</a></td></tr></tbody></table></div></body></html>

上面就是表格的初始编写

下图就是表格的样子了,这里我们在 tbody 里面多新建几个tr 测试我们的隔行换色效果

编写 JavaBean

根据我们数据表里的数据进行编写 JavaBean

首先找到 src 目录 右键新建一个 包 叫 bean (包的命名需小写)

再在bean 里新建 一个类 名字最好就叫 数据表+Bean 我的表叫做 powerbattery 所以这里的类名就叫 PowerbatteryBean(注意一下,Java 里命名,类的命名需要使用大驼峰)

package bean;import java.util.Date;public class PowerbatteryBean {private int id;private String carName;private String cityName;private String userName;private int pressureValue;private Date time;@Overridepublic String toString() {return "powerbatteryBean{" +"id=" + id +", carName='" + carName + '\'' +", cityName='" + cityName + '\'' +", userName='" + userName + '\'' +", pressureValue=" + pressureValue +", time=" + time +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCarName() {return carName;}public void setCarName(String carName) {this.carName = carName;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public int getPressureValue() {return pressureValue;}public void setPressureValue(int pressureValue) {this.pressureValue = pressureValue;}public Date getTime() {return time;}public void setTime(Date time) {this.time = time;}}

这里就是bean 类的编写了

实现功能

显示所有

首先根据java 的三层架构(显示层(servlet),业务层(service),数据层(dao);注意名字一定要叫这三个),在 src 里新建 这三个包

这里我采用倒着写的方式

倒着写:先编写 数据层,在编写业务层,最后编写显示层

顺着写:先编写 显示层,在编写业务层,最后再编写数据层

这里我用倒着写的方式

找到 dao 包 ,在 dao 里新建一个 接口

名字最好叫 数据表+ Dao

新建完后,在编写 select 查询所有的方法

在数据层查完后,会返回一个 List 对象集合

package dao;import bean.PowerbatteryBean;import java.util.List;public interface PowerbatteryDao {// 显示所有List<PowerbatteryBean> select();// 关闭资源void close();}

接口定义完后,在编写实现类

在我们的 dao 包 下新建一个 文件夹 叫 impl

在impl 文件夹中新建 PowerbatteryDaoImpl (名字最好 是 数据表+Dao+Impl )

新建完后让 类继承 BaseDao 并 实现 PowerbatteryDao 这个接口,注意要先继承后实现

然后重写 BaseDao 和 接口里的方法

见下面代码

package dao.impl;import bean.PowerbatteryBean;import dao.PowerbatteryDao;import tools.BaseDao;import tools.DateHelper;import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;public class PowerbatteryDaoImpl extends BaseDao implements PowerbatteryDao {public PowerbatteryDaoImpl(Connection connection) {super(connection);}// 查询所有@Overridepublic List<PowerbatteryBean> select() {// sqlString sql = "SELECT * FROM powerbattery;";// 参数数组Object[] objects = {};// 调用方法ResultSet resultSet = commonQuery(sql, objects);// 新建对象数组List<PowerbatteryBean> powerbatteryBeanList = new ArrayList<>();// 循环拿数据while (true) {try {if (!resultSet.next()) break;} catch (SQLException throwables) {throwables.printStackTrace();}PowerbatteryBean powerbatteryBean = lineToObject(resultSet);powerbatteryBeanList.add(powerbatteryBean);}// 返回return powerbatteryBeanList;}// 把零散数据拼接并返回@Overridepublic PowerbatteryBean lineToObject(ResultSet resultSet) {int id = 0;String carName = null;String cityName = null;String userName = null;int pressureValue = 0;Date time = null;try {// 把零散数据拼接id = resultSet.getInt("id");carName = resultSet.getString("carName");cityName = resultSet.getString("cityName");userName = resultSet.getString("userName");pressureValue = resultSet.getInt("pressureValue");time = resultSet.getDate("time");} catch (SQLException throwables) {throwables.printStackTrace();}// 新建对象PowerbatteryBean powerbatteryBean = new PowerbatteryBean();powerbatteryBean.setId(id);powerbatteryBean.setCarName(carName);powerbatteryBean.setCityName(cityName);powerbatteryBean.setUserName(userName);powerbatteryBean.setPressureValue(pressureValue);powerbatteryBean.setTime(time);return powerbatteryBean;}}

这样数据层就编写完了,再是我们的业务层

还是和上面的步骤一样先新建 一个包 叫 service

还是一样新建接口 名字叫 PowerbatteryService

编写 查询方法

名字叫 select 然后返回一个 对象集合

package service;import bean.PowerbatteryBean;import java.util.Date;import java.util.List;public interface PowerbatteryService {// 查询所有List<PowerbatteryBean> select();// 关闭资源void close();}

下面和上面步骤一样还是新建 实现类

package service.impl;import bean.PowerbatteryBean;import dao.PowerbatteryDao;import dao.impl.PowerbatteryDaoImpl;import service.PowerbatteryService;import tools.DateHelper;import tools.JDBCUtiles;import java.sql.Connection;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;public class PowerbatteryServiceImpl implements PowerbatteryService {private Connection connection;private PowerbatteryDao powerbatteryDao;// 构造方法public PowerbatteryServiceImpl() {// 获取连接对象connection = JDBCUtiles.getConnection();powerbatteryDao = new PowerbatteryDaoImpl(connection);}// 查询所有@Overridepublic List<PowerbatteryBean> select() {return powerbatteryDao.select();}// 关闭资源@Overridepublic void close() {powerbatteryDao.close();JDBCUtiles.close(connection);}}

好了数据层写完了,下面写显示层

新建 servlet 包

再在 servlet 包下新建index 类

让他继承 HttpServlet

给他一个 WebServlet

名字叫 /index

package servlet;import bean.PowerbatteryBean;import service.PowerbatteryService;import service.impl.PowerbatteryServiceImpl;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.util.List;@WebServlet("/index")public class index extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 调用业务层PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();// 让业务成干活List<PowerbatteryBean> powerbatteryBeanList = powerbatteryService.select();// 关闭资源powerbatteryService.close();// 存到作用域中req.setAttribute("powerbatteryBeanList",powerbatteryBeanList);// 请求转发req.getRequestDispatcher("index.jsp").forward(req,resp);}}

这样显示层就写完了,再到页面

填入数据

<%@ page import="bean.PowerbatteryBean" %><%@ page import="dao.PowerbatteryDao" %><%@ page import="dao.impl.PowerbatteryDaoImpl" %><%@ page import="tools.JDBCUtiles" %><%@ page import="java.sql.Connection" %><%@ page import="java.util.List" %><%--Created by IntelliJ IDEA.User: SSOADate: /6/3Time: 21:00To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="/jsp/jstl/core" %><html><head><title>显示页面</title><style>* {margin: 0;}table {width: 600px;margin: auto;text-align: center;}.thead_color {background-color: #cccccc;}.her_odd {background-color: aqua;}</style><script src="jquery-1.8.2.min.js"></script><script>// 隔行换色function colorChange() {// 偶数换色$("tbody tr:odd").addClass("her_odd");// 奇数移除颜色$("tbody tr:even").removeClass("her_odd");}$(function () {// 隔行换色colorChange();})</script></head><body><%// 测试数据 是否拿到Connection connection = JDBCUtiles.getConnection();out.print(connection);PowerbatteryDao powerbatteryDao = new PowerbatteryDaoImpl(connection);List<PowerbatteryBean> select = powerbatteryDao.select();out.print(select);%><div align="center"><div style="display: inline-block"><form action="handle" method="get"><input type="hidden" name="action" value="search"><input type="text" name="search" placeholder="请输入您要搜索的内容"><input type="submit" value="搜索"></form></div><div style="display: inline-block;margin-left: 10px"><button class="add_data">添加数据</button></div><table cellpadding="0" cellspacing="0" border="1"><caption><h1>新能源汽车动力电池信息 刘圳宇</h1></caption><thead><tr class="thead_color"><th>编号</th><th>车型</th><th>所属城市</th><th>使用单位</th><th>压差报警值</th><th>报警时间</th><th>操作</th></tr></thead><tbody><c:forEach items="${requestScope.powerbatteryBeanList}" var="powerbatteryList"><tr per_id="${powerbatteryList.id}"><td><a href="${pageContext.servletContext.contextPath}/edit?id=${powerbatteryList.id}"class="updata">${powerbatteryList.id}</a></td><td>${powerbatteryList.carName}</td><td>${powerbatteryList.cityName}</td><td>${powerbatteryList.userName}</td><td>${powerbatteryList.pressureValue}</td><td>${powerbatteryList.time}</td><td><a href="javascript:;" class="del">删除</a></td></tr></c:forEach></tbody></table></div></body></html>

这样显示数据功能写完了

添加数据和表单验证

我们先编写页面

这里的表单非空验证和日期格式验证,在我们的 jsHelper 都写了方法,直接调用即可(jsHelper里面都写了注释,有不懂得可以参看一下)

<%--Created by IntelliJ IDEA.User: SSOADate: /6/3Time: 22:02To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>add</title><style>* {margin: 0;}table {width: 600px;margin: auto;text-align: center;}</style><script src="jquery-1.8.2.min.js"></script><script src="jsHelper.js"></script><script>function check_add() {// 非空验证// 车型var carName = $(".carName").val();var checkCarName = check_is_empty(carName);if (checkCarName === 0) {alert("车型不可为空");return false;}// 非空验证// 所属城市var cityName = $(".cityName").val();var checkCityName = check_is_empty(cityName);if (checkCityName === 0) {alert("所属城市不可为空");return false;}// 非空验证// 使用单位var userName = $(".userName").val();var checkUserName = check_is_empty(userName);if (checkUserName === 0) {alert("使用单位不可为空");return false;}// 非空验证// 压差报警值var pressureValue = $(".pressureValue").val();var checkPressureValue = check_is_empty(pressureValue);if (checkPressureValue === 0) {alert("压差报警值不可为空");return false;}// 判断时间var time = $(".time").val();// 返回 0是格式有问题 ,返回-1是年有问题,-2是月有问题,-3是日有问题,1是合法var s = check_date(time);if (s === 0) {alert("格式有问题")return false;} else if (s === -1) {alert("年有问题")return false;} else if (s === -2) {alert("月有问题")return false;} else if (s === -3) {alert("日有问题")return false;}return true;}$(function () {$("form.addData").submit(check_add);})</script></head><body><form class="addData" action="add" method="post"><table cellspacing="0" cellpadding="0" border="1"><caption><h1>添加数据</h1></caption><tbody><tr><td>车辆信息:</td><td><input type="text" name="carName" class="carName"></td></tr><tr><td>所属城市:</td><td><input type="text" name="cityName" class="cityName"></td></tr><tr><td>使用单位:</td><td><input type="text" name="userName" class="userName"></td></tr><tr><td>压差报警值:</td><td><input type="text" name="pressureValue" class="pressureValue"></td></tr><tr><td>报警时间:</td><td><input type="text" name="time" class="time"></td></tr><tr><td>操作</td><td><input class="add" type="submit" value="添加">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="重置"></td></tr></tbody></table></form></body></html>

下面写添加方法

还是和上面的步骤一样

先在 PowerbatteryDao 里写接口

// 添加数据int insert(PowerbatteryBean powerbatteryBean);

这里我们给一个 PowerbatterBean 对象,返回一个受影响行数如果 >0 就是添加成功 如果<0 就是添加失败

我们这里可以点击 这个绿色的 I 可以迅速的跳到实现类

然后在 PowerbatteryDaoImpl 里编写添加方法

// 添加方法@Overridepublic int insert(PowerbatteryBean powerbatteryBean) {// SQLString sql = "INSERT INTO powerbattery VALUES (NULL,?,?,?,?,?);";// 参数数组Object[] objects = {powerbatteryBean.getCarName(),powerbatteryBean.getCityName(),powerbatteryBean.getUserName(),powerbatteryBean.getPressureValue(),powerbatteryBean.getTime()};// 调用方法// 返回return commonUpdate(sql, objects);}

数据层写完再跳到业务层

首先还是编写业务层 接口 PowerbatteryService

在接口里添加下面的方法

我会接口一些的参数,然后在业务层你封装成一个 PowerbatteryBean 对象 再给数据层

// 添加数据int insert(String carName, String cityName, String userName, String pressureValue, String time);

具体操作 :

跳到 业务层的实现类里面

编写添加方法

具体写法见下面代码

// 添加数据@Overridepublic int insert(String carName, String cityName, String userName, String pressureValue, String time) {// 封装// 新建bean 对象PowerbatteryBean powerbatteryBean = new PowerbatteryBean();powerbatteryBean.setCarName(carName);powerbatteryBean.setCityName(cityName);powerbatteryBean.setUserName(userName);powerbatteryBean.setPressureValue(Integer.valueOf(pressureValue));powerbatteryBean.setTime(DateHelper.strToDate(time));// 调用daoreturn powerbatteryDao.insert(powerbatteryBean);}

好了,业务层写完了,在到显示层

这里应该新建一个 新的 servlet 名字叫 add

package servlet;import service.PowerbatteryService;import service.impl.PowerbatteryServiceImpl;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;@WebServlet("/add")public class add extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getRequestDispatcher("add.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置编码req.setCharacterEncoding("utf8");// 获取参数String carName = req.getParameter("carName");String cityName = req.getParameter("cityName");String userName = req.getParameter("userName");String pressureValue = req.getParameter("pressureValue");String time = req.getParameter("time");// 调用业务层PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();int insert = powerbatteryService.insert(carName, cityName, userName, pressureValue, time);// 关闭资源powerbatteryService.close();// 重定向resp.sendRedirect("index");}}

这里 doGet 直接请求转发到 add.jsp 页面 ,不用任何操作(这里就是我们页面点击添加按钮,直接请求转发到添加页面)

页面效果

表单验证效果

添加完后效果

删除数据

删除数据编写与要用到 Ajax 删除

ajax 格式

首先编写 数据层接口(PowerbatteryDao)

这里我会接受一个id,然后去数据库根据 id 来查数据

// 删除数据int delete(String id);

编写实现类(PowerbatteryDaoImpl)

// 删除数据@Overridepublic int delete(String id) {// sqlString sql = "DELETE FROM powerbattery WHERE id = ?;";// 参数数组Object[] objects = {id};// 调用方法// 返回return commonUpdate(sql,objects);}

再编写业务层(PowerbatteryService)

// 删除数据int delete(String id);

实现类(PowerbatteryServiceImpl)

// 删除数据@Overridepublic int delete(String id) {return powerbatteryDao.delete(id);}

这样数据层业务层都写完了,然后再是显示层和页面了,这里我们先写页面

注意一下下面的 ajax 请求

<%@ page import="bean.PowerbatteryBean" %><%@ page import="dao.PowerbatteryDao" %><%@ page import="dao.impl.PowerbatteryDaoImpl" %><%@ page import="tools.JDBCUtiles" %><%@ page import="java.sql.Connection" %><%@ page import="java.util.List" %><%--Created by IntelliJ IDEA.User: SSOADate: /6/3Time: 21:00To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="/jsp/jstl/core" %><html><head><title>显示页面</title><style>* {margin: 0;}table {width: 600px;margin: auto;text-align: center;}.thead_color {background-color: #cccccc;}.her_odd {background-color: aqua;}</style><script src="jquery-1.8.2.min.js"></script><script>// 隔行换色function colorChange() {// 偶数换色$("tbody tr:odd").addClass("her_odd");// 奇数移除颜色$("tbody tr:even").removeClass("her_odd");}// 添加数据function addData_click() {// 跳转网页window.location.href = "add";}// 删除数据function del_click() {// 获取选中的行var $tr = $(this).parent().parent();// 获取自义定属性var per_id = $(this).parent().parent().attr("per_id")// ajax$.ajax({url: "handle",type: "get",dataType: "json",data: {"action": "delete", "id": per_id},success: function (result) {if (result["status"] === "ok") {// {"status":"ok"}alert("删除成功!")$tr.remove();colorChange();} else {// {"status":"fail"}alert("删除失败!");}}})}$(function () {// 隔行换色colorChange();// 添加数据$(".add_data").click(addData_click);// 删除数据$(".del").click(del_click);})</script></head><body><%Connection connection = JDBCUtiles.getConnection();out.print(connection);PowerbatteryDao powerbatteryDao = new PowerbatteryDaoImpl(connection);List<PowerbatteryBean> select = powerbatteryDao.select();out.print(select);%><div align="center"><div style="display: inline-block"><form action="handle" method="get"><input type="hidden" name="action" value="search"><input type="text" name="search" placeholder="请输入您要搜索的内容"><input type="submit" value="搜索"></form></div><div style="display: inline-block;margin-left: 10px"><button class="add_data">添加数据</button></div><table cellpadding="0" cellspacing="0" border="1"><caption><h1>新能源汽车动力电池信息</h1></caption><thead><tr class="thead_color"><th>编号</th><th>车型</th><th>所属城市</th><th>使用单位</th><th>压差报警值</th><th>报警时间</th><th>操作</th></tr></thead><tbody><c:forEach items="${requestScope.powerbatteryBeanList}" var="powerbatteryList"><tr per_id="${powerbatteryList.id}"><td><a href="${pageContext.servletContext.contextPath}/edit?id=${powerbatteryList.id}"class="updata">${powerbatteryList.id}</a></td><td>${powerbatteryList.carName}</td><td>${powerbatteryList.cityName}</td><td>${powerbatteryList.userName}</td><td>${powerbatteryList.pressureValue}</td><td>${powerbatteryList.time}</td><td><a href="javascript:;" class="del">删除</a></td></tr></c:forEach></tbody></table></div></body></html>

需要理解的是 这里的 ajax 请求

// 获取选中的行var $tr = $(this).parent().parent();// 获取自义定属性var per_id = $(this).parent().parent().attr("per_id")// ajax$.ajax({url: "handle",type: "get",dataType: "json",data: {"action": "delete", "id": per_id},success: function (result) {if (result["status"] === "ok") {// {"status":"ok"}alert("删除成功!")$tr.remove();colorChange();} else {// {"status":"fail"}alert("删除失败!");}}})}

这里页面就写完了

再编写显示层(handle)

这里的 servlet 可以命名为 handle ,我们为了节省 servlet 可以将 删除、查询、修改数据 公用一个 servlet

要注意 在使用 PrintWriter 对象时要先设置 字符编码(说到、做到) 响应头

package servlet;import bean.PowerbatteryBean;import service.PowerbatteryService;import service.impl.PowerbatteryServiceImpl;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.io.PrintWriter;import java.util.List;@WebServlet("/handle")public class handle extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 说到resp.setHeader("Content-Type", "text/html;charset=UTF-8");// 做到resp.setCharacterEncoding("utf8");// 获取参数String action = req.getParameter("action");switch (action){case "delete":delete(req,resp);break;default:System.out.println("非法数据");break;}}// 删除数据private void delete(HttpServletRequest req, HttpServletResponse resp) {// 获取idString id = req.getParameter("id");// 调用业务员PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();// 业务员干活int delete = powerbatteryService.delete(id);// ["status":"ok"]// ["status":"fail"]String status = null;if (delete > 0){status = "{\"status\":\"ok\"}";}else{status = "{\"status\":\"fail\"}";}PrintWriter writer = null;try {writer = resp.getWriter();} catch (IOException e) {e.printStackTrace();}// 关闭资源powerbatteryService.close();writer.write(status);}}

修改数据

这里修改数据分为两步

第一:新建 getBeanId 获取用户点击删除那一条数据的 id ,去数据库里查找这条数据

第二:新建 update 方法 更新数据,把数据重新添加

第一

首先我们要在页面里藏一个 id

<c:forEach items="${requestScope.powerbatteryBeanList}" var="powerbatteryList"><tr per_id="${powerbatteryList.id}"><td><a href="${pageContext.servletContext.contextPath}/edit?id=${powerbatteryList.id}"class="updata">${powerbatteryList.id}</a></td><td>${powerbatteryList.carName}</td><td>${powerbatteryList.cityName}</td><td>${powerbatteryList.userName}</td><td>${powerbatteryList.pressureValue}</td><td>${powerbatteryList.time}</td><td><a href="javascript:;" class="del">删除</a></td></tr></c:forEach>

id 藏完后在编写数据层

在数据层接口(PowerbatteryDao)里新建getBeanId 方法 ,接受一个id 返回一个PoWerbatteryBean 对象

// 根据id 来拿数据PowerbatteryBean getBeanId(String id);

在跳转到实现类里去实现这个方法

// 根据 id 数据,配合更新方法@Overridepublic PowerbatteryBean getBeanId(String id) {// SQLString sql ="SELECT * FROM powerbattery WHERE id = ?;";// 参数数组Object[] objects = {id};// 调用方法ResultSet resultSet = commonQuery(sql, objects);PowerbatteryBean powerbatteryBean = new PowerbatteryBean();try {if (resultSet.next()){powerbatteryBean = lineToObject(resultSet);}} catch (SQLException throwables) {throwables.printStackTrace();}// 返回return powerbatteryBean;}

数据层写完了,在编写业务层(PowerbatteryService)

首先还是新建 业务层接口(PowerbatteryService)

// 根据id 来查数据PowerbatteryBean getBeanId(String id);

再去业务层的实现类里去实现他

// 根据 id 来查数据@Overridepublic PowerbatteryBean getBeanId(String id) {return powerbatteryDao.getBeanId(id);}

显示层(edit):

在 servlet 新建 edit ,让他继承HttpServlet

package servlet;import bean.PowerbatteryBean;import service.PowerbatteryService;import service.impl.PowerbatteryServiceImpl;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;@WebServlet("/edit")public class edit extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取idString id = req.getParameter("id");// 调用业务员PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();// 业务员干活PowerbatteryBean powerbatteryBean = powerbatteryService.getBeanId(id);// 存到作用域中req.setAttribute("powerbatteryBean",powerbatteryBean);// 请求转发req.getRequestDispatcher("edit.jsp").forward(req,resp);}}

这样数据就拿到了

页面效果

第二

数据层新建 接口

// 修改数据int update(PowerbatteryBean powerbatteryBean);

跳转到实现类

这里要注意:数据要一一对应,不要填错了

// 更新数据@Overridepublic int update(PowerbatteryBean powerbatteryBean) {// 定义 sql 语句String sql = "UPDATE powerbattery SET carName = ?,cityName = ?,userName = ?,pressureValue = ?,`time`= ? WHERE id = ?;";Object[] objects= {powerbatteryBean.getCarName(),powerbatteryBean.getCityName(),powerbatteryBean.getUserName(),powerbatteryBean.getPressureValue(),DateHelper.DateToStr(powerbatteryBean.getTime()),powerbatteryBean.getId()};int i = commonUpdate(sql, objects);close();return i;}

然后再是业务层(PowerbatteryService)

业务层需要把零散数据进行封装,封装成一个 对象

// 更新数据int update(String id,String carName,String cityName,String userName,String pressureValue,String time);

业务层实现类(PowerbatteryServiceImpl):

// 更新数据@Overridepublic int update(String id, String carName, String cityName, String userName, String pressureValue, String time) {// 新建对象PowerbatteryBean powerbatteryBean = new PowerbatteryBean();powerbatteryBean.setId(Integer.valueOf(id));powerbatteryBean.setCarName(carName);powerbatteryBean.setCityName(cityName);powerbatteryBean.setUserName(userName);powerbatteryBean.setPressureValue(Integer.valueOf(pressureValue));powerbatteryBean.setTime(DateHelper.strToDate(time));return powerbatteryDao.update(powerbatteryBean);}

最后显示层(handle)

这里我们节省 一下 servlet 直接在 handle 中 新建 一个update 方法即可

package servlet;import bean.PowerbatteryBean;import service.PowerbatteryService;import service.impl.PowerbatteryServiceImpl;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.io.PrintWriter;import java.util.List;@WebServlet("/handle")public class handle extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 说到resp.setHeader("Content-Type", "text/html;charset=UTF-8");// 做到resp.setCharacterEncoding("utf8");// 获取参数String action = req.getParameter("action");switch (action){case "delete":delete(req,resp);break;case "update":// 修改数据update(req,resp);break;default:System.out.println("非法数据");break;}}// 更新数据private void update(HttpServletRequest req, HttpServletResponse resp) throws IOException {// http://localhost:8080/17_war_exploded/handle?carName=as&cityName=sss&userName=sss&pressureValue=-9&time=-09-05// http://localhost:8080/15_war_exploded/handle?action=update&id=6&// 获取idString id = req.getParameter("id");String carName = req.getParameter("carName");String cityName = req.getParameter("cityName");String userName = req.getParameter("userName");String pressureValue = req.getParameter("pressureValue");String time = req.getParameter("time");// 调用业务员PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();int update = powerbatteryService.update(id, carName, cityName, userName, pressureValue, time);// 关闭资源powerbatteryService.close();// 判断受影响行数resp.sendRedirect("index");}// 删除数据private void delete(HttpServletRequest req, HttpServletResponse resp) {// 获取idString id = req.getParameter("id");// 调用业务员PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();// 业务员干活int delete = powerbatteryService.delete(id);// ["status":"ok"]// ["status":"fail"]String status = null;if (delete > 0){status = "{\"status\":\"ok\"}";}else{status = "{\"status\":\"fail\"}";}PrintWriter writer = null;try {writer = resp.getWriter();} catch (IOException e) {e.printStackTrace();}// 关闭资源powerbatteryService.close();writer.write(status);}}

这样修改数据就写完了

查询数据

这里查询数据我们根据 所属城市来查

首先,好是和上面的步骤一样

在数据层接口(PowerbatteryDao)新建方法

// 查询List<PowerbatteryBean> select(String search);

然后再去数据层实现类(PowerbatteryDaoImpl)去实现他

要注意的是,这里我们字符串拼接不可以用 ? 拼接 得用我们最开始的 + 号拼接的方法

// 搜索(查询方法)@Overridepublic List<PowerbatteryBean> select(String search) {// SELECT * FROM powerbattery WHERE cityName LIKE '%?%';// SQLString sql = "SELECT * FROM powerbattery WHERE cityName LIKE '%"+search+"%';";// 参数数组Object[] objects = {};// 新建对象集合List<PowerbatteryBean> powerbatteryBeanList = new ArrayList<>();// 调用方法ResultSet resultSet = commonQuery(sql, objects);while (true){try {if (!resultSet.next()) break;} catch (SQLException throwables) {throwables.printStackTrace();}PowerbatteryBean powerbatteryBean = lineToObject(resultSet);powerbatteryBeanList.add(powerbatteryBean);}// 返回return powerbatteryBeanList;}

然后再是业务层接口(PowerbatteryService)

// 查询List<PowerbatteryBean> select(String search);

再去业务层实现类(PowerbatteryServiceImpl)

这里直接返回父类方法

// 搜索(查询)@Overridepublic List<PowerbatteryBean> select(String search) {return powerbatteryDao.select(search);}

最后显示层(handle)

package servlet;import bean.PowerbatteryBean;import service.PowerbatteryService;import service.impl.PowerbatteryServiceImpl;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.io.PrintWriter;import java.util.List;@WebServlet("/handle")public class handle extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 说到resp.setHeader("Content-Type", "text/html;charset=UTF-8");// 做到resp.setCharacterEncoding("utf8");// 获取参数String action = req.getParameter("action");switch (action){case "delete":delete(req,resp);break;case "update":// 修改数据update(req,resp);break;case "search":// 查询search(req,resp);break;default:System.out.println("非法数据");break;}}// 搜索(查询)private void search(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取 搜索的 所属城市String search = req.getParameter("search");// 调用业务员PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();List<PowerbatteryBean> powerbatteryBeanList = powerbatteryService.select(search);// 关闭资源powerbatteryService.close();// 存到作用域中req.setAttribute("powerbatteryBeanList",powerbatteryBeanList);// 请求转发req.getRequestDispatcher("index.jsp").forward(req,resp);}// 更新数据private void update(HttpServletRequest req, HttpServletResponse resp) throws IOException {// http://localhost:8080/17_war_exploded/handle?carName=as&cityName=sss&userName=sss&pressureValue=-9&time=-09-05// http://localhost:8080/15_war_exploded/handle?action=update&id=6&// 获取idString id = req.getParameter("id");String carName = req.getParameter("carName");String cityName = req.getParameter("cityName");String userName = req.getParameter("userName");String pressureValue = req.getParameter("pressureValue");String time = req.getParameter("time");// 调用业务员PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();int update = powerbatteryService.update(id, carName, cityName, userName, pressureValue, time);// 关闭资源powerbatteryService.close();// 判断受影响行数resp.sendRedirect("index");}// 删除数据private void delete(HttpServletRequest req, HttpServletResponse resp) {// 获取idString id = req.getParameter("id");// 调用业务员PowerbatteryService powerbatteryService = new PowerbatteryServiceImpl();// 业务员干活int delete = powerbatteryService.delete(id);// ["status":"ok"]// ["status":"fail"]String status = null;if (delete > 0){status = "{\"status\":\"ok\"}";}else{status = "{\"status\":\"fail\"}";}PrintWriter writer = null;try {writer = resp.getWriter();} catch (IOException e) {e.printStackTrace();}// 关闭资源powerbatteryService.close();writer.write(status);}}

之后把页面更改一下即可完成

<%@ page import="bean.PowerbatteryBean" %><%@ page import="dao.PowerbatteryDao" %><%@ page import="dao.impl.PowerbatteryDaoImpl" %><%@ page import="tools.JDBCUtiles" %><%@ page import="java.sql.Connection" %><%@ page import="java.util.List" %><%--Created by IntelliJ IDEA.User: SSOADate: /6/3Time: 21:00To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="/jsp/jstl/core" %><html><head><title>显示页面</title><style>* {margin: 0;}table {width: 600px;margin: auto;text-align: center;}.thead_color {background-color: #cccccc;}.her_odd {background-color: aqua;}</style><script src="jquery-1.8.2.min.js"></script><script>// 隔行换色function colorChange() {// 偶数换色$("tbody tr:odd").addClass("her_odd");// 奇数移除颜色$("tbody tr:even").removeClass("her_odd");}// 添加数据function addData_click() {// 跳转网页window.location.href = "add";}// 删除数据function del_click() {// 获取选中的行var $tr = $(this).parent().parent();// 获取自义定属性var per_id = $(this).parent().parent().attr("per_id")// ajax$.ajax({url: "handle",type: "get",dataType: "json",data: {"action": "delete", "id": per_id},success: function (result) {if (result["status"] === "ok") {// {"status":"ok"}alert("删除成功!")$tr.remove();colorChange();} else {// {"status":"fail"}alert("删除失败!");}}})}$(function () {// 隔行换色colorChange();// 添加数据$(".add_data").click(addData_click);// 删除数据$(".del").click(del_click);})</script></head><body><%Connection connection = JDBCUtiles.getConnection();out.print(connection);PowerbatteryDao powerbatteryDao = new PowerbatteryDaoImpl(connection);List<PowerbatteryBean> select = powerbatteryDao.select();out.print(select);%><div align="center"><div style="display: inline-block"><form action="handle" method="get"><input type="hidden" name="action" value="search"><input type="text" name="search" placeholder="请输入您要搜索的内容"><input type="submit" value="搜索"></form></div><div style="display: inline-block;margin-left: 10px"><button class="add_data">添加数据</button></div><table cellpadding="0" cellspacing="0" border="1"><caption><h1>新能源汽车动力电池信息</h1></caption><thead><tr class="thead_color"><th>编号</th><th>车型</th><th>所属城市</th><th>使用单位</th><th>压差报警值</th><th>报警时间</th><th>操作</th></tr></thead><tbody><c:forEach items="${requestScope.powerbatteryBeanList}" var="powerbatteryList"><tr per_id="${powerbatteryList.id}"><td><a href="${pageContext.servletContext.contextPath}/edit?id=${powerbatteryList.id}"class="updata">${powerbatteryList.id}</a></td><td>${powerbatteryList.carName}</td><td>${powerbatteryList.cityName}</td><td>${powerbatteryList.userName}</td><td>${powerbatteryList.pressureValue}</td><td>${powerbatteryList.time}</td><td><a href="javascript:;" class="del">删除</a></td></tr></c:forEach></tbody></table></div></body></html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。