发表于: 2017-12-02 21:03:42
1 1287
- Filter是基于函数回调的,而Interceptor则是基于Java反射的。
- Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
- Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
- Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
- 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
今天完成的事情:
任务二的深度思考,看了一部分。贴了一些网上比较好的回答。
1.什么是restful?rest的请求方法有哪些,有什么区别?
restful风格的接口。
请求方法:
get: 查询数据 对应数据库SELECT
Post: 对应数据库UPDATE
put:对应数据库 INSERT
Delete:对应数据 DELETE
2.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
Rest提供了统一的风格与约束。同时一套接口可以提供给不同的终端使用。
3.了解maven的module。
创建maven工程的父工程,其余子工程都会继承这个父工程的jar包引用。
4.什么是http协议?
TTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
Get和post请求有什么区别?
get:请求页面的信息,并返回主体。
post:像服务器发送数据,可能会造成数据的新增或者修改。
http请求content-Type有几种,有什么区别?
媒体格式类型:例如text/html image/gif
form表单:key/value
http适合什么场景?
适合用户向数据库发送请求
http状态码有哪些?
常用的200(成功) 400(页面出错) 500(服务器出错)
5.什么是tcp/ip协议?
分为四层:应用层、传输层、网络层、数据链路层
IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址(Media Access Control Address)。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。举一个现实生活中的例子,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人。
TCP协议就是把安全的把东西带给对方。各有分工,互不冲突。
按层次分,TCP属于传输层,提供可靠的字节流服务。什么叫字节流服务呢?这个名字听起来让人不知所以然,下面听下我通俗的解释。所谓的字节流,其实就类似于信息切割。比如你是一个卖自行车的,你要去送货。安装好的自行车,太过庞大,又不稳定,容易损伤。不如直接把自行车拆开来,每个零件上都贴上收货人的姓名。最后送到后按照把属于同一个人的自行车再组装起来,这个拆解、运输、拼装的过程其实就是TCP字节流的过程。
来自 <https://www.cnblogs.com/roverliang/p/5176456.html>
TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。(转自百度百科)
6.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些? 太笨重了,不能够分离。
7.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
2、由上边原因,SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。
3、由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。
4、 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
5、SpringMVC的入口是servlet,而Struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
6、SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
7、SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。
8、Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
9、 设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
10、SpringMVC开发效率和性能高于Struts2。
来自 <http://blog.csdn.net/chenleixing/article/details/44570681>
8.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
<!--spring的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
<!--spring监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--springmvc核心:分发servlet-->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--springmvc的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
9.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
annoation更加简便
https://www.cnblogs.com/imfjj/p/5962874.html
10.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
需要指定对应的controller包 指定包过后 系统会自动去包里寻找对应的类,然后自动注入。
这个时候就不需要配置一下配置了
<!-- 配置hanlderMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 配置 handlerAdapter-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
来自 <https://www.cnblogs.com/imfjj/p/5962874.html>
11.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
来自 <http://blog.csdn.net/xiaodanjava/article/details/32125687>
12.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
http://blog.csdn.net/pengguojun117/article/details/17339867
13.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
四部分:方法、uri、请求参数、返回参数
来自 <https://www.zhihu.com/question/52409287/answer/130390641>
14.Http的Header里面包含哪些字段,每个字段都有哪些含义?
>>请求头字段的具体含义
Accept:浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
来自 <http://blog.csdn.net/melody_day/article/details/53559054>
15.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
https://www.cnblogs.com/caolei1108/p/6203522.html
16.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
17.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
JavaSE程序可以打包成Jar包(J其实可以理解为Java了),而JavaWeb程序可以打包成war包(w其实可以理解为Web了)。然后把war发布到Tomcat的webapps目录下,Tomcat会在启动时自动解压war包。
http://blog.csdn.net/u012110719/article/details/44260417
18.maven常用的打包插件有哪些?有什么区别?如何使用 ?
详细介绍:
https://www.cnblogs.com/avivaye/p/5341341.html
19.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
tomcat:Tomcat服务器是一个免费的开放源代码的Web应用服务器。Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。
jetty:是一个开源的servlet容器,它为基于Java的web容器,Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。
resin:server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。
转自一位师兄的简书:
作者:标量操纵Leve5
链接:http://www.jianshu.com/p/8465131bcabf
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
20.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
这个在IDEA中,很容易配置。
21.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
一个web配置一个容器,独立出来。鸡蛋不要放在一个篮子里。
22.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
我是用的是oneinstack跑的服务。
23.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
域名是不能直接绑定到端口的,域名是指向一个IP,所有对域名的访问都是要加端口号的.
DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。
24.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器。
作用:其实就是用来做负载均衡的,把用户请求收集发送给真正的服务器,然后返回给用户,其实用户不知道为自己服务的服务器是哪一个。
25.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
直接结果会导致程序性能下降。但是为了稳定性及健壮性,有些时候必须要牺牲掉一部分性能。
26.对Service返回的结果是否要判空,为什么?
27.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
28.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
29.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
非常好用的测试接口的工具。Firefox自带的工具也可以
30.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
31.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
内网IP地址、外网IP地址这个概念并不是固定的,而是相对的。如果用私有IP、公网IP或者局域网IP、互联网IP来理解就容易多了。
来自 <https://www.zhihu.com/question/27714563>
用外网检测。
32.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
可以通过 netstat -ano 来查看端口的情况
33.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
这个目前来说还没有完全懂得。自己理解应该是通过不同的端口进行访问。
34.C标签是什么,为什么要使用C标签,有哪些常见的指令?
用于在JSP中显示数据,就像<%= ... > | |
用于保存数据 | |
用于删除数据 | |
用来处理产生错误的异常状况,并且将错误信息储存起来 | |
与我们在一般程序中用的if一样 | |
本身只当做<c:when>和<c:otherwise>的父标签 | |
<c:choose>的子标签,用来判断条件是否成立 | |
<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 | |
检索一个绝对或相对 URL,然后将其内容暴露给页面 | |
基础迭代标签,接受多种集合类型 | |
根据指定的分隔符来分隔内容并迭代输出 | |
用来给包含或重定向的页面传递参数 | |
重定向至一个新的URL. | |
使用可选的查询参数来创造一个URL |
来自 <http://www.runoob.com/jsp/jsp-jstl.html>
用maven打包出war包在本地运行:
服务器出了点问题,搞了搞,没搞定。明天继续。
明天计划的事情:搞定服务器跑war包 从本地访问
遇到的问题:没遇到什么大问题,基本都能解决。
收获:熟悉了tomcat的运作方式!~~~
评论