技术标签: 示例程序 Java Web 学习笔记 增删改查 MVC模式 JavaWeb demo
本文提供一个完整的示例程序,实现由页面对数据库数据进行增、删、改、查。
开发环境是jdk-14.0.2、mysql-8.0.22、tomcat-9.0.37、IntelliJ IDEA 2018。
项目文件、数据库文件打包下载:
JavaWebDemo_增删改查.rar_webdemocsdn下载-互联网文档类资源-CSDN下载
页面划分为四个独立的部分:头部、左部、中部、右部。各部分的功能是:
头部——展示标题;
左部——添加信息;
中部——查询、删除、修改;
右部——查看全部信息。
A.增加
在左部页面,完成添加信息功能。
输入编号、姓名,选择性别,点击提交(当该编号的记录已存在时,无法加入)。
B.删除
在中部页面,先查询、再删除。
查询出编号为A008的记录
点击“删除”,删除成功。
C.修改
在中部页面,先查询、再修改。
查询出编号为A007的记录
点击“修改”,进入修改页面,原信息自动导入
将“萧峰”修改为“乔峰”
点击“提交”,修改成功。
D.查询
在删除和修改操作中,已经查询过单条记录。这里,在右部页面,查询出全部信息。
点击“点击查看全部信息”
整体视角
创建数据库,命名为“javawebdemo1”
-> 建立一张数据表,命名为“person”
-> 创建三个字段,分别为:
number(主键)—— 编号;
name —— 姓名;
gender —— 性别。
表结构:
(1)整体结构
src,即后台部分:先创建cn.sigma包,再在下面创建entity、 database、 dao、 service、 servlet等子包。各包的功能含义为:
entity —— 实体类;
database —— 数据库连接类;
dao —— 数据访问;
service —— 业务逻辑;
servlet —— 用户功能和响应。
web,即前端部分:创建pageHeader、pageLeft、 pageMid、 pageRight等目录。各目录的含义为:
pageHeader —— 页面头部目录;
pageLef —— 页面左部目录;
pageMid —— 页面中部目录;
pageRight —— 页面右部目录。
(2)web部分的结构
前端使用<frameset>标签将页面分为头、左、中、右四个独立的部分。
建立的jsp文件的功能含义为:
1)index.jsp —— 总页面;
2)pageHeader
home.jsp —— 头部页面;
3)pageLeft
home.jsp —— 左部页面;
4)pageMid
home.jsp —— 中部删除页面;
mod.jsp —— 中部修改页面;
5)pageRight
home.jsp —— 右部页面。
(3)src部分的结构
其中,各java类的功能含义为:
1)entity
Person —— 人员类;
2)database
Database —— 数据库连接类,由jdbc实现;
3)dao
PersonDao —— 人员dao层接口;
imp/PersonDaoImp —— 人员dao层实现类;
4)service
PersonService ——人员service层接口;
imp/PersonServiceImp —— 人员service层实现类;
5)servlet,访问路径均采用注解配置
AddServlet —— 添加信息;
DeleteServlet —— 删除信息;
OldRecordServlet —— 得到原记录信息;
SelectAllServlet —— 得到全部记录信息;
SelectOneServlet —— 得到一个记录信息;
UpdateServlet —— 修改信息。
(1)添加信息
用户在页面的一个form表单中输入了编号、姓名、性别等信息,点击提交后,访问并将表单数据传输到AddServlet。在AddServlet中,首先获取到页面输入的编号、姓名、性别等信息值,然后验证编号所属的记录是否在数据库中已存在,若不存在,将数据实例化为对象,加入数据库;若已存在,不做操作,给出页面提示信息。
(2)删除信息
先查询出一条记录,再删除。
查询过程:用户在页面的一个表单中输入要查询的编号,点击提交,将编号传到SelectOneServlet;SelectOneServlet获取到编号后,在数据库中查询出相对应的记录信息,然后以请求转发的方式将记录信息返回页面;页面用EL表达式的方式接收到该条记录。
删除过程:用户点击删除按钮,访问并将记录的编号传到DeleteServlet;在DeleteServlet中,首先接收到页面传来的编号,然后在数据库中删除与之对应的记录,并在页面给出提示消息。
(3)修改信息
先查询出一条记录,再修改。
查询过程:同删除中的描述。
修改过程:用户点击修改按钮,访问将记录的编号传到OldRecordServlet;在OldRecordServlet中,接收到编号,在数据库中查询出相对应的记录,将记录信息返回给修改页面mod.jsp。mod.jsp接收到该记录,并将信息直接地置在表单中,用户修改信息后,点击提交,将信息传至UpdateServlet;UpdateServlet接收到页面的表单信息后,将数据实例化为对象,更新数据库的此条记录,并在页面给出提示消息。
(4)查询信息
在右部页面,查询得到了所有的记录信息
用户点击“点击查看全部信息”按钮;后台接收到请求,查询出数据库中的全部记录,将记录信息返回页面;页面用EL表达式的方式接收信息并展示。
前端
前端使用<frameset>标签将页面分为四个独立的部分:头部、左部、中部、右部。
(1)index.jsp —— 总页面
<html>
<head>
<title>JavaWeb Demo1</title>
</head>
<frameset rows="15%, 85%">
<frame src="pageHeader/home.jsp">
<frameset cols="35%, 35%%, 30%">
<frame src="pageLeft/home.jsp">
<frame src="pageMid/home.jsp">
<frame src="pageRight/home.jsp">
</frameset>
</frameset>
</html>
(2)pageHeader/home.jsp —— 头部
<html>
<head>
<title>Title</title>
</head>
<body>
<h1 align="center">JavaWebDemo1:增、删、改、查</h1>
</body>
</html>
(3)pageLeft/home.jsp —— 左部
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>添加信息</h4>
<form style="text-align: center" method="post" action="${ pageContext.request.contextPath }/AddServlet">
编号:<input type="text" name="number" style="border:2px solid aqua; width:110px" required /> <br />
姓名:<input type="text" name="name" style="border:2px solid aqua; width:110px" required/> <br />
性别: <input type="radio" name="gender" value="true" checked />男 <input type="radio" name="gender" value="false" />女
<%--
单选框方法:两个input设置成一样的name值
加入空格:
默认选中:加入checked属性。
--%>
<br />
<input type="submit" value="提交" style="background: darkgoldenrod;color: snow " />
</form>
</body>
</html>
(4)
<html>
<head>
<%--删除按钮和修改按钮的响应函数--%>
<script type="text/javascript">
function delete_btn(number){
var del = confirm("确定删除吗?");
if(del){
location.href="DeleteServlet?number="+number;
}
}
function update_btn(number){
location.href="OldRecordServlet?number="+number;
}
</script>
</head>
<body>
<h4>更改信息 —— 先查询,再删除、修改</h4>
<form style="text-align: center" method="post" action="${ pageContext.request.contextPath }/SelectOneServlet">
编号:<input type="text" name="number" style="border:2px solid aqua; width:110px" required />
<input type="submit" value="查询" style="background: dodgerblue;color: snow " />
</form>
<table border="1" align="center">
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:if test="${!empty person}">
<tr>
<td>${person.number}</td>
<td>${person.name}</td>
<c:choose>
<c:when test="${person.gender == true}">
<td>男</td>
</c:when>
<c:otherwise>
<td>女</td>
</c:otherwise>
</c:choose>
<td>
<input type="button" onclick="delete_btn('${person.number}')" value="删除" style="background: darkgoldenrod" />
<input type="button" onclick="update_btn('${person.number}')" value="修改" style="background: dodgerblue" />
</td>
</tr>
</c:if>
</tbody>
</table>
</body>
</html>
<html>
<head>
</head>
<body>
<h4>修改信息</h4>
<c:if test="${!empty person}">
<form method="post" style="text-align: center" method="post" action="${ pageContext.request.contextPath }/UpdateServlet">
编号:<input type="text" value="${person.number}" name="number" style="border:2px solid aqua; width:110px" readonly="readonly" /> <br />
姓名:<input type="text" value="${person.name}" name="name" style="border:2px solid aqua; width:110px" required/> <br />
<c:choose>
<c:when test="${person.gender == true}">
性别: <input type="radio" name="gender" value="true" checked />男 <input type="radio" name="gender" value="false" />女
</c:when>
<c:otherwise>
性别: <input type="radio" name="gender" value="true" />男 <input type="radio" name="gender" value="false" checked />女
</c:otherwise>
</c:choose>
<br />
<input type="submit" value="提交" style="background: darkgoldenrod;color: snow " />
</form>
</c:if>
</body>
</html>
(5)pageRight/home.jsp —— 右部
<html>
<head>
</head>
<body>
<h3>
<a href="${pageContext.request.contextPath}/SelectAllServlet">点击查看全部信息</a>
</h3>
<table border="1" align="center">
<c:if test="${personList.size() == 0}">
<h3 align="center">内容为空!</h3>
</c:if>
<c:if test="${!empty personList}">
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
</tr>
</thead>
<tbody>
<c:forEach var="person" items="${personList}">
<tr>
<td>${person.number}</td>
<td>${person.name}</td>
<c:choose>
<c:when test="${person.gender == true}">
<td>男</td>
</c:when>
<c:otherwise>
<td>女</td>
</c:otherwise>
</c:choose>
</tr>
</c:forEach>
</tbody>
</c:if>
</table>
</body>
</html>
后台
(1)实体类Person
public class Person {
private String number;
private String name;
private boolean gender;
//无参构造方法
public Person() {
}
//全参构造方法
public Person(String number, String name, boolean gender) {
this.number = number;
this.name = name;
this.gender = gender;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
}
(2)数据库连接类database,由jdbc实现
public class Database {
public static Connection conn(){
//定义地址,"jdbc:mysql://ip地址:端口号/数据库名"
String url = "jdbc:mysql://localhost:3306/javawebdemo1";
Connection connection = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接,用户名:root,密码:hello
connection = DriverManager.getConnection(url, "root", "hello");
}catch (SQLException e){
e.printStackTrace();
}catch (ClassNotFoundException e){
e.printStackTrace();
}
return connection;
}
}
(3)dao层,先定义接口,再完成实现类
接口:
public interface PersonDao {
//增加
public int addPerson(Person person);
//删除
public int delete(Person person);
//修改
public int update(Person person);
//查询一个
public Person selectone(Person person);
//查询全部
public List<Person> selectall(Person person);
}
实现类:
public class PersonDaoImp implements PersonDao {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
@Override
public int addPerson(Person person) {
int a = 0;
try {
con = Database.conn(); //连接数据库
String sql = "insert into person values(?, ?, ?)"; //设置sql语句的字符串
ps = con.prepareStatement(sql); //解析sql语句
ps.setString(1, person.getNumber()); //为第一个位置赋值
ps.setString(2, person.getName()); //为第二个位置赋值
ps.setBoolean(3, person.isGender()); //为第三个位置赋值
a = ps.executeUpdate(); //执行sql语句,返回的改变的行数。这里,插入记录成功后,返回1;否则返回0。
}catch (SQLException e){
e.printStackTrace();
}
return a;
}
@Override
public int delete(Person person) {
int a = 0;
try {
con = Database.conn();
String sql = "delete from person where number=?";
ps = con.prepareStatement(sql);
ps.setString(1, person.getNumber());
a = ps.executeUpdate();
}catch (SQLException e){
e.printStackTrace();
}
return a;
}
@Override
public int update(Person person) {
int a = 0;
try {
con = Database.conn();
String sql = "update person set number=?, name=?, gender=? where number=?";
ps = con.prepareStatement(sql);
ps.setString(1, person.getNumber());
ps.setString(2, person.getName());
ps.setBoolean(3, person.isGender());
ps.setString(4, person.getNumber());
a = ps.executeUpdate();
}catch (SQLException e){
e.printStackTrace();
}
return a;
}
@Override
public Person selectone(Person person) {
Person person1 = new Person();
try {
con = Database.conn();
String sql = "select * from person where number=?";
ps = con.prepareStatement(sql);
ps.setString(1, person.getNumber());
rs = ps.executeQuery();
if (rs.next()){
person1.setNumber(rs.getString("number"));
person1.setName(rs.getString("name"));
person1.setGender(rs.getBoolean("gender"));
}else {
return null;
}
}catch (SQLException e){
e.printStackTrace();
}
return person1;
}
@Override
public List<Person> selectall(Person person) {
List<Person> list = new ArrayList<>();
try {
con = Database.conn();
String sql="select * from person";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()){
Person person1 = new Person(rs.getString("number"),
rs.getString("name"),
rs.getBoolean("gender"));
list.add(person1); //存入list的,是每个对象的地址
}
}catch (SQLException e){
e.printStackTrace();
}
return list;
}
}
(4)service层,先定义接口,再完成实现类
接口:
public interface PersonService {
//增加
public int addPerson(Person person);
//删除
public int delete(Person person);
//修改
public int update(Person person);
//查询一个
public Person selectone(Person person);
//查询全部
public List<Person> selectall(Person person);
}
实现类:
public class PersonServiceImp implements PersonService {
PersonDao personDao = new PersonDaoImp();
@Override
public int addPerson(Person person) {
int a = personDao.addPerson(person);
return a;
}
@Override
public int delete(Person person) {
int a = personDao.delete(person);
return a;
}
@Override
public int update(Person person) {
int a = personDao.update(person);
return a;
}
@Override
public Person selectone(Person person) {
Person person1 = personDao.selectone(person);
return person1;
}
@Override
public List<Person> selectall(Person person) {
List<Person> list = personDao.selectall(person);
return list;
}
}
(5)servlet层,访问路径采用注解配置
AddServlet —— 添加信息:
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求响应的编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PersonService personService = new PersonServiceImp();
String number = request.getParameter("number"); //获取页面输入的编号
String name = request.getParameter("name"); //获取页面输入的姓名
String gender_str = request.getParameter("gender"); //获取页面输入的性别值
boolean gender = Boolean.valueOf(gender_str); //将性别值转化为布尔类型
//判断该编号所属的记录是否已存在,若不存在,加入记录
Person person0 = new Person();
person0.setNumber(number);
Person person = personService.selectone(person0);
PrintWriter printWriter = response.getWriter();
if (person == null){ //该编号所属的记录不存在,可加入
Person person1 = new Person(number,name,gender); //全参构造初始化
int a = personService.addPerson(person1); //加入数据库
if (a > 0){ //添加成功
printWriter.print("<script>alert('添加成功!');window.location='"+request.getContextPath()+"/pageLeft/home.jsp';</script>");
}else { //添加失败
printWriter.print("<script>alert('添加失败!');window.location='"+request.getContextPath()+"/pageLeft/home.jsp';</script>");
}
}else { //该编号所属的记录已存在,不可加入
printWriter.print("<script>alert('该编号已存在,无法加入!');window.location='"+request.getContextPath()+"/pageLeft/home.jsp';</script>");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
DeleteServlet —— 删除信息:
@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求响应的编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PersonService personService = new PersonServiceImp();
String number = request.getParameter("number"); //获取页面输入的编号
Person person0 = new Person();
person0.setNumber(number);
int a = personService.delete(person0);
PrintWriter printWriter = response.getWriter();
if (a > 0){ //删除成功
printWriter.print("<script>alert('删除成功!');window.location='"+request.getContextPath()+"/pageMid/home.jsp';</script>");
}else { //删除失败
printWriter.print("<script>alert('删除失败!');window.location='"+request.getContextPath()+"/pageMid/home.jsp';</script>");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
OldRecordServlet —— 得到原记录信息:
@WebServlet("/OldRecordServlet")
public class OldRecordServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求响应的编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PersonService personService = new PersonServiceImp();
String number = request.getParameter("number"); //获取页面输入的编号
Person person0 = new Person();
person0.setNumber(number);
Person person = personService.selectone(person0);
request.setAttribute("person", person);
request.getRequestDispatcher("/pageMid/mod.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
SelectAllServlet —— 得到全部记录信息:
@WebServlet("/SelectAllServlet")
public class SelectAllServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求响应的编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PersonService personService = new PersonServiceImp();
List<Person> personList = personService.selectall(null);
request.setAttribute("personList", personList);
request.getRequestDispatcher("/pageRight/home.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
SelectOneServlet —— 得到一个记录信息:
@WebServlet("/SelectOneServlet")
public class SelectOneServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求响应的编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PersonService personService = new PersonServiceImp();
String number = request.getParameter("number"); //获取页面输入的编号
Person person0 = new Person();
person0.setNumber(number);
Person person = personService.selectone(person0);
PrintWriter printWriter = response.getWriter();
if (person != null){
request.setAttribute("person", person);
request.getRequestDispatcher("/pageMid/home.jsp").forward(request, response);
}else {
printWriter.print("<script>alert('记录不存在!');window.location='"+request.getContextPath()+"/pageMid/home.jsp'</script>");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
UpdateServlet —— 修改信息:
@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求响应的编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PersonService personService = new PersonServiceImp();
String number = request.getParameter("number"); //获取页面输入的编号
String name = request.getParameter("name"); //获取页面输入的姓名
String gender_str = request.getParameter("gender"); //获取页面输入的性别值
boolean gender = Boolean.valueOf(gender_str); //将性别值转化为布尔类型
Person person1 = new Person(number, name, gender);
int a = personService.update(person1);
PrintWriter printWriter = response.getWriter();
if (a > 0){ //修改成功
printWriter.print("<script>alert('修改成功!');window.location='"+request.getContextPath()+"/pageMid/home.jsp';</script>");
}else { //修改失败
printWriter.print("<script>alert('修改失败!');window.location='"+request.getContextPath()+"/pageMid/home.jsp';</script>");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
1.本文提供了一个关于javaweb增、删、改、查完整的示例程序。
2.本文的基本特点有:a.基于MVC开发模式;b.开发过程力求高内聚、低耦合;c.面向对象的编程思想。前端使用了frameset标签进行分页操作;后台功能分dao、service、servlet三层结构完成;数据库建立了一张数据表,由字符串类型做主键,提高了对数据的兼容性。
3.规范的开发方式和习惯能够有效地释放开发过程中的思维量,提高效率。
文章浏览阅读506次。使用Sybase用户登录,然后登录Sybase 的Isql查询工具;$ isql –S192.168.0.3:5000 –Usa –P$ isql –Slinuxfiledb –Usa –P1> sp_helpsort2> go可以看到当前的默认字符集为 ISO8859-1,iso_1使用charset命令修改默认字符集$ charset –Slinuxfiled..._sybase设置字段默认值
文章浏览阅读1.3k次,点赞4次,收藏2次。pip默认使用的是国外的源,国内网速有限制,可以使用国内源,这里推荐豆瓣的源:https://pypi.douban.com/simple安装时使用-i指定sudo pip3 install tensorflow -ihttps://pypi.douban.com/simple速度飞快。_为什么下pip install tensorflow==2.4.0很慢
文章浏览阅读2.4k次,点赞2次,收藏10次。本文主要讲解如何使用Python判断数组是否存在重复元素_重复元素判定python代码
文章浏览阅读792次。(英語:)又称,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该将数据打乱混合,重新创建一个叫做(,,,或)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在和中,不抑制冲突来区别数据,会使得数据库记录更难找到。如今,雜湊演算法也被用來加密存在資料庫中的(password)字串,由於雜湊演算法所計算出來的具有(無法逆向演算回原本的數值)的性質,因此可有效的保護密碼。_散列函数
文章浏览阅读385次,点赞5次,收藏8次。探索分布式系统的新边界:Go-Distributed-Sys项目地址:https://gitcode.com/shijuvar/go-distributed-sys项目简介在当今的云原生时代,分布式系统设计已经成为软件开发的核心。Go-Distributed-Sys 是一个基于 Go 语言的开源项目,旨在提供一系列可复用、模块化的分布式系统组件,帮助开发者快速构建健壮且高效的分布式应用。...
文章浏览阅读603次。hello 大家好 我是浮若梦幻 今天给大家带来的是一个 前几天刚刚好看到不错的网页 然后自己随手 写了一写 这个扇形导航条的制作 希望大家喜欢其中的原理 知识点会配合math 做 数学计算 1.勾股定理 2.三角函数 3.角度与弧度的转化点击展开是这样 一个不错..._vue扇形菜单
文章浏览阅读120次。同时,贴上咱的个人博客,欢迎各位来访~_js svg 画矩形
文章浏览阅读1.1w次,点赞2次,收藏9次。public class HelloWorld {public static void main(String[] args) {int sum = 0; // 保存不能被3整除的数之和 // 循环变量 i 初始值为 1 ,每执行一次对变量加 1,只要小于等于 100 就重复执行循环 for (int i = 1; i<=100 ; i++ ) ..._1到100之间既不能被二整除又不能被三整除的所有数之和用程序打出来
文章浏览阅读878次,点赞23次,收藏26次。mpf.plot(df.loc[‘2020-6’:‘2020-12’], type=‘candle’, style=s, title=‘平安银行2020年K线图及唐奇安通道线’, addplot=add_plot, mav=(5,10,20),volume=True)s = mpf.make_mpf_style(base_mpf_style=‘nightclouds’, rc={‘font.family’: ‘SimHei’}) # 解决mplfinance绘制输出中文乱码。
文章浏览阅读808次。WordPress是用于管理博客,网站,投资组合等的绝佳平台,但是在管理内容的方式方面受到限制- 一切都从博客的后端完成 。 这意味着,即使您需要快速编辑帖子或页面上的内容,也需要转到后端进行操作。 当然,还有其他只能从后端完成的事情,例如上传媒体,创建类别,切换主题,创建新帖子等。 但是,如果您有其他需要注意的事项,则不得不经常去WordPress管理区域进行小幅更改可能会是一个巨大的挫..._wp前端
文章浏览阅读631次,点赞27次,收藏10次。本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!
文章浏览阅读9.1k次,点赞3次,收藏79次。转载于http://www.elecfans.com/emb/danpianji/20190118854900.htmlBLDC无刷直流电机的整体解决方案共有四大类,分别是MCU+预驱+驱动/MCU+[预驱+驱动]/[MCU+预驱]+驱动/SOC+驱动/SOC+预驱+驱动。通过此次专题采访,我们了解到各种方案的优缺点和应用现状。灵动微电子MCU产品事业部市场总监黄致恺分析了这几种方案,MCU+预驱+驱动属于比较传统的方式,对于一般MCU公司也最具有优势,更多应用在高压系统或是大功率系统上,因为大功率_电机预驱电路