Java Web将多个servlet封装在一个class类中

建个基础servlet类继承HttpServlet,其中除了可以反射方法外也可以写些常用的方法 :public class BaseServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //重写service方法 完成方法分发 /*获取请求路径 * 获取方法名称 * 获取方法对象 * 执行反射*/ String requestURI = req.getRequestURI(); //获取uri String methodName = requestURI.substring(requestURI.indexOf("/") + 1); //substring获取方法名 try { Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); method.invoke(this,req,resp); //此处的this指入口的class,非此class } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } /** * 直接将传入对象序列化为json * 并传给浏览器 * @param obj * @param response * @throws IOException */ public void writeValue(Object obj,HttpServletResponse response) throws IOException { ObjectMapper mapper = new ObjectMapper(); response.setContentType("application/json;charset=utf-8"); //设置编码 注意两个设置字段中间用分号隔开 mapper.writeValue(response.getOutputStream(),obj); } public String writeValueAsString(Object obj) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(obj); //将传入对象序列化为json并返回字符 }} 相关servlet均继承baseservlet@WebServlet("/user/*")public class UserServlet extends BaseServlet { /*原本新建的get post方法改成你需要的方法 protected修饰改成public 否则需要在baseServlet中暴力反射 不建议使用暴力反射 申明UserService业务对象 方便使用 声明业务或dao对象一般先建接口 然后再实现*/ UserService service = new UserServiceImpl(); //访问 域名/user/regist即可以访问下列方法 public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }}

表单校验JQuery与正则的使用

简单讲解下正则的使用:单个字符:[]如: a [a-zA-Z0-9_]特殊符号代表特殊含义的单个字符:\d:单个数字字符 [0-9]\w:单个单词字符[a-zA-Z0-9_]量词符号:?:表示出现0次或1次*:表示出现0次或多次+:出现1次或多次{m,n}:表示 m<= 数量 <= n* m如果缺省: {,n}:最多n次* n如果缺省:{m,} 最少m次开始结束符号^:开始$:结束创建var reg = new RegExp("正则表达式");var reg = /正则表达式/;方法. test(参数):验证指定的字符串是否符合正则定义的规范,简单示例:var a="12345";var reg=/^\w{6,12}$/;   //正则 表示字符数6-12var b=reg.test(a); //此处a值不符合返回falsealert(b);下面以注册表单校验为例:<!--导入jquery--><script src="js/jquery-3.3.1.js"></script><script>    /*思路:    * 为每个单元格建立校验    * 在输入框离开焦点跟提交时候启用校验*/    function checkUsername() { //校验用户名        /*获取用户名值        * 定义正则        * 判断是否为true*/        var username = $("#username").val();        var reg_username = /^\w{3,10}$/; //用户名为3-10位字符串        var flag = reg_username.test(username);        if (flag) {            console.log("用户名合法") //浏览器控制台显示日志内容 实际不用写            $("#username").css("border", "");        } else {            console.log("用户名不合法")            $("#username").css("border", "1px solid red");        }        return flag;    }    function checkPassword() {        var password = $("#password").val();        var reg_password = /^\w{6,16}$/; //密码为6-10位字符串        var flag = reg_password.test(password);        if (flag) {            console.log("密码合法")            $("#password").css("border", "");        } else {            console.log("密码不合法")            $("#password").css("border", "1px solid red");        }        return flag;    }    function checkEmail() {        var email = $("#email").val();        var reg_email = /^\w+\@\w+\.\w+$/; //符合特定格式的字符串 带@跟.        var flag = reg_email.test(email);        if (flag) {            console.log("邮箱合法")            $("#email").css("border", "");        } else {            console.log("邮箱不合法")            $("#email").css("border", "1px solid red");        }        return flag;    }    function checkName() {        var name = $("#name").val();        var reg_name = /^\w{3,10}$/;        var flag = reg_name.test(name);        if (flag) {            console.log("姓名合法")            $("#name").css("border", "");        } else {            console.log("姓名不合法")            $("#name").css("border", "1px solid red");        }        return flag;    }    function checkTelephone() {        var telephone = $("#telephone").val();        var reg_telephone = /^\1\d{10}$/; //首位为1后面十位为数字        var flag = reg_telephone.test(telephone);        if (flag) {            console.log("手机合法")            $("#telephone").css("border", "");        } else {            console.log("手机不合法")            $("#telephone").css("border", "1px solid red");        }        return flag;    }    function checkCheck() {        var check = $("#check").val();        var reg_check = /^\w{4}$/; //已知验证码为四位字符        var flag = reg_check.test(check);        if (flag) {            console.log("验证码合法")            $("#check").css("border", "");        } else {            console.log("验证码不合法")            $("#check").css("border", "1px solid red");        }        return flag;    }    $(function () {        /*当表单提交时调用校验方法*/        $("#registerForm").submit(function () {            if (checkName() && checkPassword() && checkName() && checkEmail() && checkTelephone() && checkCheck()) {                $.post("user/regist", $(this).serialize(), function (data) { //serialize()序列化表单内容                    if (data.flag) { //从服务器获取注册结果                        console.log("注册成功")                        location.href = "regist_ok.html"; //注册成功跳转页面                    } else {                        console.log("注册失败")                        $("#errorMsg").html(data.errorMsg); //注册失败显示错误信息                    }                })            }        });        $("#username").blur(checkUsername); //鼠标离开输入框执行事件        $("#password").blur(checkPassword); //注意方法名后不要加(),否则失焦事件将无异议        $("#email").blur(checkEmail);        $("#name").blur(checkName);        $("#telephone").blur(checkTelephone);        $("#check").blur(checkCheck);    })</script>

