发表于: 2018-03-31 16:23:43
1 622
今天完成的任务:任务二在云服务器上运行,使用jetty:run部署项目。
今天的收获:深度思考学习了不少知识
1.什么是restful?rest的请求方法有哪些,有什么区别?
本来想用自己的理解表述,可是觉得不太负责任,就选取网上一段对rest4个英文字母的解释吧:
- Transfer:通俗来讲就是:资源在网络中以某种表现形式进行状态转移。分解开来:然后说一下我对restful的理解吧,操作对象首先要是资源,就算是没有rest风格的写法我认为他的操作对象也是资源,最大的区别在于rest将动词隐藏在了HTTP的方法中,而传统的方法则是将方法放在了URL中,虽然之前日报也一直在写,这次写的简练一点吧:
Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等;
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现。 - 传统方法:URL:动词+链接;(url:addstudent?id=1)
- restful:动词+URL;(post url:students/1)
- rest的请求方法有哪些?这个问题真是问到我了,想回答有四种,分别是:get(获取)、post(增加)、put(更新)、delete(删除),可是我确实不是用这种方法实现restful接口的,而且tomcat8也不支持delete和put,还需要额外注释(反正我按照网上的方法加了额外注释依然没成功),那说一下我的看法,我认为只需要post和get就可以实现,post负责增加、更新,get负责删除、查找。
- 再说点关于restful的吧,做项目是要前端后端统一接口(接口就应该是现在我们所说的控制器或者还有更复杂的)一起进行,首先统一接口方面,可能我想的过于简单,不过还是需要前端告诉后端哪个url实现了什么方法发送了什么类型的数据然后这个控制器需要做什么,这样后端才能在控制器和service层中写出业务逻辑,而restful风格的url正好符合了简便的需求,而且JSON和Ajax方面也可以提供restful的支持(然而我不会用)。
- 2.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
- 为什么要用rest风格?使资源不暴露在url中,即客户看不到资源,安全可以保证,另一点就是上文所述的开发过程中的简便高效。
- 接口怎么定义,这问题没看懂,用动词+名词方式完成接口,例如上文所说/addstudent?id=1.
- 3.了解maven的module
- maven的module即maven项目中的子模块,那么子模块和父模块的联系在哪儿?就是子模块可以全部继承父模块中pom.xml的内容,这样只需要配置一个pom.xml文件即可。
- 为什么要使用多模块来做一个项目?可以分开测试各个功能,比如接口就写在接口模块中,dao层就写在dao模块中。
- 当然这还只是上网看了一下大概,没有实战大概真的就没法好好理解maven的modules的好处。
- 4.什么是http协议?Get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
- HTTP协议:Hyper Text Transfer Protocol(超文本传输协议),基于TCP/IP通信协议来传递数据,客户向服务器发送请求,服务器响应客户并将请求的资源发送给用户。
- HTTP的状态码:
- 状态码有点多,列举几个常见的吧:
- 200:执行成功(post和get请求)
- 3xx:重定向
- 403:服务器拒绝执行
- 404:服务器找不到资源
- 405:客户端请求方法无法识别或不支持(比如该使用post的地方使用了get就会这样)
- 500:服务器内部错误,无法完成请求
- get和post的区别:
- (1)任务二实战中,使用<a href a>按钮 这种触发式的不用其他配置控制器可以全部用get从url上获取信息,而如果是想要添加信息的话就得用post方法提交表单,当然这只是从最少的代码量考虑的。
- (2)正如(1)中所说,get的信息是需要附加在url中的,而post提交数据是放在了表单中,不会在url中显示,所以如果使用get获得信息会由于URL长度的限制(是浏览器或者操作系统的限制而不是HTTP的限制)无法传递大量的信息,但是实际上post也会被限定数据大小(服务器限制)。同样是信息显示在url上的坏处就是get安全性太低,一切数据都是可见(在url中)。另外的区别是两者的数据返回后端后获取的方法不同,get需要用Request.QueryString获取变量,post需要用Request.Form获取变量。(具体其他获取变量的方法之前日报提到过)
- content-Type有几种、区别:之前不了解这个概念,搜了一下,好多种,这里说一下概念吧,应该是一个资源本身在服务端的储存形式,然后用来被客户端的浏览器加以识别。
- http适合什么场景:
- 不需要连续处理与之前相关的资源,即取决于它的无状态特性,如果需要连续处理的话那么显然用http会降低速度。
- 好吧 百度了一下答案,和我想的不太一样,下面区分了socket和http:
- socket:优点:1.传输数据为字节级,传输数据可自定义,数据量小。相应的移动端开发,手机费用低2.传输数据时间短,性能高3.适合C/S之间信息实时交互4.可以加密,数据安全性高缺点: 1.需要对传输的数据进行解析,转化为应用级的数据2.对开发人员的开发水平要求高3.相对于Http协议传输,增加了开发量
- http:优点:1.基于应用级的接口使用方便2.要求的开发水平不高,容错性强缺点: 1.传输速度慢,数据包大。2.如实现实时交互,服务器性能压力大3.数据传输安全性差
- 确实和自己想的不太一样...
- 5.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
- IP接受低层(网络接口层)发来的的数据包然后向TCP层发送,或者是从把从TCP接受的数据包传向底层,IP层不对数据包做任何判断,而通过IP层的数据包会具有发送该数据包和接受该数据包的两个IP地址,高层的TCP会对数据包进行判断如果有损坏会重新发送等等。而TCP/IP协议是internet最基础的协议,采用4层层级结构,每一层都会调用底层提供的协议来完成自己的工作。
- TCP三次握手指的是
- (1)建立连接时,客户端发送syn包(syn=j)到服务器,进入SYN_SENT状态;
- (2)服务器收到syn包,确认客户的syn(syn=j),再发出一个ack包(ack=j+1),然后还要发送一个syn包(syn=k),进入SYN_RECV状态;
- (3)客户端接受ack+syn包,再向服务器发送ack(ack=k+1),发送完毕后客户端和服务器建立TCP链接。
- 注意在该过程中,如果服务器接到了一个服务器的syn包就会建立一个未连接队列(syn=j),这个队列处于SYN_RECV状态,需要再接受客户端发来的ack(ack=k+1)包才会进入链接状态,否则会一直等待并且向客户再次发送syn-atk包直到超过规定的等待时间,然后这个等待队列就会被关闭,即连接失败。
- 为什么要用三次握手协议来确认,我直接粘贴知乎上一段答案吧,写的挺好的:
- 用自己的话说一下:两次握手,A确认了B的同步,但是B没有确认A的同步,四次握手多握了一次。
- 6.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
- 从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
- 可能相比较而言,小公司小企业更倾向于使用同一套语言比如java来完成所有的任务,而不是向大企业需要跨平台来实现自己的业务。
- 7.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
- 因为自己没用Struts,资料都来源于往上。
- springmvc基于servlet,用controller控制,客户端的action是根据@requestmapping和method来执行的方法模式,springmvc是直接基于spring使用的,不用太多的配置。
- struts基于filter,用不同的类来控制客户端的action,且所有action共享变量,每个action对应一个request上下文,且如果想要在struts中使用spring需要各种配置文件。
- spring是单例模式!
- 8.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
- 指定applicationContext配置文件的前后文路径,过滤器设置编码,可以让.jsp静态页面实现加载,分发servlet,实现springMVC配置文件并且指定servlet容器的优先级。
- 9.Annotation和XML两种配置的差别,为什么更喜欢使用Annotation来配置Spring MVC?
- annotation的注解也是基于spring容器,可以把注解段视为bean注入spring容器中,而xml文件则是通过了<bean id = value=>来实现bean的注入,两者本质上是一样的,不过按照我的理解来看,xml是实现了解耦合的作用,不用像annotation一样把各种代码紧紧相连。
- springmvc自带的注释都很好用,反而在xml中配置会很麻烦,而且我觉得在任务二的前提下annotation的量很少,还是可以耦合一下节省一些工作量。
- 10.使用Annotation的时候需要有哪些配置,他的加载过程是怎么样的?
- 如果使用jar包中的注解,则需要配置依赖的jar包,然后在注释环境下import该jar包,还需要在spring文件中配置
<context:annotation-config/>
<context:component-scan base-package="action">
<context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>类似的context,声明该注解所在的包,调用spring的类进行注入(注解的本质就是使其被当作bean)。
加载过程应该是在构造方法执行之后执行注解(spring是基于java语言的框架所以优先级应该没有那么高).
11.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
fitler:过滤器 interceptor:拦截器
拦截器在sop中用于在访问某个方法之前拦截然后在访问之前或之后加入操作(或者直接终止这个访问),是实现AOP的一种策略。
过滤器先于servlet合jsp页面运行,附加在它们上面,然后过滤请求信息,并且对请求信息进行操作(如更改、终止)。
区别:
1.拦截器基于反射机制,过滤器基于函数回调
2.过滤器是基于jsp页面合servlet容器的
3.拦截器可以多次生效,而过滤器只能在容器初始化时被调用一次。
12.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
(1)string创建json
(2)map方式创建json
(3)用bean转换创建json
JSON标签库实际上也是实现了解耦和,以后更改数据格式可以只修改jsp页面而不改控制代码。
13.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
(1)定义方法:post、get、delete、put
(2)定义uri:是否需要登陆、是否需要更详细的资料等等
(3)定义request参数合response的数据类型合格式
认为一个接口文档好的原则应该是从能否做修改、能否让大家都读懂要求然后进行实际写代码、而接口文档也应该提供通知功能、如果有人修改了文档内容则应该让所有人都知道新增了什么功能、删除了什么功能、修改了什么功能。
14.Http的Header里面包含哪些字段,每个字段都有哪些含义?
(1)通用首部字段:request和response都会使用的首部
(2)请求首部字段:从客户端向服务器发送request要求时使用的首部,补充请求附加内容、客户端信息、响应内容相关优先级。
(3)响应首部字段:从服务器端向客户端发送response时使用的首部,补充了附加内容。
(4)实体首部字段:补充了资源内容更新时间等与实体有关的信息
15.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
今天遇到的问题:云服务器一开始部署项目失败,谷歌插件在应用商店中搜索不到。
服务器部署项目失败的原因是因为:
jdbcUrl=jdbc:mysql://localhost:3306/emp?characterEncoding=UTF-8&useSSL=true
useSSL=true时开启这个加密效果,为什么我在本地可以正常连接到数据库呢?是因为我本地的mysql中的ssl设置时关闭的,而云服务器上ssl设置时开启的,如果正好useSSL也是true的话就无法登陆,需要改为false即可,另外任务2中第四步要求的两个工具都没有在谷歌官方商店中找到。
明天的计划:完成任务二剩余的课后思考。
评论