为了让很多初学SSH框架的人会搭这个SSH框架我写了一个“ 登录的案例 ”以供初学者学习

好了长话短说了,这里我准备先把框架的项目结构放出来然后把三个配置文件放出来 最后把每个项目源码放出来 以供大家参考

这里IDE 我用的 Eclipse 数据库用的是 MySql数据库 其实都不太影响 还有这些架包 我就不上传CSDN了 需要架包的直接加我微信 13289899524 我会发给你 很方便的!

这是项目框架 大家看一下 !

首先我们建立各个包 com.java.action com.java.dao等等 这些包建好后 然后在依次向里面添加代码

第一步

在User.java里面创建用户类

com.java.entity 包下的 User.java

package com.java.entity;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
/*** 本类为项目的实体类 * @时间 2018-10-10* @author Jiang**/
@Entity
@Table(name="t_user")//这里写数据库对应的表格 
public class User {private Integer id;//账号idprivate String userName;//登录账号private String password;//登录密码@Id@GenericGenerator(name = "generator", strategy = "native") //功能代替 User.hbm.xml 配置文件 @GeneratedValue(generator = "generator")  //功能代替 User.hbm.xml 配置文件 @Column(name = "id", length = 11)  //功能代替 User.hbm.xml 配置文件  这样注解的方式写  就不用新建 User.hbm.xmlpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name = "userName", length = 20)//注解的方式 功能代替  User.hbm.xml 配置文件public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}@Column(name = "password", length = 20)//注解的方式 功能代替  User.hbm.xml 配置文件public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User [id=" + id + ", userName=" + userName + ", password=" + password + "]";}}

后台处理这块其实还没法写呢 我们把这个写了之后要先写前台页面的 一个登陆页面一个登陆成功后的页面

这个是 index.jsp登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body><formaction="${pageContext.request.contextPath }/user/user_login.action"method="post">账号:<input type="text" name="user.userName" value="${user.userName }" /><br />密码:<input type="password" name="user.password"value="${user.password }"><br /> <input type="submit"value="login" /><font color="red">${error }</font></form>
</body>
</html>

这个是登陆成功后的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
欢迎:${currentUser.userName }
</body>
</html>

这俩个页面其实要先写 因为后台代码都是为这俩个页面服务的 这俩个页面写好后 我们把  三个配置文件统一 一下一配置好了

不然一会写代码的时候其实也出不了错 早晚要配  那就先配了吧 这个配置文件也是比较麻烦的 知识量特别大

先配置 hibernate.cfg.xml 文件

<?xml version='1.0' encoding='UTF-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  <hibernate-configuration>  <session-factory>  <!--数据库连接设置 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/db_test</property><property name="connection.username">root</property><property name="connection.password">root</property><!--方言--><property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>  <!-- 显示sql语句 -->  <property name="show_sql">true</property>  <!-- 自动更新 --><property name="hbm2ddl.auto">update</property></session-factory>  
</hibernate-configuration>

这个 hibernate.cfg.xml 很简单也很固定格式 方言的话对应自己的 数据库 什么数据库 写什么方言 改一下就行了 我用的是Mysql数据库 所以方言就是 上面的 然后就是jdbc 链接的时候 记得改一下 自己的 数据库的用户名和密码

好啦 然后 配置 applicationContext.xml这是 配置Spring的配置文件 这个属于Spring里面的

<?xml version="1.0" encoding="UTF-8"?>    
<beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:p="http://www.springframework.org/schema/p"  xmlns:aop="http://www.springframework.org/schema/aop"   xmlns:context="http://www.springframework.org/schema/context"  xmlns:jee="http://www.springframework.org/schema/jee"  xmlns:tx="http://www.springframework.org/schema/tx"  xsi:schemaLocation="    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">    <!-- 定义数据源 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://localhost:3306/db_test"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!-- session工厂 -->  <bean id="sessionFactory"  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  <property name="dataSource">  <ref bean="dataSource" />  </property>  <property name="configLocation" value="classpath:hibernate.cfg.xml"/>  <!-- 自动扫描注解方式配置的hibernate类文件 -->  <property name="packagesToScan">  <list>  <value>com.java.entity</value>  </list>  </property>  </bean>  <!-- 配置事务管理器 -->  <bean id="transactionManager"  class="org.springframework.orm.hibernate4.HibernateTransactionManager">  <property name="sessionFactory" ref="sessionFactory" />  </bean>  <!-- 配置事务通知属性 -->  <tx:advice id="txAdvice" transaction-manager="transactionManager">  <!-- 定义事务传播属性 -->  <tx:attributes>  <tx:method name="insert*" propagation="REQUIRED" />  <tx:method name="update*" propagation="REQUIRED" />  <tx:method name="edit*" propagation="REQUIRED" />  <tx:method name="save*" propagation="REQUIRED" />  <tx:method name="add*" propagation="REQUIRED" />  <tx:method name="new*" propagation="REQUIRED" />  <tx:method name="set*" propagation="REQUIRED" />  <tx:method name="remove*" propagation="REQUIRED" />  <tx:method name="delete*" propagation="REQUIRED" />  <tx:method name="change*" propagation="REQUIRED" />  <tx:method name="get*" propagation="REQUIRED" read-only="true" />  <tx:method name="find*" propagation="REQUIRED" read-only="true" />  <tx:method name="load*" propagation="REQUIRED" read-only="true" />  <tx:method name="*" propagation="REQUIRED" read-only="true" />  </tx:attributes>  </tx:advice>  <!-- 配置事务切面 -->  <aop:config>  <aop:pointcut id="serviceOperation"  expression="execution(* com.java.service..*.*(..))" />  <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />  </aop:config>  <!-- 自动加载构建bean -->  <context:component-scan base-package="com.java" />  </beans>  

这里面用到了 知识点就是 AOP面向切面编程  我注释写的也很清楚了 专业名词都在那里写的 有什么实在不懂的 百度一下专业名字就全懂了 这个先配置 ,这里提一点就是 配置数据源的时候 记得和自己的数据名字一样 账号密码也要改一样 不然就会出现 即不报错只是登录密码怎么输都不会登录上去的结果 其他的到没啥好说的 贴上去就好了

第三个配置文件 struts2的配置文件

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  "http://struts.apache.org/dtds/struts-2.3.dtd">  <struts>  <constant name="struts.action.extension" value="action" />  <package name="SSH" namespace="/user" extends="struts-default"><action name="user_*" method="{1}" class="com.java.action.UserAction"><result name="success">/success.jsp</result><result name="error">/index.jsp</result></action></package></struts>   

这里面内容很少 ,一个是成功的后跳转的页面 一个是 失败后跳转的页面 这也很简单 大家一看也就 明白了

三个花了好多多天研究好的配置文件贴完了 基本上项目的一半也完成了 现在的话 就把业务代码一个一个补齐

先写 UserAction.java 因为前台数据来了 第一个到达的类就是这个类了

package com.java.action;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.stereotype.Controller;import com.java.entity.User;
import com.java.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
/*** struts2 处理请求类 将页面提交的信息到次页面* 进行业务处理然后根据结果判断执行该跳转到的页面* * @Controller:* @Resource:*/
@Controller
public class UserAction extends ActionSupport implements ServletRequestAware{private static final long serialVersionUID = 1L;private HttpServletRequest request;@Resourceprivate UserService userService;private User user;private String error;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String getError() {return error;}public void setError(String error) {this.error = error;}/*** * @return* @throws Exception*/public String login() throws Exception{HttpSession session=request.getSession();User currentUser=userService.findUserByNameAndPassword(user);
//		System.out.println(currentUser);if(currentUser!=null){session.setAttribute("currentUser", currentUser);return SUCCESS;}else{error="用后名或者密码错误!";return ERROR;}}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request=request;}}

然后在这里aciton类里面调用我们的service

我习惯写service的时候 写成接口的形式 所以 先把 UserService.java 接口写好

package com.java.service;import java.util.List;import com.java.entity.User;public interface UserService {public void saveUser(User user);public void updateUser(User user);public User findUserById(int id);public void deleteUser(User user);public List<User> findAllList();public User findUserByNameAndPassword(User user);
}

然后写实现类 实现类在这个接口旁边建一个impl包 在包里面写 UserServiceImpl.java实现的代码

package com.java.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.java.dao.BaseDao;
import com.java.entity.User;
import com.java.service.UserService;@Service("userService")//给service取个id userService
public class UserServiceImpl implements UserService{@Resource//写个Resource Spring会自动注入进来private BaseDao<User> baseDao;//指定类型叫User 要和BaseDAPimpl中的 Resource里面要一致/*** 保存一个对象* * @param o* @return*/@Overridepublic void saveUser(User user) {baseDao.save(user);}/*** 更新一个对象* * @param o*/@Overridepublic void updateUser(User user) {baseDao.update(user);}/*** 获得一个对象* * @param c*            对象类型* @param id* @return Object*/@Overridepublic User findUserById(int id) {return baseDao.get(User.class, id);}/*** 删除一个对象* * @param o*/@Overridepublic void deleteUser(User user) {baseDao.delete(user);}@Overridepublic List<User> findAllList() {return baseDao.find("from User");}@Overridepublic User findUserByNameAndPassword(User user) {return baseDao.get("from User u where u.userName=? and u.password=?", new Object[]{user.getUserName(),user.getPassword()});}}

实现类其实还没写完 因为实现类里面 调用的方法都是 dao里面的 方法 所以我们补齐 dao里面的方法 按道理我们应该先写dao里面的代码的 其实这里的话 大家知道就行 大家写的时候注意就好了

写dao的时候也是先写一个dao的接口然后开始实现他

package com.java.dao;import java.io.Serializable;
import java.util.List;/*** 基础数据库操作类* * @author Jiang* */
public interface BaseDao<T> {/*** 保存一个对象* * @param o* @return*/public Serializable save(T o);/*** 删除一个对象* * @param o*/public void delete(T o);/*** 更新一个对象* * @param o*/public void update(T o);/*** 保存或更新对象* * @param o*/public void saveOrUpdate(T o);/*** 查询* * @param hql* @return*/public List<T> find(String hql);/*** 查询集合* * @param hql* @param param* @return*/public List<T> find(String hql, Object[] param);/*** 查询集合* * @param hql* @param param* @return*/public List<T> find(String hql, List<Object> param);/*** 查询集合(带分页)* * @param hql* @param param* @param page*            查询第几页* @param rows*            每页显示几条记录* @return*/public List<T> find(String hql, Object[] param, Integer page, Integer rows);/*** 查询集合(带分页)* * @param hql* @param param* @param page* @param rows* @return*/public List<T> find(String hql, List<Object> param, Integer page, Integer rows);/*** 获得一个对象* * @param c*            对象类型* @param id* @return Object*/public T get(Class<T> c, Serializable id);/*** 获得一个对象* * @param hql* @param param* @return Object*/public T get(String hql, Object[] param);/*** 获得一个对象* * @param hql* @param param* @return*/public T get(String hql, List<Object> param);/*** select count(*) from 类* * @param hql* @return*/public Long count(String hql);/*** select count(*) from 类* * @param hql* @param param* @return*/public Long count(String hql, Object[] param);/*** select count(*) from 类* * @param hql* @param param* @return*/public Long count(String hql, List<Object> param);/*** 执行HQL语句* * @param hql* @return 响应数目*/public Integer executeHql(String hql);/*** 执行HQL语句* * @param hql* @param param* @return 响应数目*/public Integer executeHql(String hql, Object[] param);/*** 执行HQL语句* * @param hql* @param param* @return*/public Integer executeHql(String hql, List<Object> param);}

然后同样在他旁边建立一个 impl包 里面写 BaseDaoImpl.java

package com.java.dao.impl;import java.io.Serializable;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;import com.java.dao.BaseDao;/*** 实现类 整个DAO层只需要写俩个就是 BaseDAO和 BaseDAOImpl * * Spring4出来之前不支持泛型注入 你有多少个模块DAO接口你就得写多少 接口100个实现就是100个这就很头疼* * Repository这是一个注解 自动加载构造bean spring会自动扫描 * * @author Jiang** @param <T>* * @Repository("baseDao"):* @SuppressWarnings("all"):* * */
@Repository("baseDao")
@SuppressWarnings("all")
public class BaseDaOImpl<T> implements BaseDao<T> {private SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}@Autowiredpublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}private Session getCurrentSession() {return sessionFactory.getCurrentSession();}public Serializable save(T o) {return this.getCurrentSession().save(o);}public void delete(T o) {this.getCurrentSession().delete(o);}public void update(T o) {this.getCurrentSession().update(o);}public void saveOrUpdate(T o) {this.getCurrentSession().saveOrUpdate(o);}public  List<T> find(String hql) {return this.getCurrentSession().createQuery(hql).list();}public List<T> find(String hql, Object[] param) {Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.length > 0) {for (int i = 0; i < param.length; i++) {q.setParameter(i, param[i]);}}return q.list();}public List<T> find(String hql, List<Object> param) {Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.size() > 0) {for (int i = 0; i < param.size(); i++) {q.setParameter(i, param.get(i));}}return q.list();}public List<T> find(String hql, Object[] param, Integer page, Integer rows) {if (page == null || page < 1) {page = 1;}if (rows == null || rows < 1) {rows = 10;}Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.length > 0) {for (int i = 0; i < param.length; i++) {q.setParameter(i, param[i]);}}return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();}public List<T> find(String hql, List<Object> param, Integer page, Integer rows) {if (page == null || page < 1) {page = 1;}if (rows == null || rows < 1) {rows = 10;}Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.size() > 0) {for (int i = 0; i < param.size(); i++) {q.setParameter(i, param.get(i));}}return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();}public T get(Class<T> c, Serializable id) {return (T) this.getCurrentSession().get(c, id);}public T get(String hql, Object[] param) {List<T> l = this.find(hql, param);if (l != null && l.size() > 0) {return l.get(0);} else {return null;}}public T get(String hql, List<Object> param) {List<T> l = this.find(hql, param);if (l != null && l.size() > 0) {return l.get(0);} else {return null;}}public Long count(String hql) {return (Long) this.getCurrentSession().createQuery(hql).uniqueResult();}public Long count(String hql, Object[] param) {Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.length > 0) {for (int i = 0; i < param.length; i++) {q.setParameter(i, param[i]);}}return (Long) q.uniqueResult();}public Long count(String hql, List<Object> param) {Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.size() > 0) {for (int i = 0; i < param.size(); i++) {q.setParameter(i, param.get(i));}}return (Long) q.uniqueResult();}public Integer executeHql(String hql) {return this.getCurrentSession().createQuery(hql).executeUpdate();}public Integer executeHql(String hql, Object[] param) {Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.length > 0) {for (int i = 0; i < param.length; i++) {q.setParameter(i, param[i]);}}return q.executeUpdate();}public Integer executeHql(String hql, List<Object> param) {Query q = this.getCurrentSession().createQuery(hql);if (param != null && param.size() > 0) {for (int i = 0; i < param.size(); i++) {q.setParameter(i, param.get(i));}}return q.executeUpdate();}}

