Struts2入门详解
如何搭建Struts2项目
导入相关架包
编写web.xml,配置strus2过滤器
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
编写Struts2配置文件struts.xml
<?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><package name="default" namespace="/user" extends="struts-default"><action name="regist" class="cn.itcast.action.RegistAction"><result name="input">/success.jsp</result></action></package></struts>
访问路径 /user/regist.action
name 包名称,在struts2的配置文件文件中 包名不能重复 ,name并不是真正包名,只是为了管理Action
namespace 和 action的name属性,决定 Action的访问路径 (以/开始 )
extends 继承哪个包,通常开发中继承 struts-default 包 (struts-default包在 struts-default.xml定义 )
继承struts-default包后,可以使用 包中定义拦截器和结果类型
action元素配置默认值
package 的namespace 默认值‘’‘’
action 的class 默认值 ActionSupport 类
result 的 name 默认值 success
默认Action 和 Action的默认处理类
1) 默认Action , 解决客户端访问Action不存在的问题 ,客户端访问Action, Action找不到,默认Action 就会执行
2) 默认处理类 ,客户端访问Action,已经找到匹配元素,但是元素没有class属性,执行默认处理类
* 在struts-default.xml 配置默认处理类 ActionSupport
Struts2的常量配置
1) struts2 默认常量 在 default.properties 中配置
2) 开发者自定义常量
struts.xml格式 : <constant name="struts.devMode" value="true" />struts.properties格式 : struts.devMode = trueweb.xml 格式 : <filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>struts.devMode</param-name><param-value>true</param-value></init-param></filter>
3) 常用常量
<constant name="struts.i18n.encoding" value="UTF-8"/> ----- 相当于request.setCharacterEncoding("UTF-8"); 解决post请求乱码
<constant name="struts.action.extension" value="action"/> --- 访问struts2框架Action访问路径 扩展名 (要求)
struts.action.extension=action, 默认以.action结尾扩展名 和 不写扩展名 都会分发给 Action
<constant name="struts.serve.static.browserCache" value="false"/> false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false
<constant name="struts.devMode" value="true" /> 提供详细报错页面,修改struts.xml后不需要重启服务器
Action
Action书写的的三种格式
第一种
Action可以是 POJO ((PlainOldJavaObjects)简单的Java对象) —- 不需要继承任何父类,实现任何接口
* struts2框架 读取struts.xml 获得 完整Action类名
* obj = Class.forName(“完整类名”).newInstance();
* Method m = Class.forName(“完整类名”).getMethod(“execute”); m.invoke(obj); 通过反射 执行 execute方法
第二种
编写Action 实现Action接口
Action接口中,定义默认五种 逻辑视图名称
public static final String SUCCESS = “success”; // 数据处理成功 (成功页面)
public static final String NONE = “none”; // 页面不跳转 return null; 效果一样
public static final String ERROR = “error”; // 数据处理发送错误 (错误页面)
public static final String INPUT = “input”; // 用户输入数据有误,通常用于表单数据校验 (输入页面)
public static final String LOGIN = “login”; // 主要权限认证 (登陆页面)
五种逻辑视图,解决Action处理数据后,跳转页面
第三种
编写Action 继承ActionSupport (推荐)
在Action中使用 表单校验、错误信息设置、读取国际化信息 三个功能
Action的配置method(通配符)
1) 在配置 元素时,没有指定method属性, 默认执行 Action类中 execute方法
2)使用通配符* ,简化struts.xml配置
<a href="${pageContext.request.contextPath }/user/customer_add.action">添加客户</a>
<a href="${pageContext.request.contextPath }/user/customer_del.action">删除客户</a>struts.xml
<action name="customer_*" class="cn.itcast.struts2.demo4.CustomerAction" method="{1}"></action> --- {1}就是第一个* 匹配内容
动态方法调用
访问Action中指定方法,不进行配置
1) 在工程中使用 动态方法调用 ,必须保证 struts.enable.DynamicMethodInvocation = true 常量值 为true
2) 在action的访问路径 中 使用 “!方法名”
页面
<a href="${pageContext.request.contextPath }/user/product!add.action">添加商品</a>
配置
<action name="product" class="cn.itcast.struts2.demo4.ProductAction"></action>
执行 ProductAction 中的 add方法
Action访问Servlet API
1、 在Action 中解耦合方式 间接访问 Servlet API ——— 使用 ActionContext 对象
在struts2 中 Action API 已经与 Servlet API 解耦合 (没有依赖关系 )
* Servlet API 常见操作 : 表单提交请求参数获取,向request、session、application三个范围存取数据
actionContext = ActionContext.getContext();
1) actionContext.getParameters(); 获得所有请求参数Map集合
2) actionContext.put(“company”, “传智播客”); / actionContext.get(“company”) 对request范围存取数据
3) actionContext.getSession(); 获得session数据Map,对Session范围存取数据
4) actionContext.getApplication(); 获得ServletContext数据Map,对应用访问存取数据
2、 使用接口注入的方式,操作Servlet API (耦合)
1.要求action类必须实现提定接口。
ServletContextAware : 注入ServletContext对象
ServletRequestAware :注入 request对象
ServletResponseAware : 注入response对象
2.重定接口中的方法。
private HttpServletRequest request;
3.声明一个web对象,使用接口中的方法的参数对声明的web对象赋值.
public void setServletRequest(HttpServletRequest request) {this.request = request;
}
3、 在Action中直接通过 ServletActionContext 获得Servlet API
ServletActionContext.getRequest() : 获得request对象 (session)
ServletActionContext.getResponse() : 获得response 对象
ServletActionContext.getServletContext() : 获得ServletContext对象
ServletActionContext.getPageContext().getSession(); //获取session等对象
Action处理请求参数
第一种 :Action 本身作为model对象,通过成员setter封装 (属性驱动 )
页面:用户名 <input type="text" name="username" />Action : public class RegistAction1 extends ActionSupport {private String username;public void setUsername(String username) {this.username = username;}}
第二种 :创建独立model对象,页面通过ognl表达式封装 (属性驱动)
页面: 用户名 <input type="text" name="user.username" />----- 基于OGNL表达式的写法Action:public class RegistAction2 extends ActionSupport {private User user;public void setUser(User user) {this.user = user;}public User getUser() {return user;}}
使用ModelDriven接口,对请求数据进行封装 (模型驱动 ) —– 主流
页面:用户名 <input type="text" name="username" /> <br/> Action :public class RegistAction3 extends ActionSupport implements ModelDriven<User> {private User user = new User(); // 必须手动实例化public User getModel() {return user;}}
封装数据到Collection和Map
1) 封装数据到Collection 对象
页面:
产品名称 <input type="text" name="products[0].name" /><br/>Action :public class ProductAction extends ActionSupport {private List<Product> products;public List<Product> getProducts() {return products;}public void setProducts(List<Product> products) {this.products = products;}}
2) 封装数据到Map 对象
页面:
产品名称 <input type="text" name="map['one'].name" /><br/> ======= one是map的键值Action :public class ProductAction2 extends ActionSupport {private Map<String, Product> map;public Map<String, Product> getMap() {return map;}public void setMap(Map<String, Product> map) {this.map = map;}}
请求参数校验
手工代码校验请求参数
步骤一: 封装数据
步骤二: 实现校验Action ,必须继承ActionSupport 类
步骤三: 覆盖validate方法,完成对Action的业务方法 数据校验通过代码逻辑判断参数是否有效,如果参数非法 , this.addFieldError (ActionSupport提供)workflow拦截器 跳转回 input页面
步骤四: 在jsp中 通过 s:fieldError 显示错误信息
validate方法会对Action中所有业务方法进行校验,如果只想校验某一个方法 : validate方法名()
Xml配置方式数据校验
位置:xml文件要与action类在同一个包下
名称:action类名-validation.xml(针对某个方法效验UserAction-regist-validation.xml)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators><!-- 对username属性进行校验 --><field name="username"><!-- 指定username不能为空 --><field-validator type="requiredstring"><!-- 错误信息 --><message>用户名不能为空--------</message></field-validator><!-- 长度校验,规定用户名必须在6-10位之间 --><field-validator type="stringlength"><param name="maxLength">10</param><param name="minLength">6</param><message>用户名必须在${minLength}-${maxLength}位之间</message></field-validator></field><!-- 对age进行校验,规定年龄必须在10-40之间 --><field name="age"><field-validator type="int"><param name="min">10</param><param name="max">40</param><message>年龄必须在${min}--${max}之间</message></field-validator></field><!-- 对birthday进行校验 --><field name="birthday"><field-validator type="date"><param name="min">1974-01-01</param><param name="max">2004-12-31</param><message>生日必须在${min}年到${max}年之间</message></field-validator></field><!-- 校验邮箱 --><field name="email"><field-validator type="email"><message>邮箱格式不正确</message></field-validator></field><!-- url校验 --><field name="url"><field-validator type="url"><message>url不能这空,类似于http://www.baidu.com</message></field-validator></field><!-- 使用正则 --><field name="telphone"><field-validator type="regex"><param name="regexExpression"><![CDATA[^135[0-9]{8}$]]></param><message>电话号码必须是135xxxxxxxx</message></field-validator></field><field name="repassword"><field-validator type="fieldexpression"><param name="expression"><![CDATA[(password==repassword)]]></param><message>两次密码输入不一致</message></field-validator></field></validators>
内建校验器
* required (必填校验器,要求被校验的属性值不能为null)
* requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
* stringlength (字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
* regex (正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
* int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
* double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
* fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
* email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)
* url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)
* date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
Result结果类型
Action处理请求后, 返回字符串(逻辑视图名), 需要在struts.xml 提供 元素定义结果页面
1、 局部结果页面 和 全局结果页面
<action name="result" class="cn.itcast.struts2.demo6.ResultAction"><!-- 局部结果 当前Action使用 --><result name="success">/demo6/result.jsp</result> </action><global-results><!-- 全局结果 当前包中 所有Action都可以用--><result name="success">/demo6/result.jsp</result></global-results>
2、 结果页面跳转类型
result标签
1.name 与action中的method的返回值匹配,进行跳转.
2.type 作用:是用于定义跳转方式
dispatcher:它代表的是请求转发,也是默认值。它一般用于从action跳转到页面。
chain:它也相当于请求转发。它一般情况下用于从一个action跳转到另一个action。
<!--hello是一个Action的name-->
<result name="success" type="chain">hello</result>
redirect:它代表的是重定向 它一般用于从action跳转到页面
redirectAction: 它代表的是重定向 它一般用于从action跳转另一个action。
<result name="success" type="redirectAction">hello</result>
stream:代表的是服务器端返回的是一个流,一般用于下载。
在jsp中显示错误信息
<s:fieldError/> <s:fielderror fieldName="">展示特定名称的错误信息.
Struts2国际化
资源文件编写
properties文件命名 : 基本名称语言(小写)国家(大写).properties
编写3个property文件
message.properties
name=tom
messages_zh_CN.properties //中国中文
name=汤姆
messages_en_US.properties //美国英文
name=tom
资源文件作用域
1.针对于action类
位置:与action类在同一个包下.
名称:ActionClassName.properties.
这个配置文件只对当前action有效。
2.针对于package下所有action
位置:在指定的包下
名称:package.properties
怎样使用
1.在action类中使用
前提:action类要继承ActionSupport类。
getText(String name)就可以获取配置文件中对应名称的值。
2.在validation.xml文件中使用
<message key="名称"/>
3.在jsp页面上使用
s:text name=”名称” 如果没有使用s:i18n name=”“来指定,会从全局配置文件中获取。
如果要从某一个配置文件中获取,通过name属性来指定, 包名.配置文件名称 .
<s:i18n name="cn.itcast.action.package"><s:text name="nameerror"/></s:i18n>
在struts2中国际化配置文件中使用动态文本
1.action中怎样使用
xxxx.property
msg=hello world {0}
action
this.getText("msg",new String[]{"tom"})
结果就是 hello world tom
2.jsp页面上怎样使用
xxxx.property
msg=hello world {0}
<s:i18n name="cn.itcast.action.I18nDemo1Action"><s:text name="msg"><s:param>张三</s:param></s:text>
</s:i18n>
结果就是 hello world 张三
Struts2拦截器
struts2中在struts-default.xml文件中声明了所有的拦截器。
而struts2框架默认使用的是defaultStack这个拦截器栈。
在这个拦截器栈中使用了18个拦截器。简单说,struts2框架
在默认情况下,加载了18个拦截器。
注意:只要显示声明使用了一个拦截器。那么默认的拦截器就不在加载。
常用struts2 拦截器
<interceptor-ref name="modelDriven"/> 模型驱动
<interceptor-ref name="fileUpload"/> 文件上传
<interceptor-ref name="params"> 参数解析封装
<interceptor-ref name="conversionError"/> 类型转换错误
<interceptor-ref name="validation"> 请求参数校验
<interceptor-ref name="workflow"> 拦截跳转 input 视图
自定义拦截器
struts.xml
<interceptors><interceptor name="my" class="cn.itcast.intercept.MyInterceptor"></interceptor><interceptor name="bookInterceptor" class="cn.itcast.intercept.BookInterceptor"><param name="includeMethods">add,update,delete</param></interceptor><interceptor-stack name="myStack"><interceptor-ref name="bookInterceptor"></interceptor-ref><interceptor-ref name="defaultStack" /></interceptor-stack>
</interceptors><action name="demo1" class="cn.itcast.action.Demo1Action"><result name="login">/login.jsp</result><!-- <interceptor-ref name="my" /> <interceptor-ref name="defaultStack"/> --><interceptor-ref name="myStack" />
</action>
action
public class BookInterceptor extends MethodFilterInterceptor {@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {// 1.得到session中的userUser user = (User) ServletActionContext.getRequest().getSession().getAttribute("user");if (user == null) {BookAction action = (BookAction) invocation.getAction(); // 得到当前拦截的action对象。action.addActionError("权限不足,请先登录");// 存储错误信息return Action.LOGIN;}return invocation.invoke();}
}
OGNL表达式和值栈
关于valueStack内部结构详解URL
http://blog.csdn.net/qq32933432/article/details/51568939
值栈在开发中应用
主流应用 : 值栈 解决 Action 向 JSP 传递 数据问题
Action 向JSP 传递数据处理结果 ,结果数据有两种形式
1) 消息 String类型数据
this.addFieldError("msg", "字段错误信息");
this.addActionError("Action全局错误信息");
this.addActionMessage("Action的消息信息");
- fieldError 针对某一个字段错误信息 (常用于表单校验)、actionError (普通错误信息,不针对某一个字段 登陆失败)、 actionMessage 通用消息
在jsp中使用 struts2提供标签 显示消息信息
<s:fielderror fieldName="msg"/>
<s:actionerror/>
<s:actionmessage/>
2) 数据 (复杂类型数据)
使用值栈
valueStack.push(products);
哪些数据默认会放入到值栈 ???
1)每次请求,访问Action对象 会被压入值栈 ——- DefaultActionInvocation 的 init方法 stack.push(action);
* Action如果想传递数据给 JSP,只要将数据保存到成员变量,并且提供get方法就可以了
2)ModelDriven 接口 有一个单独拦截器
在拦截器中 ,将model对象 压入了 值栈 stack.push(model);
* 如果Action 实现ModelDriven接口,值栈默认栈顶对象 就是model对象
OGNL表达式 常见使用
、 % 、$ 符号使用
1) # 的 使用
用法一 # 代表 ActionContext.getContext() 上下文
<s:property value="#request.name" /> ------------> ActionContext().getContext().getRequest().get("name");
#request
#session
#application
#attr
#parameters
用法二 : 不写# 默认在 值栈中root中进行查找
<s:property value="name" /> 在root中查找name属性
查询元素时,从root的栈顶元素 开始查找, 如果访问指定栈中元素
<s:property value="[1].name" /> 访问栈中第二个元素name属性
访问第二个元素对象
<s:property value="[1].top" />
用法三 :进行投影映射 (结合复杂对象遍历 )
1)集合的投影(只输出部分属性
遍历集合只要name属性
<s:iterator value="products.{name}" var="pname"> <s:property value="#pname"/>
</s:iterator>
2)遍历时,对数据设置条件
遍历集合只要price大于1500商品
<s:iterator value="products.{?#this.price>1500}" var="product"> <s:property value="#product.name"/> --- <s:property value="#product.price"/>
</s:iterator>
3)综合
只显示价格大于1500 商品名称
<s:iterator value="products.{?#this.price>1500}.{name}" var="pname"> <s:property value="#pname"/>
</s:iterator>
用法四: 使用#构造map集合
经常结合 struts2 标签用来生成 select、checkbox、radio
使用#构造map集合 遍历
<s:iterator value="#{'name':'aaa','age':'20', 'hobby':'sport' }" var="entry">key : <s:property value="#entry.key"/> , value: <s:property value="#entry.value"/> <br/>
</s:iterator>
2) %的使用
<s:property value="表达式">
对于s:property标签,它的value属性会被默认做为ognl.
用法一: 结合struts2 表单使用, 通过%通知struts, %{}中内容是一个OGNL表达式,进行解析
<s:textfield name="username" value="%{#request.username}"/>
用法二: 设置ognl表达式不解析 %{‘ognl表达式’}
<s:property value="%{'#request.username'}"/>
3)$
的使用
用法一 :用于在国际化资源文件中,引用OGNL表达式 在properties文件 msg=欢迎您${#request.username}
在页面
<s:i18n name="messages"><s:text name="msg"></s:text></s:i18n>* 自动将值栈的username 结合国际化配置信息显示
用法二 :在Struts 2配置文件中,引用OGNL表达式
<!-- 在Action 提供 getContentType方法 --><param name="contentType">${contentType}</param>
{contentType} 读取值栈中contentType数据,在Action提供 getContentType 因为Action对象会被压入值栈, contentType是Action属性,从值栈获得
结论: #使用ognl表达式获取数据,% 控制ognl表达式是否解析 ,$ 用于配置文件获取值栈的数据
使用OGNL访问 对象方法 和 静态方法
OGNL 在jsp 结合 struts2 标签库 使用 , <s:property value="ognl表达式" />
执行 ognl表达式
调用 实例方法 : 对象.方法() —- <s:property value="'hello,world'.length()"/>
调用 静态方法 : @[类全名(包括包路径)]@[方法名] — <s:property value="@java.lang.String@format('您好,%s','小明')"/>
使用 静态方法调用 必须 设置 struts.ognl.allowStaticMethodAccess=true
Struts2 防止表单重复提交
1、 在jsp 通过 <s:token />
生成令牌号
生成表单隐藏域
将令牌号保存到Session
2、 通过struts2 提供 tokenIntercetor 拦截器 完成请求中令牌号 和 session中令牌号 比较
<interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/> <action name="token" class="cn.itcast.struts2.TokenAction"><result>/index.jsp</result><!-- 重新定义拦截器 --><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="token"></interceptor-ref></action>
3、 当表单重复提交时,token拦截器自动跳转 result name=”invalid.token”
通过 显示错误信息
覆盖重复提交信息 struts.messages.invalid.token=您已经重复提交表单,请刷新后重试
Struts2 内置json插件
1.导入json插件包
在struts2的lib包下 struts2-json-plugin-2.3.15.1.jar。
2.在struts.xml文件中配置
1.<package extends="json-default">
2.设置视图<result type="json">
这样设置后,会将valueStack栈顶数据变成json。
对于我们的程序,也就是会将action对象转换成json。
设置只将指定的数据转json
<param name="root">p</param>
如果没有设置,可以理解成将整个action都转换成json的数据。也就是
在action中提供的getXxx方法,就是json中的一个属性。
如果设置了root,那么,只将指定数据转换成json.
怎样设置转换成json的对象中不包含特定的属性?
- @JSON(serialize=false) 在getXxx方法上设置
还可以通过json插件的interceptor完成.
设置只展示products的name属性<param name="includeProperties">products\[\d+\]\.name</param>
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 微信小程序消息通知-打卡考勤
微信小程序消息通知-打卡考勤效果:稍微改一下js就行,有不必要的错误,我就不改了,哈哈!index.js//index.js const app = getApp() // 填写微信小程序appid var appid = ; // 填写微信小程序secret var secret = ; Page({// 页面数据data: {access_token: ,openid: ,},// 表单请…...
2024/4/20 17:39:59 - Struts2更改配置文件struts.xml默认路径
struts2配置文件默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下。但是为了协作开发与方便管理,我们有时需要把struts.xml放到其他位置struts2加载配置文件都是先从自己的jar包和/WEB-INF/classes两个默认的位置加载的。若修改struts2配置文件的存放位置,…...
2024/4/20 17:39:58 - (一)如何新建一个微信小程序
最近微信小程序蛮火的,我自己也开始了微信小程序的学习之路,在这里记下学习中遇到的问题,总结项目过程中的知识点,希望在帮助自己总结知识的同时也能帮助到有需要的小伙伴。 下面来讲一下新手如何创建一个微信小程序。 第一步:进入https://mp.weixin.qq.com/官网,选择,【…...
2024/4/20 17:39:58 - 【Struts2进阶】Struts2拦截器实现基于Url的权限管理
Struts2的拦截器只能拦截Action,拦截器是AOP的一种实现方式,可以使我们的系统架构更松散(耦合度低),可以插拔,容易互换,代码不改变的情况下很容易满足客户需求。项目的权限管理模块就使用到了Struts2的拦截器,原理是这样的,我们来自定义一个拦截器,拦截所有的Action请…...
2024/5/2 13:05:35 - 微信小程序的安装与配置:自已的第一个小程序
大家好,最近微信小程序在经过前两年发布之后频繁的更新,现在版本以及各种api已经趋于稳定,因此,具备各功能的api接口比较少出现整个api接口不能使用或者使用方法意义全部发生改变的情况; 因此博主将在近期开始分期发布关于小程序开发的一些心得,主要是微信小程序前端界面…...
2024/4/20 17:39:55 - 微信小程序商品详情页规格属性选择
detail.wxml展示页面<!--轮播图--> <swiper class="swiper" indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}" circular="{{circular}}"&…...
2024/4/20 17:39:55 - 《struts2》指定多个配置文件和默认Action
《struts2》:指定多个配置文件和默认Action由于我们不可能将一个所有的内容写在一个struts.xml文件中,特别是在比较大的应用中更是如此,为便于管理,就可以根据功能的不同写在不同的.xml文件中,然后将这些.xml文件包含在struts.xml文件中。还是以一个例子来进行说明要比较好…...
2024/4/20 17:39:53 - Struts2核心技术 (一)
struts2struts2发展历史 经过很多年发展,Struts1已经成为了高度成熟的框架,但随着时间的发展,Struts1的局限性和缺点不断的暴露出来。 现在Struts已经分化成了两个框架 -第一个是在Struts1的基础上,融合了另一个web框架Webwork的Struts2.Struts2实质上是以Webwo…...
2024/4/21 10:28:32 - Spatial Transform个人理解和总结
在常见的机器视觉研究中,大家更关注分类、检测、分割等任务,对图像的配准、形变关注度不够,其实deformation这块有很多有意思的东西,尤其在人脸、医学图像等领域可以做出好多有意思的东西。在这里先放结论:好用,真的好用!这里围观一下deepmind的这篇研究。However, due …...
2024/4/25 18:08:49 - 微信小程序github源码大全下载
微信小程序实例源码大全下载微信小应用示例代码(phodal/weapp-quick) 源码链接:https://github.com/phodal/weapp-quick 微信小应用地图定位demo(giscafer/wechat-weapp-mapdemo) 源码链接:https://github.com/giscafer/wechat-weapp-mapdemo 微信小应用- 掘金主页信息流(hil…...
2024/4/21 10:28:30 - Struts2以base64的方式上传图片
前言(为什么要用base64)其实我最初用做测试的图片上传接口接收的参数就直接是<input type="file">但是要用做手机端的后台,而手机发送的图片是以base64的方式上传的,而且这货不懂这么以file的方式上传,另外考虑到安全性就只好把file方式上传的改成了base6…...
2024/5/5 14:27:35 - 微信小程序商城开发之实现用户收货地址管理页面的代码
1、布局收货地址列表和新增收货地址页面 2、实现省市县三级联动功能 3、使用缓存管理数据 一、收货地址列表管理 addressList.wxml <scroll-view class="scroll" scroll-y="true"><view wx:for="{{addressList}}"><view class=&q…...
2024/4/21 10:28:27 - 微信小程序-贪吃蛇关键代码
首先说明一下,微信小程序是不能发布游戏的。关键代码一:手指按下,滑动,弹起,确定蛇头转的方向,代码如下 //获取手指按下坐标 touchStart:function(e){startX = e.touches[0].x;startY = e.touches[0].y; }, //获取手指移动坐标 touchMove:function(e){moveX = e.touches[0…...
2024/4/21 10:28:26 - 利用Struts2发起ajax请求,实现数据交互
韩美针对朝鲜进行“先发制人”、“斩首行动”的联合军演;那边朝鲜刚刚搞完导弹试验,特朗普又新任不久。在局势不明朗的情况下,突然出现了金正男遇刺这样的死亡方式——如果真是如新闻所报那样的话,这种暗杀的方式真是非常“老套”。金正男遇刺身亡是国际舞台的博弈还是朝鲜…...
2024/4/21 10:28:25 - 100个微信小程序的源码公开分享
现在微信小程序越来越火,小编一直有意识地收集微信小程序源码,至今已经拥有100个小程序的源码,有gank、LOL战绩查询、百度小说、豆瓣电影、手势解锁等。现在,小编准备将这些资料免费分享给大家!gankLOL战绩查询百度小说车源宝滴滴公交-查公交豆瓣电影商城手势解锁天气预报…...
2024/5/5 6:08:22 - 使用Struts2创建一个登录实例
Struts2事实上并不是Struts 1的升级版,而是WebWork的升级版。因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts 1和WebWork两者的优势,是一个好的框架,使用起来,非常的简洁,干净,强大。下面我们就用Struts2…...
2024/4/21 10:28:23 - 微信小程序ecshop商城开发(一)
微信小程序太火了,逼得我不得不也来凑热闹,闲来无事准备开发一个基于ecshop的微信小程序商场。今天刚开始画了一个简单的框架。目前通过ec的api接口在微信小程序下能够获取到商品列表/商品详细情况/商城分类,后续我会将完成的功能写出来,各位大神勿喷。 主要就用到是下面…...
2024/4/21 10:28:31 - Struts2的struts.xml中配置及通配符的使用
用Struts2很长时间,关于配置文件struts.xml中通配符的使用还是第一次真正用在项目中(可能之前都是一些小项目吧)。对于它的使用还真是现在才明白一些,以一个简单的例子做示范.在一个普通的小型项目中可能会,写很多个配置文件,然后include进struts.xml文件中,这是没有通配符…...
2024/4/21 10:28:21 - 微信小程序开发需要什么技术
微信成为一种生活方式的目标已经实现,可以说微信已是移动互联网中的独立生态王国,现在微信要借小程序收割线下的流量!无论是线上流量还是线下场景,微信小程序对于线下零售店都有充分的吸引力。那么微信小程序开发制件需要掌握哪些语言?第一、微信小程序wxml有过编程基础的工…...
2024/5/5 10:28:57 - 使用Struts2和jQuery EasyUI实现简单CRUD系统(二)——ajax与struts2的交互
写博客的时候,我在想,是不是以后也有人来问我我向别人提过的问题。认识了一些人之后,在技术还有其他的一些问题上的疑问,在有经验的人身上得到一些启示。然后将自己的东西写出来之后,又有人来问我,这是一件很奇妙的事情。我曾经受过别人帮助,当别人有求的时候,我也希望…...
2024/5/3 18:30:39
最新文章
- 电度表抄表是什么?什么叫电度表抄表?
一、电度表抄表的概念和作用 电度表抄表是电力系统中一个基本但非常重要的阶段。它指的是对安装在用户处电度表开展载入,记录下来电力消耗的值,便于测算电费的一个过程。此项工作不仅有利于供电公司精确扣除电费,都是监控和管理电力工程应用…...
2024/5/7 15:59:29 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 论文阅读AI工具链
文献检索 可以利用智谱清言来生成合适的文献检索式,并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时,您可以使用类似的逻辑来构建您的搜索式,但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索,但是…...
2024/5/5 8:47:40 - 流域生态系统水-碳-氮耦合过程模拟
流域是一个相对独立的自然地理单元,它是以水系为纽带,将系统内各自然地理要素连结成一个不可分割的整体。碳和氮是陆地生态系统中最重要的两种化学元素,而在流域系统内,水-碳-氮是相互联动、不可分割的耦合体。随着流域内人类活动…...
2024/5/5 8:45:42 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/7 5:50:09 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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