发表于: 2020-12-24 23:48:31
1 1977
Filter的生命周期
一个拦截器实例在一个controller生命周期之内可以多次调用
Servlet->context-param->listener->filter->servlet
启动 web 项目,web 容器读取 web.xml ,读取 <listener>与<context-parem>节点
容器将 <context-param> 转换为键值对,交给 ServletContext
容器创建 <listener>中的实例,创建监听器
显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。
1.核心控制器: 即用来处理请求的核心组件,SpringMVC的核心控制器是servlet,Struts2的核心控制器是Filter.
2.控制器实例:Spring Mvc是基于方法设计,而Sturts是基于对象,每次发一次请求都会实例一个action,每个action都会被注入 属性,而SpringMVC更像Servlet一样,只有一个实例,每次请求执行对应的方法即可(注意:由于是单例实例,所以应当避免全局变量的修改,否则会产生线程安全问题)
3.管理方式: 两者都可以使用spring来管理,而两者在管理方式上的主要区别是对注解的支持程度,因为spring mvc是spring中的一个模块,所以spring对于spring mvc的控制器管理更加简单方便一些.
4.参数传递: Struts2中自身提供多种参数接受,其实都是通过(ValueStack)进行传递和赋值,而SpringMvc是通过方法的参数进行接收
5.interceptor的实现机制: Struts2有以自己的interceptor机制,Spring mvc用的是独立的AOP方式。所以struts的配置文件量还是比spring mvc大.
参考网址:https://blog.csdn.net/dove_knowledge/article/details/53354491
33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
远程调用,就是一台计算机a上 的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银 行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程 序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用
XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。
为什么太重?不清楚。
因为可以远程调用,跨防火墙通信,B2B集成,软件和数据重用,这些原因才足以适用银行和大型国企的服务,小企业用不上,对于小企业来说这就是一些无用的功能。
参考网址:
http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
把互联网相关联的协议集合起来总称为tcp/ip协议
为了把数据准确的送到目标处,才会有三次握手出现。
发送端先发送一个带有SYN标签(SYN标签是啥?)的数据发给对方
对方收到后,会送一个带有SYN/ACK标记的数据。
最后发送端回传一个ACK标志的数据包,代表“握手结束”
三次刚好够双方确认收发能力正常。
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
HTTP协议的目的是建立客户端和服务端的通信,而且必须是由客户端先发出,http协议能够分清楚谁是客户端,谁是服务端。
GET产生一个TCP数据包;POST产生两个TCP数据包。
参考网址:https://www.oschina.net/news/77354/http-get-post-different
分类 | 分类描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
太多了,不一一列举。
https://www.liaoxuefeng.com/wiki/1252599548343744/1309301243117601
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
REST 比其他方法(如 SOAP)要容易得多,SOAP 使开发人员不必在 HTTP 请求操作方面重新发明轮子。SOAP 还需要单独的服务器和客户端程序。
由于 REST 基于标准 HTTP 操作,因此它使用具有特定含义的动词,如"获取"或"删除",以避免歧义。为资源分配了单独的 URI,增加了灵活性。
使用 REST,生产和消费的信息与促进生产和消费的技术分离开来。因此,REST 性能良好,可伸缩性高、简单且易于修改和扩展。
rest之前使用的是 soap,这种方式可以让开发者以自己想要的结构来获取数据,但是最终由于其定义与约束越来越复杂访问过于缓慢而被淘汰。统一使用REST,大家都方便
使用 jsontaglib 的话需要修改的时候只要修改 jsp页面,用实体序列化的方式就必须改动实体类或者新建一个类用于序列化为 json 数据。
有必要的接口参数验证,返回的异常要足够全面
协议头字段名 | 说明 | 示例 | 状态 |
Accept | Accept: text/plain | 常设 | |
Accept-Charset | 能够接受的字符集 | Accept-Charset: utf-8 | 常设 |
Accept-Encoding | Accept-Encoding: gzip, deflate | 常设 | |
Accept-Language | Accept-Language: en-US | 常设 | |
Accept-Datetime | 能够接受的按照时间来表示的版本 | Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT | 临时 |
Authorization | 用于超文本传输协议的认证的认证信息 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== | 常设 |
用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令 | Cache-Control: no-cache | 常设 | |
Connection | 该浏览器想要优先使用的连接类型 | Connection: keep-alive Connection: Upgrade | 常设 |
Cookie | 之前由服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议Cookie | Cookie: $Version=1; Skin=new; | 常设: 标准 |
Content-Length | 以 八位字节数组 (8位的字节)表示的请求体的长度 | Content-Length: 348 | 常设 |
Content-MD5 | 请求体的内容的二进制 MD5 散列值,以 Base64 编码的结果 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== | 过时的[9] |
Content-Type | 请求体的 多媒体类型 (用于POST和PUT请求中) | Content-Type: application/x-www-form-urlencoded | 常设 |
Date | 发送该消息的日期和时间(按照 RFC 7231 中定义的"超文本传输协议日期"格式来发送) | Date: Tue, 15 Nov 1994 08:12:31 GMT | 常设 |
Expect | 表明客户端要求服务器做出特定的行为 | Expect: 100-continue | 常设 |
From | 发起此请求的用户的邮件地址 | From: user@example.com | 常设 |
Host | [10] 自超文件传输协议版本1.1(HTTP/1.1)开始便是必需字段。 | Host: en.wikipedia.org:80 Host: en.wikipedia.org | 常设 |
If-Match | 仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要作用时,用作像 PUT 这样的方法中,仅当从用户上次更新某个资源以来,该资源未被修改的情况下,才更新该资源。 | If-Match: "737060cd8c284d8af7ad3082f209582d" | 常设 |
If-Modified-Since | 允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified ) | If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT | 常设 |
If-None-Match | 允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified ),参考 超文本传输协议 的实体标记 | If-None-Match: "737060cd8c284d8af7ad3082f209582d" | 常设 |
If-Range | 如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个新的实体 | If-Range: "737060cd8c284d8af7ad3082f209582d" | 常设 |
If-Unmodified-Since | 仅当该实体自某个特定时间已来未被修改的情况下,才发送回应。 | If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT | 常设 |
Max-Forwards | 限制该消息可被代理及网关转发的次数。 | Max-Forwards: 10 | 常设 |
Origin | 发起一个针对 跨来源资源共享 的请求(要求服务器在回应中加入一个‘访问控制-允许来源’('Access-Control-Allow-Origin')字段)。 | 常设: 标准 | |
Pragma | 与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生多种效果。 | Pragma: no-cache | 常设但不常用 |
Proxy-Authorization | 用来向代理进行认证的认证信息。 | Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== | 常设 |
Range | Range: bytes=500-999 | 常设 | |
表示浏览器所访问的前一个页面,正是那个页面上的某个链接将浏览器带到了当前所请求的这个页面。 | 常设 | ||
TE | 浏览器预期接受的传输编码方式:可使用回应协议头 Transfer-Encoding 字段中的值;另外还可用"trailers"(与"分块 "传输方式相关)这个值来表明浏览器希望在最后一个尺寸为0的块之后还接收到一些额外的字段。 | TE: trailers, deflate | 常设 |
User-Agent | 浏览器的浏览器身份标识字符串 | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0 | 常设 |
Upgrade | 要求服务器升级到另一个协议。 | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 | 常设 |
Via | 向服务器告知,这个请求是由哪些代理发出的。 | 常设 | |
Warning | 一个一般性的警告,告知,在实体内容体中可能存在错误。 | Warning: 199 Miscellaneous warning | 常设 |
已经写过了
环境的检查与安装,代码拉取与编译,部署,清理
我选肯定是配置多个容器。
这个我上次测过一次 resin 的最小启动内存,到 32m 的时候无法启动,当时我的 war 包是 15m 多,我在想最小应该不能低于 war 包的大小。然后 32m 的时候执行操作可能会卡死,所以我估计大概要分配 war 包大小的 3倍以上。
之前在任务里配置过有日报记载
线上的选择需要根据实际情况来决定。
C。maven-shade-plugin:所有的依赖放进同一个 jar 文件,可以直接运行
war包:是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。
war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。
还有 jar 包,是一种通用类,直接运行或者做依赖。
没遇到过。。。
@RequestMapping
请求方法:GET,POST,DELETE,PUT等···
PUT:替换资源
任务总结地址:
http://new.wiki.jnshu.com/pages/viewpage.action?pageId=74779676
评论