最后不要忘记建我们的数据的 还有数据库名字

 

数据库名字就叫 db_test 这样你也不用去该源码里面的数据名字了 然后表名叫 t_user 就好了

我们测试一下

还有比较宝贵的就是这些架包啦

需要架包的话直接加我微信13289890524 我直接就QQ发给你了 不需要就算了

 

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

相关文章

  1. 如何批量下载一些网站上的压缩包或者图片

    因为项目需要,我们需要从网上下载很多图片来做为数据集测试项目,经过一些研究,实现了批量下载ImageNet上的图片的程序在这里分享一个批量下载ImageNet图片的经验,其实这个例子适用于很多你知道下载资源命名规则的场合。举一个简单的例子,假如你需要从一个网站批量下载几个…...

    2024/4/20 23:25:05
  2. git学习-使用ssh

    和远程的github链接我们需要使用一种安全,保密性好的传输方式SSH传输方式 创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash)…...

    2024/4/20 23:25:03
  3. 前端要知道的Nginx反向代理与负载均衡

    什么是反向代理与负载均衡什么是反向代理当我们有一个服务器集群,并且服务器集群中的每台服务器的内容一样的时候,同样我们要直接从个人电脑访问到服务器集群服务器的时候无法访问,必须通过第三方服务器才能访问集群这个时候,我们通过第三方服务器访问服务器集群的内容,但…...

    2024/4/20 12:23:26
  4. 在线视频压缩的工具

    压缩视频是很常见的,我们手机或者电脑里面的视频多了当然要选择压缩,可是我们也要选择好压缩视频的工具,有些工具只能保证给你进行压缩,不会理会你视频压缩的质量以及清晰度,那就很不舒服。我们压缩视频当然想要压缩成自己想要的样子,那就不能马马虎虎的选择压缩软件了,…...

    2024/4/20 23:25:01
  5. 程序员必备的五款文本编辑器

    程序员的工作离不开文本编辑器,有人说一个txt就能搞定,但txt面对如今复杂的要求,明显有些捉襟见肘,下面推荐五款超级好用的文本编辑器及搭配软件,绝对是程序员的大爱。程序员编码的过程离不开代码对比,关于代码对比软件,我只推荐你使用Beyond Compare代码对比软件!Beyo…...

    2024/4/20 23:25:00
  6. Nginx做负载均衡器以及proxy缓存配置

    关于nginx的安装和基本配置请参考nginx,本文在原基础上完成以下几个功能: 结合proxy和upstream模块实现nginx负载均衡结合nginx_upstream_check_module模块实现后端服务器的健康检查使用nginx-sticky-module扩展模块实现Cookie会话黏贴(session-sticky效果)使用proxy模块实…...

    2024/5/4 23:40:27
  7. 网页特殊字体包压缩与精简(fontmini)

    在进行网页设计时,设计师会经常用到很多造型各异的字体,来提升设计作品的逼格,但在前端代码实现网页设计稿时,由于系统默认或者用户安装的字体格式比较有限,很多特殊字体无法显示出设计效果,此时就需要引入特殊字体包,英文字体包只需要26个字母和一些标点符号,就基本能…...

    2024/5/4 22:55:09
  8. SSH协议全面解读(SSH最全的知识点都在这)

    》》来源:https://www.wosign.com/News/news_2018111302.htm SSH是什么?SSH是安全外壳协议,或SSH是一个加密协议,主要用于保护远程命令行界面的外壳访问。因此,这就是我为那些不知道SSH的人所编写的、对安全外壳的颂歌。许多技术世界之外的人可能没有意识到SSH和shelling在…...

    2024/4/28 18:29:32
  9. 直方图均衡化

    直方图均衡化是增强图像对比度的一种方法。当一幅图像灰度级分布不均的时候,可以通过直方图均衡化来重新分布灰度。 直方图均衡化可以在YUV的Y数据上,HSI的I分量,HSV的V分量上处理或者RGB上处理。 直方图均衡化分一下几个步骤: 1、统计每个灰度级出现的像素数量:unsigned …...

    2024/4/28 1:36:26
  10. 如何用php压缩html代码并输出

    原文地址:http://www.shuchengxian.com/article/22.html站长朋友们都知道,网页越小,打开的速度就是越快,对于SEO有帮助。所以,我们往往会问用php如何压缩html代码?怎么让代码变成一行,压缩输出。常常看到别人网页上的html代码都是压缩之后输出的,那么我们如何操作呢?因…...

    2024/4/28 1:48:12
  11. html 保存成word (富文本编辑器导出内容成word)

    这几天项目里有个需求,用到富文本编辑器,然后导出word。富文本编辑器,网上很多,使用夜很简单,我们使用的是kindEditor。百度的ueditor很好,而且文档很全。阿里的kissy 感觉比较复杂,咱们写博客的这个,好像是wangEditor。一般用起来都很简单。这里重点说一下导出。如何将…...

    2024/4/28 1:29:17
  12. 路由器实现负载均衡的三种模式解析

    “负载均衡”概念运用在网络上,简单来说是利用多个网络设备通道均衡分担流量。就像是寺庙一天要挑10桶水,1个尚必需要走10趟,但同时指派10个和尚却只要一趟即可完成工作的道理一样。负载均衡可运用多个网络设备同时工作,达成加速网络信息的处理能力,进而优化网络设备的性能…...

    2024/4/28 13:58:44
  13. 微信手机网页上传图片高效率压缩(Canvas+Base64)

    最近有一个小项目,有这么一个需求,要把照片上传到服务器,可是现在手机照片都是几M几M的,所以必须压缩下,我百度来百度去,也问了下网友,终于,在网友的帮助下,写出来了.. 下面先上个压缩效果图然后上前端代码吧... 然后上前端代码吧... 然后上前端代码吧...<body><img i…...

    2024/4/28 15:21:51
  14. SSH框架学习(八、现在对SSH框架的理解)

    不多说了,上图顺便发点牢骚: java和.net在开发web项目的时候,.net是商业软件,由一方提供全套解决方案,你面对的文档是一种,而且微软的文档中经常有例子。而java是开源的,是由多方提供不同构件组成的,你需要面对各种格式规范不一样的文档,在文档查找和阅读方面,真的是…...

    2024/4/27 22:45:22
  15. 多种富文本编辑器的对比

    1. wangEditor 基于javascript和css开发的html富文本编辑器 视频上传需要写格式代码(<iframe src=“” frameborder=0 ….>)2. CKEditor 没有字体变色和视频上传功能,需要另外配置3. summernote图片上传反应慢,视频大小无法编辑,操作体验效果不好4. FroalaEditor 图…...

    2024/4/29 1:07:32
  16. 负载均衡-session共享的三种处理方法

    首先,扫下盲,什么是负载均衡?百度百科给出的解释是:负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。直白点就是,首先,大量的并发访问或数据流量分担到多台节…...

    2024/4/28 0:18:41
  17. 终于要开始学习SSH框架了

    在18m用了jazz框架好多年,及其懒散,并有种古怪的抵触ssh。。其实就是不想学了。 到了新单位,接手的代码毫无疑问的是基于ssh的框架写的。。 有点头大,又有点小庆幸。本来就是奔着多多见识的理念出来的,学点新东西当然理所当然了。 lg说很多年前他用过ssh,挺简单的。。我表…...

    2024/4/28 17:42:28
  18. 在线压缩视频的方法,一键压缩视频文件

    压缩视频用什么方法呢?视频太大比较占用内存,一个视频还好,如果视频文件比较多的时候,就会导致电脑卡顿,我们想要在线将视频压缩需要怎么操作呢?下面就为大家简单的介绍一下在线压缩视频的方法。1:在浏览器搜索视频在线压缩,找到在线压缩视频的页面,点击在线视频压缩进…...

    2024/4/28 14:55:03
  19. 关于文本编辑器与IDE

    IDE是用来创作程序的(这里之所以不说“写程序”,是因为程序不光是写出来的,还要重构、编译、调试、管理等);文本编辑器是用来编辑文件的,当然也可以编辑程序源代码。 我见到网上有争论说Rubyon Rails不需要IDE,文本编辑器即可,又考虑到文本编辑器与IDE是个旷日持久的话…...

    2024/4/28 23:36:36
  20. Java SSH框架学习

    来自:http://java.chinaitlab.com/Hibernate/963760.htmlSSH就是 struts+spring+hibernate 的一个集成框架,是java中一种流行的JAVA WEB 应用程序开源框架。因为我最熟悉的还是ASP.NET的的MVC和Python的Django框架,今天有必要学习下java 的流行框架SSH,其实作为WEB应用的整…...

    2024/4/28 11:14:00

