发表于: 2019-10-15 23:39:14

1 886


一、今天完成的事
1.修改页面和增加功能
/**
*个人信息界面
*/
@RequestMapping(value = "/a/u/toUser",method = RequestMethod.GET)
public String toUser(Model model,User user,HttpServletRequest request) throws Exception{
    Cookie[] cookies = request.getCookies();
    //判断cookies不为空,且至少有一个cookie。
    log.info(cookies);
        //遍历cookie查找token
        for (Cookie cookie:cookies) {
            //判读数据库是否储存了token
            if("token".equals(cookie.getName())) {
                log.info("token".equals(cookie.getName()));
                DESUtil desUtil = new DESUtil();
                String token = desUtil.decrypt(cookie.getValue());
                log.info(token);
                long id = StrConvertUtil.tool(token);
                log.info(id);
                user = userService.selectById(id);
                request.setAttribute("name",user.getName());
                request.setAttribute("head",user.getHead());
                request.setAttribute("email",user.getEmail());
                request.setAttribute("phone",user.getPhone());
            }
        }
    return "user";
}


@RequestMapping(value = "/a/u/user" ,method = RequestMethod.POST)
public String User(MultipartFile multipartFile,User user,HttpServletRequest request) throws Exception {
    // 上传图片
    log.info(multipartFile);
    String objectName = multipartFile.getOriginalFilename();
    boolean state = imageUtil.uploadImage(multipartFile,objectName);
    log.info("图片上传状态=====" + state);
    String url="https://keshiyang.oss-cn-beijing.aliyuncs.com/"+objectName;
    log.info(url);
    URL signedUrl = imageUtil.dealImage(multipartFile,objectName);
    log.info(signedUrl);
    String resizeUrl =signedUrl.toString();
    user.setHead(resizeUrl);
    Cookie[] cookies = request.getCookies();
    for (Cookie cookie:cookies) {
        //判读数据库是否储存了token
            log.info("token".equals(cookie.getName()));
            DESUtil desUtil = new DESUtil();
            String token = desUtil.decrypt(cookie.getValue());
            log.info(token);
            long id = StrConvertUtil.tool(token);
            log.info(id);
            user = userService.selectById(id);
        userService.updateById(id);
        }
    return "redirect:/a/u/toUser";
}
/**
* 图片上传
* @return
*/
@RequestMapping(value = "/a/u/upload",method = RequestMethod.GET)
public String toUpload() {
    return "upload";
}