MySQL创建表时,设置自动插入当前时间字段的两种格式

1.timestamp类型create table manager(id int not null primary key,mdate timestamp not null default current_timestamp);2.datetime类型create table manager(id int not null primary key,mdate datetime);

JQuery中的mouseleave跟mouseout事件区别

使用IDEA写JQ事件时候发现有两种事件都是鼠标离开时触发的,它们分别是mouseleave跟mouseout为此我也上网百度了下得到两点区别:不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。也就是说假如一个div1内部又有个div2,你在div1中绑定了mouseout,当你鼠标离开div2时候也会触发事件,而leave不会,因此大家在使用时候建议根据具体情况使用

JQuery中的mouseleave跟mouseout事件区别

腾讯云被用户索赔 原来云服务器也一定万无一失!

原标题:腾讯云被用户索赔 网友:赔13万太少了吧?腾讯云为什么被用户索赔自媒体前沿数控技术通过网媒指,因腾讯云硬盘故障导致其数据完全丢失,自上月20日夜晚8时起,平台已全部停运,活跃用户在网站停运的情况下逐渐流失,平台信任度将降至冰点,后续再恢复活跃度面临几何级的极大挑战,广告商亦要求退款赔偿,公司融资计划也被中止,称公司进入生存危机。腾讯云早前曾提出13.6万元人民币“赔偿+补偿”方案,但遭前沿数控拒绝,前沿数控向腾讯云索赔1101.6万元人民币。腾讯云回应称,该硬盘静默错误是在极小概率下被触发。腾讯云随即对固件版本有bug的硬盘全部进行下线处理,确保相关隐患全部排除。腾讯云称希望可以尽快帮助用户恢复业务,将损失降低最低,因此提出了“赔偿+补偿”解决方案,但目前双方未达成共识。8月6日午间消息,针对用户“前沿数控”数据丢失一事,腾讯云官方给出回应,并对补偿措施进行说明。日前,“前沿数控技术新媒体”发文,称放在腾讯云服务器上的数据全部丢失,质疑腾讯云的安全性。前沿数控是一家从微信公众号起家的创业公司,2014年注册了微信公众号“前沿数控技术”,定位于数控、模具、机械行业,后转型为一站式平台,开发了网站、H5、小程序产品等。为应对流量迅速增加以及安全可靠的需求,前沿数控选择使用腾讯云服务器。而在2018年7月20日,平台数据全部丢失。前沿数控表示,这些数据价值近千万元。腾讯云今日回应称,前沿数控所遇情况是因受所在物理硬盘固件版本bug导致的静默错误(写入数据和读取出来的不一致)影响,文件系统元数据损坏。腾讯云表示,经过分析,该硬盘静默错误是在极小概率下被触发。我们随即对固件版本有bug的硬盘全部进行下线处理,确保相关隐患全部排除。随后,腾讯云向“前沿数控”接口人说明情况,表达歉意,并制定“赔偿+补偿”方案。腾讯云认为“前沿数控”在平台上产生的实际消耗共计3569元,将按照赔偿条款中的上限以现金形式全额返还这笔费用;同时,腾讯云承诺为“前沿数控”提供13.29万元现金或云资源的额外补偿。不过,前沿数控基于自身评估就此次故障提出的赔偿要求为1101.6万元,双方未达成一致。腾讯云最后提到,后续将针对云盘产品会额外实行定期强灾备措施,进一步保障用户数据的可靠性。以下为腾讯云回应全文:近日,腾讯云用户北京清博数控科技有限公司所属“前沿数控”平台一块操作系统云盘,因受所在物理硬盘固件版本bug导致的静默错误(写入数据和读取出来的不一致)影响,文件系统元数据损坏。腾讯云监控到异常后,第一时间向用户告知故障状态,并立即组织文件系统专家并联合厂商技术专家尝试修复数据。遗憾的是,虽经多方努力,最终仍有部分数据完整性校验失败。经过分析,该硬盘静默错误是在极小概率下被触发。我们随即对固件版本有bug的硬盘全部进行下线处理,确保相关隐患全部排除。随后,腾讯云向“前沿数控”接口人伍先生说明情况并表达歉意,同时安排专人积极与接口人沟通,也在第一时间制定如下“赔偿+补偿”方案,以期将用户损失降最低。赔偿部分:“前沿数控”在平台上(自2017年12月份开户至今)产生的实际消耗共计3569元,依据腾讯云相关服务协议、规则和行业惯例,腾讯云将按照赔偿条款中的上限以现金形式全额返还这笔费用;补偿部分:本着帮助用户迅速恢复业务的目的,腾讯云承诺为“前沿数控”提供132900元现金或云资源的额外补偿。无论如何,我们都希望可以尽快帮助用户恢复业务,将损失降低最低,因此提出了“赔偿+补偿”总金额达到136469元的解决方案,这其实也是其在腾讯云平台中用云金额的37倍。不过,“前沿数控”基于自身评估就此次故障对腾讯云提出了高达11016000元的索赔要求。毫无疑问,这远远高于我们能够提供的方案。这也是此次双方目前未能达成一致的主要原因之一。从平台角度,腾讯云极力提供持久、稳定、安全的服务。但基于云计算特性,为了杜绝概率极低的意外事故发生,我们在做好云平台数据备份保障外,也按照行业惯例在相关协议中提醒用户对自身重要数据,尤其是客户信息、程序代码、网页素材等进行数据本地备份。遗憾的是,在这次故障中,“前沿数控”也表示目前没有任何本地备份数据可以用来恢复业务。在双方的沟通中,“前沿数控”还提出希望以“获得腾讯投资”、“腾讯官方引流”等方式得到补偿。在当前情况下,我们的确很难满足这样的要求。作为腾讯的战略性业务,云计算凝结着我们开放技术能力的初心,也寄托着我们连接智能未来的愿景。腾讯云极度珍视自身品牌,重视用户的合理诉求,并寻求帮助用户尤其是中小规模的用户获得成长。我们将继续与用户“前沿数控”保持建设性沟通,为最终帮助其进行业务恢复进行有诚意的努力。当然,如果最终用户倾向于寻求以法律诉讼方式解决争议,我们也将积极配合用户在法律框架下得到公平公正的解决方案。同时,我们也将适时与媒体沟通进一步进展。最后,我们对此次故障给用户业务带来影响再次表示最诚恳的歉意。后续,我们针对云盘产品会额外实行定期强灾备措施,进一步保障用户数据的可靠性。让每一个用户放心上云,安心用云。腾讯云2018年8月6日

