Javaee技术目的总结

                                        一.前节回顾

在前一节中,我们了解了:

1.将中央控制器中的Action容器,变成可控制!

2.针对于反射调用业务代码,最终页面跳转 

3.jsp页面参数传递后台的代码优化字段太多有影响!

 


                                   二.项目部署前期准备工作

1.项目运行环境配置

1.1.首先新建一个web项目,完成xml构建

 然后命名,点击next点到底直到这个出现

 将其勾选,next!

1.2加载jar

将我们的jar放在web项目的安全目录下

 然后在进行 add  buth将我们的jar加入项目

1.3准备工作结束

新建一个utils包,将我们的数据连接驱动,以及过滤器,连接保护文件,分页代码,以及通用的方法basedao加入进utils包中

 

                                     三.正式启动项目

1.创建实体包

 定义需要的属性,提供get,set方法;tostring,,有参,无参数方法

 2.建立通用查询方法

2.1.继承BaseDao<Book>实现通用查询

public List<Book> list(Book book, PageBean pageBean) throws Exception {String sql = "select *from  t_mvc_book where 1=1 ";String bname = book.getBname();int bid = book.getBid();if (StringUtils.isNotBlank(bname)) {sql += "  and  bname  like  '%" + bname + "%' ";}if (bid != 0) {sql += "  and  bid=" + bid;}return super.executeQuery(sql, Book.class, pageBean);}

3.老版本增删改,和新增删改

3.1老版本增删改

// 增加public int add(Book book) throws Exception {String sql = "insert into t_mvc_book values(?,?,?)";Connection conn = DBAccess.getConnection();PreparedStatement ps = conn.prepareStatement(sql);ps.setObject(1, book.getBid());ps.setObject(2, book.getBname());ps.setObject(3, book.getPrice());return ps.executeUpdate();}//删除public int del(Book book) throws Exception {String sql = "delete from t_mvc_book where bid=? ";Connection conn = DBAccess.getConnection();PreparedStatement ps = conn.prepareStatement(sql);ps.setObject(1, book.getBid());return ps.executeUpdate();}public int edit(Book book) throws Exception {String sql = " update t_mvc_book set bname=?,price=? where bid=?";Connection conn = DBAccess.getConnection();PreparedStatement ps = conn.prepareStatement(sql);ps.setObject(1, book.getBname());ps.setObject(2, book.getPrice());ps.setObject(3, book.getBid());return ps.executeUpdate();}

缺点:

 重复代码:

Connection conn = DBAccess.getConnection();

PreparedStatement ps =conn.prepareStatement(sql);

 重复流程:

ps.setObject(1, book.getBid());
ps.setObject(2, book.getBname());

ps.setObject(3, book.getPrice());

3.2新版本增删改

3.2.1在basedao对于重复代码进行封装

通过一个对象集合来存储实体的属性,然后再通过一个for循环其下标其目的是:根据操作来遍历出来所需要的属性,然后通过反射来操作,最后加入设置值

 * 通用的增删改方法* @param book* @throws Exception* sql:sql语句* T:实体* attrs:实体属性*/public int executeUpdate(String sql, T t, String[] attrs) throws Exception {Connection con = DBAccess.getConnection();PreparedStatement pst = con.prepareStatement(sql);for (int i = 0; i < attrs.length; i++) {Field f = t.getClass().getDeclaredField(attrs[i]);f.setAccessible(true);pst.setObject(i+1, f.get(t));}return pst.executeUpdate();}

3.2.2新版本

只需要调用那个方法,根据需求编写sql语句,然后在通过return返回,sql语句,实体,集中中的元素

/*** 通用增删改*///增加public int add(Book book) throws Exception {String sql = "insert  into   t_mvc_book values(?,?,?)";return super.executeUpdate(sql, book, new  String[] {"bid","bname","price"});}//删除public int del(Book book) throws Exception {String sql = "delete from t_mvc_book where bid=?  ";return super.executeUpdate(sql, book, new  String[] {"bid"});}//修改public int edit(Book book) throws Exception {String sql = "update t_mvc_book set bname=?,price=? where bid=?  ";return super.executeUpdate(sql, book, new  String[] {"bname","price","bid"});}