二、遇到的问题
三、收获
任务七深度思考
1.什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?
Annotation就是代码中使用的注解,它是一种特殊的接口,注解的属性定义方式就和接口中定义方法的方式一样,而应用了注解的类可以认为是实现了这个特殊的接口作用:
a. 标记,用于告诉编译器一些信息
b. 编译时动态处理,如动态生成代码
c. 运行时动态处理,如得到注解信息
标记可以加在包、类,属性、方法,方法的参数以及局部变量上
自定义注解(Annotation
先自定义一个注解接口
@Target(ElementType.METHOD)
// 这是一个对方法的注解,还可以是包、类、变量等很多东西
@Retention(RetentionPolicy.RUNTIME)
// 保留时间,一般注解就是为了框架开发时代替配置文件使用,JVM运行时用反射取参数处理,所以一般都为RUNTIME类型
@Documented
// 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化
public @interface OneAnnotation {
// 定义注解的参数,类型可以为基本类型以及StringClassenum、数组等,default为默认值
String parameter1() default "";
int parameter2() default -1;
}
再建一个使用上面注解的类,并加入参数
public class OneClass {
@OneAnnotation(parameter1 = "下午好", parameter2 = 1213)
public void Method() {}
}
测试
public class TestAnnotation {
@Test
public static void main(String[] args) throws Exception {
// 提取到被注解的方法Method,这里用到了反射的知识
// getDeclaredMethod:返回Method方法对象;
Method method = OneClass.class.getDeclaredMethod("Method");
// Method方法中通过方法getAnnotation获得我们设置的注解
OneAnnotation Annotation = method.getAnnotation(OneAnnotation.class);
// 得到注解的俩参数
System.out.println(Annotation.parameter1());
System.out.println(Annotation.parameter2());
}
}
优缺点:
Annotation 的优点:
保存在 class 文件中,降低维护成本。
无需工具支持,无需解析。
编译期即可验证正确性,查错变得容易。
提升开发效率。
Annotation的缺点:
若要对配置项进行修改,不得不修改 Java 文件,重新编译打包应用。
配置项编码在 Java 文件中,可扩展性差。
xml的优点:
xml 作为可扩展标记语言最大的优势在于开发者能够为软件量身【定制】适用的标记,使代码更加通俗易懂。
利用 xml 配置能使软件更具扩展性。例如 Spring 将 class 间的依赖配置在 xml 中,最大限度地提升应用的可扩展性。
具有成熟的验证机制确保程序正确性。利用 Schema 或 DTD 可以对 xml 的正确性进行验证,避免了非法的配置导致应用程序出错。
修改配置而无需变动现有程序。
xml的缺点:
需要解析工具或类库的支持。
解析 xml 势必会影响应用程序性能,占用系统资源。
配置文件过多导致管理变得困难。
编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。
IDE 无法验证配置项的正确性。
查错变得困难,往往配置的一个手误导致莫名其妙的错误。
开发人员不得不同时维护代码和配置文件,开发效率变得低下。
配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。
2.如何调用第三方API实现图片上传?
注册第三方(官网),找API文档,修改参数就可以实现图片上传了,细节前几天日报都有。
3.怎么用Python写一个图片迁移脚本? 
4.第三方的服务可靠吗,如果出现错误该怎么处理?  
可靠吧(毕竟都在用),也很方便。但是基于稳妥的话还是要制定好应急(降级)方案。
我自己在调用第三方APIi的时候,主要错误就是容联和腾讯jar包的冲突问题,删掉容联jar里冲突的内容就可以了
5.怎么快速集成第三方服务组件,API和SDK的区别是什么?
 API:
概念:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
在Java中,API相当于是一个别人已经实现了某个功能的接口。比如别人写了一个两个数字相加求和的方法:
public static int add(int a, int b){ 
    return a + b;
    }
 然后他提供给你
返回类型方法名称功能介绍
int
add(int a,int b)
返回a,b两个数的和
这就相当于提供给你一个API接口。你虽然不知道这个方法是怎么实现的,但是知道该怎么调用这个方法。如果别人又写了一个两个数字相乘的方法,那又是一个新的API。
SDK:
概念:软件开发工具包(外语首字母缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
SDK就相当于很多API和其他文件的集合体,你可以用这个完成某一个事情。比如你要完成一堆数据的运算,需要用到各种计算方法(比如加减乘数,平方,开方),你去买了一个计算器产品,这个产品包含了一台计算器,一本使用说明(比如接口文档和案例演示)和一些其他文件,你用这个计算器完成了所有数据的运算。整个计算器产品可以看做是一个SDK,它里面有API集合(计算器),说明文档(说明书),以及一些其他文件。这个SDK的功能就是计算,可能要算什么不确定,但是你可以通过这个SDK中的某个方法完成,实现你的目的。
 
两者区别:API是一个具体的函数,一个确定的功能,已经明确了它的作用(比如做加法)。而SDK就像是很多方法的集合体,是一个工具。比如你要做加法,你就调用计算机SDK的加法API,要做减法就调用减法API,无论你想完成什么计算,SDK里总有能实现的方法。再举个例子,比如你要开车去一个地方,车就是SDK,可以让你完成到达目的地的目的。车上的方向盘,灯,发动机,油门,刹车像一个个API,你在使用SDK时,就是调用一个个API功能。如果贴心一点的车,可能还带有使用说明(SDK说明文档)。
补充:SDK还有一点是除了他提供的完善的接口,他还会给你提供开发环境。继续上面的计算器和车的比喻,要想计算器和车子可以使用,要给计算器电池,和车子加油,这些都是计算机和汽车运行需要的。例如java的JDK里,除了各种API,还包括了java运行需要的JRE。
6.上传图片应该由前端或客户端直接上传到第三方存储服务,还是应该先上传到服务器,再由服务器上传到第三方?
直接上传到第三方,有特殊要求的话就先上传服务器,再第三方。
7.怎么实现图片防盗链,缩略图,水印等功能?
直接查看api文档即可
防盗链
防盗链就是防止盗链,
盗链—百度百科:
     盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
防盗链效果:明明引用了一个正确的图片地址,但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟通使用”之类的“假图片”
设置防盗链
可以直接在阿里控制台基础设置里面直接设置
8.为什么要使用第三方图片存储服务,好处是什么?
第三方对象存储优势:海量,安全,低成本,高可靠,数据可靠性高。可以在互联网任意位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化成本。
好处:减轻了自己服务器的压力。  
9.怎么样将短信发送服务抽像成公共代码,可以在多个项目中复用?
将第三方API作为工具类,在配置文件中定义好入参和返回值、加载连接需要的属性设置,就可以实现多项目服用。
10.点对点短信和群发短信的通道区别是什么,怎么支持多种短信通道?
点对点短信的实现
四、明天的计划



返回列表 返回列表
评论

    分享到