腾讯云被用户索赔 原来云服务器也一定万无一失!

华为回应退出美国:不实,在美根本没有业务

原标题:华为回应“撤出美国市场”的官方回复来了:消息不属实【观察者网 综合报道】继今年4月,外界传闻“华为即将退出美国市场”后,本月6日,又有消息称“华为决定裁撤全部据点,撤出美国市场”。华为随后否定,称此音讯并不事实。这一回应是继本年4月华为称“全部以官方音讯为准”后的最新官方表态。刚成为全球第二大智能手机厂商  就要撤出全数在美组织?韩媒ETNews 6日报导,一位熟悉华为方案的移动运营商官员周一泄漏,因为美国政府与议会连手封杀华为,逼迫本地企业中止与华为间的交易,华为方案撤出在美国的三个办事处。“我知道华为美国办事处撤离的准备工作是在三到四个月前完结的。咱们现在知道美国的移动事务简直被暂停,”该人士说。报导还称,华为在硅谷设有个千余人的研制中心,目前还未有音讯显现未来将如何处置。值得注意的是,日前,市场研究机构IDC统计,2018年第二季度,华为智能手机出货量超越苹果,成为仅次三星的全球第二大智能手机厂商;而且2017年,华为全球网通产品的出货量也首次超越竞争对手爱立信与诺基亚,登上龙头。在智能手机及全球网络通讯设备都有斩获的情况下,华为的决定相当罕见。华为否认撤出市场对于是否“撤出美国市场”,媒体纷纷向华为求证。36氪报道,华为称此消息“不属实”。财联社也表示,华为海外相关负责人回应称,华为在美国市场压根就没有业务,谈不上退出美国市场。目前华为仅在美国偏远区域有据点,且仅有少数科研人员。事实上,这并非华为近年来首次回应是否撤出美国市场。早在5年前,华为就曾“放弃”美国市场,但并未完全退出。2013年4月,时任华为执行副总裁徐直军在年度分析师峰会上表示:“我们对美国市场已经没有兴趣了。”而时任华为CTO的李三琦也说:“我们其实很希望进军美国市场,但得面对现实。在美之外的其他地区市场也足够大,而且增长迅猛,我们需要集中精力发展。”据芯智讯报道,当时华为虽然仍在美国拥有1400名员工,但研发人员总数已经从800降至500,销售团队也已经压缩。华为消费者和企业部门的高管表示,公司已经不再将美国视为一个战略性市场。今年4月,外媒报道,华为解雇了5名美国雇员,释放出了要转变在美政策的信号。《纽约时报》文章称,美国市场将不再出现在华为的未来规划中,华为将结束十年来在美国付出的毫无疑义的努力,收回在美国市场的布局。在随后的举行的2018华为分析师大会上,华为轮值首席执行官徐直军表示:“中美关系不是我在这里说得清楚的,或者可以推动解决的。”徐直军称,有些事情不以华为的意志为转移,既然没法左右,还不如不去理它,“作为华为来讲,我们聚焦在把自己的事情做好,不管遇到什么困难,聚焦把自己的事情做好,才能更好的生存和发展。”有研究机构将这番话解读为美国已不再是华为全球战略的一部分,预计今年年底就会彻底退出美国市场,引发外界密切关注。针对上述说法,华为方面回应界面新闻称,“关于美国市场的发展情况一切以官方消息为主”。华为美国市场一再被蚕食外界注意到,华为早在6年前就开始“离开”美国市场。2012年美国国会的一份报告声称华为的设备对美构成国家安全威胁,自那时以来华为实际上已被禁止在美销售电信设备。今年年初,华为计划重返美国智能手机市场,砸重金与美国运营商AT&T合作,但最终因为美国政府的阻挠而告吹。随后美国百思买停止与华为合作,停售华为手机。这意味着华为手机丧失了硕果仅存的一个美国线下销售渠道。随后,华为宣布将通过第三方零售商、电商网站以及自家渠道来销售手机,并使用降价“促销”。4月,美国联邦通讯委员会(FCC)以5比0投票通过,禁止使用联邦资金从被认定对美国国家安全构成威胁的公司手中购买网络设备。这项新规进一步限制华为公司的美国业务,使得小型、农村地区运营商更加难以购买华为的电信设备。华为目前在美国拥有数千家客户,包括区域性运营商、中小企业等等。这些客户虽然可以用爱立信、思科或是其他厂商的产品替代华为的设备,但仍需要技术支持。而一直要求恢复对中兴制裁的美国共和党参议员、“反华急先锋”卢比奥在6月要求调查华为和和美国数十所高校的研究合作项目,质疑华为与美国大学的基础科研合作项目是否会对美国国家安全构成威胁。真退出?业界:好选择对于华为的辟谣,科技媒体芯智讯援引业内人士的分析,指出在贸易战愈演愈烈的背景之下,华为在美国的开展越来越困难,暂时放弃美国市场并非不可能。官方否认,或许这只是华为不想公开承认而已。业内再次传出华为即将退出美国市场的消息,恐怕这也并不是空穴来风。36氪刊文称,华为在美国经常被贴上“安全威胁”的标签,业务拓展步履维艰。如果华为彻底退出美国市场,也并没有损失太多。华为眼下在美国很难争取很大的市场空间,此举更像战略性放弃了一个鸡肋市场。除了业务拓展不顺,美国市场对华为的营收贡献也不大。对华为而言,美国市场从来不是一块稳稳地吃到嘴里的蛋糕,还时不时遭遇调查和抵制。暂时撤出美国市场,等待日后更好的时机出现,未尝不是一个好的选择。

