发表于: 2018-03-31 16:23:43

1 624


  1. 今天完成的任务:任务二在云服务器上运行,使用jetty:run部署项目。

  2. 今天的收获:深度思考学习了不少知识

  3. 1.什么是restful?rest的请求方法有哪些,有什么区别?

  4. 本来想用自己的理解表述,可是觉得不太负责任,就选取网上一段对rest4个英文字母的解释吧:

  5. Transfer:通俗来讲就是:资源在网络中以某种表现形式进行状态转移。分解开来:
    Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等;
    Representational:某种表现形式,比如用JSON,XML,JPEG等;
    State Transfer:状态变化。通过HTTP动词实现。
    然后说一下我对restful的理解吧,操作对象首先要是资源,就算是没有rest风格的写法我认为他的操作对象也是资源,最大的区别在于rest将动词隐藏在了HTTP的方法中,而传统的方法则是将方法放在了URL中,虽然之前日报也一直在写,这次写的简练一点吧:
  6. 传统方法:URL:动词+链接;(url:addstudent?id=1)
  7. restful:动词+URL;(post url:students/1)
  8. rest的请求方法有哪些?这个问题真是问到我了,想回答有四种,分别是:get(获取)、post(增加)、put(更新)、delete(删除),可是我确实不是用这种方法实现restful接口的,而且tomcat8也不支持delete和put,还需要额外注释(反正我按照网上的方法加了额外注释依然没成功),那说一下我的看法,我认为只需要post和get就可以实现,post负责增加、更新,get负责删除、查找。
  9. 再说点关于restful的吧,做项目是要前端后端统一接口(接口就应该是现在我们所说的控制器或者还有更复杂的)一起进行,首先统一接口方面,可能我想的过于简单,不过还是需要前端告诉后端哪个url实现了什么方法发送了什么类型的数据然后这个控制器需要做什么,这样后端才能在控制器和service层中写出业务逻辑,而restful风格的url正好符合了简便的需求,而且JSON和Ajax方面也可以提供restful的支持(然而我不会用)。
  10. 2.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
  11. 为什么要用rest风格?使资源不暴露在url中,即客户看不到资源,安全可以保证,另一点就是上文所述的开发过程中的简便高效。
  12. 接口怎么定义,这问题没看懂,用动词+名词方式完成接口,例如上文所说/addstudent?id=1.
  13. 3.了解maven的module
  14. maven的module即maven项目中的子模块,那么子模块和父模块的联系在哪儿?就是子模块可以全部继承父模块中pom.xml的内容,这样只需要配置一个pom.xml文件即可。
  15. 为什么要使用多模块来做一个项目?可以分开测试各个功能,比如接口就写在接口模块中,dao层就写在dao模块中。
  16. 当然这还只是上网看了一下大概,没有实战大概真的就没法好好理解maven的modules的好处。
  17. 4.什么是http协议?Get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
  18. HTTP协议:Hyper Text Transfer Protocol(超文本传输协议),基于TCP/IP通信协议来传递数据,客户向服务器发送请求,服务器响应客户并将请求的资源发送给用户。
  19. HTTP的状态码:
  20. 状态码有点多,列举几个常见的吧:
  21. 200:执行成功(post和get请求)
  22. 3xx:重定向
  23. 403:服务器拒绝执行
  24. 404:服务器找不到资源
  25. 405:客户端请求方法无法识别或不支持(比如该使用post的地方使用了get就会这样)
  26. 500:服务器内部错误,无法完成请求
  27. get和post的区别:
  28. (1)任务二实战中,使用<a href  a>按钮 这种触发式的不用其他配置控制器可以全部用get从url上获取信息,而如果是想要添加信息的话就得用post方法提交表单,当然这只是从最少的代码量考虑的。
  29. (2)正如(1)中所说,get的信息是需要附加在url中的,而post提交数据是放在了表单中,不会在url中显示,所以如果使用get获得信息会由于URL长度的限制(是浏览器或者操作系统的限制而不是HTTP的限制)无法传递大量的信息,但是实际上post也会被限定数据大小(服务器限制)。同样是信息显示在url上的坏处就是get安全性太低,一切数据都是可见(在url中)。另外的区别是两者的数据返回后端后获取的方法不同,get需要用Request.QueryString获取变量,post需要用Request.Form获取变量。(具体其他获取变量的方法之前日报提到过)
  30. content-Type有几种、区别:之前不了解这个概念,搜了一下,好多种,这里说一下概念吧,应该是一个资源本身在服务端的储存形式,然后用来被客户端的浏览器加以识别。
  31. http适合什么场景:
  32. 不需要连续处理与之前相关的资源,即取决于它的无状态特性,如果需要连续处理的话那么显然用http会降低速度。
  33. 好吧 百度了一下答案,和我想的不太一样,下面区分了socket和http:
  34. socket:
    优点:1.传输数据为字节级,传输数据可自定义,数据量小。相应的移动端开发,手机费用低
       2.传输数据时间短,性能高
       3.适合C/S之间信息实时交互
       4.可以加密,数据安全性高
    缺点: 1.需要对传输的数据进行解析,转化为应用级的数据
          2.对开发人员的开发水平要求高
        3.相对于Http协议传输,增加了开发量
  35. http:
    优点:1.基于应用级的接口使用方便
       2.要求的开发水平不高,容错性强
    缺点: 1.传输速度慢,数据包大。
        2.如实现实时交互,服务器性能压力大
        3.数据传输安全性差
  36. 确实和自己想的不太一样...
  37. 5.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
  38. IP接受低层(网络接口层)发来的的数据包然后向TCP层发送,或者是从把从TCP接受的数据包传向底层,IP层不对数据包做任何判断,而通过IP层的数据包会具有发送该数据包和接受该数据包的两个IP地址,高层的TCP会对数据包进行判断如果有损坏会重新发送等等。而TCP/IP协议是internet最基础的协议,采用4层层级结构,每一层都会调用底层提供的协议来完成自己的工作。
  39. TCP三次握手指的是
  40. (1)建立连接时,客户端发送syn包(syn=j)到服务器,进入SYN_SENT状态;
  41. (2)服务器收到syn包,确认客户的syn(syn=j),再发出一个ack包(ack=j+1),然后还要发送一个syn包(syn=k),进入SYN_RECV状态;
  42. (3)客户端接受ack+syn包,再向服务器发送ack(ack=k+1),发送完毕后客户端和服务器建立TCP链接。
  43. 注意在该过程中,如果服务器接到了一个服务器的syn包就会建立一个未连接队列(syn=j),这个队列处于SYN_RECV状态,需要再接受客户端发来的ack(ack=k+1)包才会进入链接状态,否则会一直等待并且向客户再次发送syn-atk包直到超过规定的等待时间,然后这个等待队列就会被关闭,即连接失败。
  44. 为什么要用三次握手协议来确认,我直接粘贴知乎上一段答案吧,写的挺好的:
  45. 用自己的话说一下:两次握手,A确认了B的同步,但是B没有确认A的同步,四次握手多握了一次。
  46. 6.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
  47. 从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
  48. 可能相比较而言,小公司小企业更倾向于使用同一套语言比如java来完成所有的任务,而不是向大企业需要跨平台来实现自己的业务。
  49. 7.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
  50. 因为自己没用Struts,资料都来源于往上。
  51. springmvc基于servlet,用controller控制,客户端的action是根据@requestmapping和method来执行的方法模式,springmvc是直接基于spring使用的,不用太多的配置。
  52. struts基于filter,用不同的类来控制客户端的action,且所有action共享变量,每个action对应一个request上下文,且如果想要在struts中使用spring需要各种配置文件。
  53. spring是单例模式!
  54. 8.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
  55. 指定applicationContext配置文件的前后文路径,过滤器设置编码,可以让.jsp静态页面实现加载,分发servlet,实现springMVC配置文件并且指定servlet容器的优先级。
  56. 9.Annotation和XML两种配置的差别,为什么更喜欢使用Annotation来配置Spring MVC?
  57. annotation的注解也是基于spring容器,可以把注解段视为bean注入spring容器中,而xml文件则是通过了<bean id = value=>来实现bean的注入,两者本质上是一样的,不过按照我的理解来看,xml是实现了解耦合的作用,不用像annotation一样把各种代码紧紧相连。
  58. springmvc自带的注释都很好用,反而在xml中配置会很麻烦,而且我觉得在任务二的前提下annotation的量很少,还是可以耦合一下节省一些工作量。
  59. 10.使用Annotation的时候需要有哪些配置,他的加载过程是怎么样的?
  60. 如果使用jar包中的注解,则需要配置依赖的jar包,然后在注释环境下import该jar包,还需要在spring文件中配置
  61. <context:annotation-config/>

    <context:component-scan base-package="action">

    <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>

    </context:component-scan>
  62. 类似的context,声明该注解所在的包,调用spring的类进行注入(注解的本质就是使其被当作bean)。

  63. 加载过程应该是在构造方法执行之后执行注解(spring是基于java语言的框架所以优先级应该没有那么高).

  64. 11.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?

  65. fitler:过滤器 interceptor:拦截器

  66. 拦截器在sop中用于在访问某个方法之前拦截然后在访问之前或之后加入操作(或者直接终止这个访问),是实现AOP的一种策略。

  67. 过滤器先于servlet合jsp页面运行,附加在它们上面,然后过滤请求信息,并且对请求信息进行操作(如更改、终止)。

  68. 区别:

  69. 1.拦截器基于反射机制,过滤器基于函数回调

  70. 2.过滤器是基于jsp页面合servlet容器的

  71. 3.拦截器可以多次生效,而过滤器只能在容器初始化时被调用一次。

  72. 12.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?

  73. (1)string创建json

  74. (2)map方式创建json

  75. (3)用bean转换创建json

  76. JSON标签库实际上也是实现了解耦和,以后更改数据格式可以只修改jsp页面而不改控制代码。

  77. 13.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?

  78. (1)定义方法:post、get、delete、put

  79. (2)定义uri:是否需要登陆、是否需要更详细的资料等等

  80. (3)定义request参数合response的数据类型合格式

  81. 认为一个接口文档好的原则应该是从能否做修改、能否让大家都读懂要求然后进行实际写代码、而接口文档也应该提供通知功能、如果有人修改了文档内容则应该让所有人都知道新增了什么功能、删除了什么功能、修改了什么功能。

  82. 14.Http的Header里面包含哪些字段,每个字段都有哪些含义?

  83. (1)通用首部字段:request和response都会使用的首部

  84. (2)请求首部字段:从客户端向服务器发送request要求时使用的首部,补充请求附加内容、客户端信息、响应内容相关优先级。

  85. (3)响应首部字段:从服务器端向客户端发送response时使用的首部,补充了附加内容。

  86. (4)实体首部字段:补充了资源内容更新时间等与实体有关的信息

  87. 15.Content-type中的数据类型,在Spring MVC中都怎么接收数据?

  88. 今天遇到的问题:云服务器一开始部署项目失败,谷歌插件在应用商店中搜索不到。

  89. 服务器部署项目失败的原因是因为:

  90. jdbcUrl=jdbc:mysql://localhost:3306/emp?characterEncoding=UTF-8&useSSL=true

    useSSL=true时开启这个加密效果,为什么我在本地可以正常连接到数据库呢?是因为我本地的mysql中的ssl设置时关闭的,而云服务器上ssl设置时开启的,如果正好useSSL也是true的话就无法登陆,需要改为false即可,另外任务2中第四步要求的两个工具都没有在谷歌官方商店中找到。

  91. 明天的计划:完成任务二剩余的课后思考。


返回列表 返回列表
评论

    分享到