4.juin测试

选择类目,crtl+n 建立一个类Juint  test case给代码进行测试

 

 4.1方法测试

实现思路:

1.首先在最外层:调用私有化的dao方法

2.在方法内部实例化实体

3.然后在通过dao.方法名

4.当然具体情况具体分析

package com.lz.dao;import static org.junit.Assert.*;import java.util.List;import org.junit.Test;import com.lz.entity.Book;
import com.lz.utils.PageBean;public class BookDaoTest {private  BookDao  bk=new  BookDao();@Testpublic void testList() throws Exception {Book  book=new Book();book.setBname("圣墟");PageBean  pageBean=new PageBean();//pageBean.setPage(3);pageBean.setPagination(false);List<Book> list = bk.list(book, pageBean);for (Book b : list) {System.out.println(b);}}@Testpublic void testAdd() throws Exception {Book  book=new Book(16,"圣墟嘿嘿嘿",12f);bk.add(book);}@Testpublic void testDel() throws Exception {Book  book=new Book();book.setBid(16);bk.del(book);}@Testpublic void testEdit() throws Exception {Book  book=new Book(16,"圣墟嘿嘿嘿",12f);bk.edit(book);}}

4.2方法调用

选择方法

 当出现绿色时就代表方法没有问题


5.配置xml文件,通过反射来实现一些方法

5.1.配置mvc.xml

 name属性为:我们在Bookaction中  return方法的返回值

path为:跳转路径

5.2配置tid文件

 tag-class属性为:我们配置的分页代码路径

6.实现web界面

6.1数据显示界面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@taglib  prefix="z"   uri="http://jsp.veryedu.cn" %><%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<linkhref="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"rel="stylesheet">
<scriptsrc="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
<title>书籍列表</title>
<style type="text/css">
.page-item input {padding: 0;width: 40px;height: 100%;text-align: center;margin: 0 6px;
}.page-item input, .page-item b {line-height: 38px;float: left;font-weight: 400;
}.page-item.go-input {margin: 0 10px;
}
</style>
</head>
<body><form class="form-inline"action="${pageContext.request.contextPath }/book.action?methodName=list" method="post"><div class="form-group mb-2"><input type="text" class="form-control-plaintext" name="bname"placeholder="请输入书籍名称"><a  href="${pageContext.request.contextPath }/book.action?methodName=toEdit&bid=${b.bid }">增加</a></div><button type="submit" class="btn btn-primary mb-2">查询</button></form><table class="table table-striped  "><thead><tr><th scope="col">书籍ID</th><th scope="col">书籍名</th><th scope="col">价格</th></tr></thead><tbody><c:forEach items="${list }"  var="b"><tr><td>${b.bid }</td><td>${b.bname }</td><td>${b.price }</td><td><a  href="${pageContext.request.contextPath }/book.action?methodName=toEdit&bid=${b.bid }">修改</a><a  href="${pageContext.request.contextPath }/book.action?methodName=tdel&bid=${b.bid }">删除</a></td></tr></c:forEach></tbody></table><z:page pageBean="${pageBean }"></z:page>
</body>
</html>

6.1.2效果图

 6.2增加,修改

6.2.1代码

由于增加,修改共用一个jsp界面,当我们传参数时要对于参数进行一个判断,使用三元运算符,如果b为就是增加操作,不然就是修改操作

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="http://jsp.veryedu.cn"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>书籍编辑界面</title>
</head>
<body>
<form class="form-inline"action="${pageContext.request.contextPath }/book.action?methodName=${empty b ? 'add' : 'edit'}" method="post">书籍ID:<input type="text" name="bid" value="${b.bid }"><br>书籍名称:<input type="text" name="bname" value="${b.bname }"><br>书籍价格:<input type="text" name="price" value="${b.price }"><br><input type="submit"></form>
</body>
</html>

6.2.2效果图

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式运用——监控平台 Zabbix

分布式运用——监控平台 Zabbix 一、Zabbix概述1.监控平台的作用2.Zabbix 是什么&#xff1f;3.Zabbix的特点4.Zabbix的使用场景5.Zabbix 监控原理6.Zabbix 6.0 新特性7.Zabbix 6.0 功能组件①.Zabbix Server②.数据库③.Web 界面④.Zabbix Agent⑤.Zabbix Proxy⑥.Java Gatewa…

爬虫反反爬

目录 为什么要反爬&#xff1f; 经常被反爬的主要人群 常见的反爬策略 通过headers字段来反爬 通过headers中的User-Agent字段来反爬 通过referer字段或者是其他字段来反爬 通过cookie来反爬 通过请求参数来反爬 通过从html静态文件中获取请求数据(github登录数据) 通…

Kafka入门, 消费者组案例(十九)

pom 文件 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency></dependencies>独立消费者案例&#xff08;订阅主语&a…

nginx四层转发应用

默认使用yum安装的nginx是没有额外安装的动态模块的&#xff0c;需要自己额外安装 ls /usr/lib64/nginx/modules/ 若是不安装stream模块&#xff0c;直接在nginx的配置文件中调用stream模块&#xff0c;重载配置文件的时候会报错识别不到stream功能 安装stream模块 yum insta…

匿名管道的使用示例

目录 整体框架 通信步骤 创建管道 ​编辑创建子进程&关闭相应的fd ​编辑 进程间通信 父子进程通信之间四种场景 实现父亲读&#xff0c;孩子写的进程间通信 管道通信的使用场景样例实现 整体框架 通信步骤 创建管道 pipe的参数为输出型参数&#xff0c;返回读写端…

如何提升问卷数据的有效性?

问卷调查法是收集数据的宝贵工具&#xff0c;可以为商业、社会科学和医疗保健等众多领域的决策过程提供真实可靠的数据信息。然而&#xff0c;问卷数据的准确性和可靠性是影响最终结论的关键因素&#xff0c;而他们取决于问卷设计和数据收集过程的质量。在本文中&#xff0c;我…

zabbix proxy的配置及zabbix实现高可用(监控 windows,java应用,SNMP等)

目录 zabbix proxy 分布式代理服务器部署zabbix proxy 代理服务器部署 Zabbix 高可用集群Zabbix 监控 Windows 系统Zabbix 监控 java 应用Zabbix 监控 SNMP zabbix proxy 分布式代理服务器 zabbix 分布式代理服务器&#xff0c;可以代替zabbix server 采集性能和可用性数据。z…

nginx七层代理和四层转发的理解

先来理解一下osi七层模型 应用层 应用层是ISO七层模型的最高层&#xff0c;它直接与用户和应用程序交互&#xff0c;提供用户与网络的接口。它包括各种应用协议&#xff0c;如HTTP、FTP、SMTP等&#xff0c;用于实现特定应用的功能和通信表示层 表示层…

学生成绩分析项目

数据采集 导入必要的库 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns加载数据集 df pd.read_csv(D:\\桌面\\数据\\student_marks.csv)显示数据框的前几行 # 显示数据框的形状 print("Shape of the dataframe:", df.shape)#显示…

【运维】GitLab相关配置优化等

默认 Git 设置 http post 的缓存为 1MB&#xff0c;使用命令将git的缓存设为500M&#xff0c;重新配置一下postBuffer值 git config --global http.postBuffer 524288000 解决方法2&#xff1a;直接修改config参数&#xff0c; windows: ./git/config中&#xff0c;加入以下…

Freertos-mini智能音箱项目---IO扩展芯片PCA9557

项目上用到的ESP32S3芯片引脚太少&#xff0c;选择了PCA9557扩展IO&#xff0c;通过一路i2c可以扩展出8个IO。这款芯片没有中断输入&#xff0c;所以更适合做扩展输出引脚用&#xff0c;内部寄存器也比较少&#xff0c;只有4个&#xff0c;使用起来很容易。 输入寄存器 输出寄存…

【Linux】高级IO(二)

文章目录 高级IO&#xff08;二&#xff09;I/O多路转接之pollpoll服务器 I/O多路转接之epollepoll相关函数epoll工作原理epoll回调机制epoll服务器epoll的优点 高级IO&#xff08;二&#xff09; I/O多路转接之poll poll也是系统提供的一个多路转接接口 poll系统调用也可以…