华为回应退出美国:不实,在美根本没有业务

被骗去韩国种萝卜 月薪上万不是"梦"?

据媒体报道,老张此前有过出国打工的经历,他在朋友圈看到赴韩国打工广告,该广告称赴韩打工包吃住月薪一万六。结果老张去了韩国,反因“打黑工”被遣返。今年年初,老张的出国“淘金梦”碎了,但新昌警方却以此为线索,破获了绍兴市首起组织他人偷越国(边)境案。据了解,如果有正规中介介绍公司出国打工一般不会遣返的,但是这次新闻的主人公老张可能就遇到了“黑中介”。老张此前有在新加坡打工经历,此前看到朋友圈有赴韩打工包吃住的广告,老张心动了,带着几个朋友一起去了某劳务公司。在交了1.8万元的保证金后,老张一行六人前往浦东机场,假装去韩国旅游。不过同行的几个人只有两人顺利过关进入韩国。随后就到韩国一家农场种萝卜,每天工资550元,但每个月只能工作10天。老张每天都在担惊受怕中度过,生怕被发现。直到去年十一月,老张边逛超市边给家人打电话被韩国法务人员发现,第二天就被强制遣返。警方随后对着劳务公司进行调查,发现该公司并无相关资质,并认为该案背后隐藏着一个组织他人偷越国(边)界的犯罪团伙。经过调查后,警方将相关人员逮捕。据了解,该黑中介的实际控制人赖某此前为湖南某县劳动保障局副局长,因贪污被判刑,之后又因开设赌场和非法拘禁判刑。出狱后又开起了黑中介,通过各地代理组织劳工非法出境务工。目前该案件正在审理当中。警方提示,出国打工需要通过正规途径,不要盲目跟风出国务工,更不要抱有蒙混过关的侥幸心理,一定要通过正规的劳动部门和有资质的中介机构办理出国劳务手续。看到这新闻小编不禁想这是不是韩元?小编计算了下550韩元大概人民币3块多,有点不太可能,是人民币的话,一天种萝卜都能能550元,如果天天有活的话月入上万真的有可能,只是现实是不会天天有。另外偷渡是违法的哦,出国工作请遵守相关规定哦!找工作需谨慎,天上不会掉馅饼,祝大家好运!