最新文章

  1. 想要买到心仪的旋转式孔板流量计吗?

    选择旋转式孔板流量计可不能云里雾里的乱选择呀&#xff0c;煤矿对产品质量要求很严格的。所以我们要先了解产品的再决定才是对的选择。 旋转式孔板流量计技术参数【1--5--9】 规格&#xff1a;DN15&#xff5e;DN1000 孔径比(βd/D)&#xff1a;β0&#xff0e;2—0&#xff…...

    2024/5/8 14:52:37
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. Go语言中如何实现继承

    完整课程请点击以下链接 Go 语言项目开发实战_Go_实战_项目开发_孔令飞_Commit 规范_最佳实践_企业应用代码-极客时间 Go语言中没有传统意义上的类和继承的概念&#xff0c;但可以通过嵌入类型&#xff08;embedded types&#xff09;来实现类似的功能。嵌入类型允许一个结构…...

    2024/5/5 8:37:47
  4. 【图论】知识点集合

    边的类型 neighbors(邻居)&#xff1a;两个顶点有一条共同边 loop&#xff1a;链接自身 link&#xff1a;两个顶点有一条边 parallel edges&#xff1a;两个顶点有两条及以上条边 无向图 必要条件&#xff1a;删掉顶点数一定大于等于剩下的顶点数 设无向图G<V,E>是…...

    2024/5/7 21:13:52
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57