被骗去韩国种萝卜 月薪上万不是"梦"?

使用DateFormat写的星座查询Java小程序

关键词:DateFormat、getTime()import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Scanner;public class demo {    public static void main(String[] args) throws ParseException {            Scanner sc = new Scanner(System.in);            System.out.print("请输入查询日期(例“2-3”即2月3日):");            String input = "2000-" + sc.next();     //输入查询,之所以实2000因为其是闰年,2月有29号            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");            long birth = sdf.parse(input).getTime();    //解析为Date并获取时间戳            if (birth >= getTimer("2000-03-21") && birth <= getTimer("2000-04-19")) {                System.out.println("白羊座");            } else if (birth >= getTimer("2000-04-20") && birth <= getTimer("2000-05-20")) {                System.out.println("金牛座");            } else if (birth >= getTimer("2000-05-21") && birth <= getTimer("2000-06-20")) {                System.out.println("双子座");            } else if (birth >= getTimer("2000-06-21") && birth <= getTimer("2000-07-21")) {                System.out.println("巨蟹座");            } else if (birth >= getTimer("2000-07-22") && birth <= getTimer("2000-08-22")) {                System.out.println("狮子座");            } else if (birth >= getTimer("2000-08-23") && birth <= getTimer("2000-09-22")) {                System.out.println("处女座");            } else if (birth >= getTimer("2000-09-23") && birth <= getTimer("2000-10-22")) {                System.out.println("天秤座");            } else if (birth >= getTimer("2000-10-23") && birth <= getTimer("2000-11-21")) {                System.out.println("天蝎座");            } else if (birth >= getTimer("2000-11-22") && birth <= getTimer("2000-12-21")) {                System.out.println("射手座");            } else if (birth >= getTimer("2000-01-20") && birth <= getTimer("2000-02-18")) {                System.out.println("水瓶座");            } else if (birth >= getTimer("2000-02-19") && birth <= getTimer("2000-03-20")) {                System.out.println("双鱼座");            } else {                System.out.println("摩羯座");            }        }        public static long getTimer (String date) throws ParseException {            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");            return sdf.parse(date).getTime();        }}

System类中arraycopy方法的使用 为什么char[]数组能直接打印

Q:现有一个字符数组{'i','t','c','a','s','a'},请使用System类中的arraycopy()方法在控制台输出“itcast”。(提示:将[1]号数组元素复制到最后位置并覆盖原有元素。)char[] str={'i','t','c','a','s','a'};System.arraycopy(str,1,str,5,1);System.out.print(str);一直忽略的误区:1、以为arraycopy需要两个不同数组,但是其实一个数组也可以操作2、char[]数组不用遍历输出,可以直接打印出来拓展:char类型的数组就相当于一个字符串。因为输出流System.out是PrintStream对象,PrintStream有多个重载的println方法,其中一个就是public void println(char[] x),直接打印字符数组的话,不像int[]等其他数组,它会直接调用这个方法来打印,因而可以打印出数组内容,而不是地址。

Java中Calendar.DAY_OF_WEEK需要减一的原因

网上找的,刚刚接触Calendar类,有点复杂,记下来。Java中对日期的处理需要用到Calendar类,其中有几个方法在使用时需要新手注意。1. 在获取月份时,Calendar.MONTH + 1 的原因Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中返回“0”,所以我们需要+1。2. 在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。看下表的返回值星期日为一周的第一天SUNMONTUEWEDTHUFRISATDAY_OF_WEEK返回值1234567星期一为一周的第一天MONTUEWEDTHUFRISATSUNDAY_OF_WEEK返回值1234567所以Calendar.DAY_OF_WEEK需要根据本地化设置的不同而确定是否需要 “-1”Java中设置不同地区的输出可以使用 Locale.setDefault(Locale.地区名) 来实现。3. 获取日期时 Calendar.DAY_OF_MONTH 不需要特殊的操作,他直接返回一个月中的第几天