发表于: 2020-12-24 23:48:31

1 1977


今天完成的事情:
任务总结
明天计划的事情:
任务三学习
遇到的问题:
收获:
===================================

Filter的生命周期

程序启动调用Filter的init()方法(永远只调用一次),程序停止调用Filter的destroy()方法(永远只调用一次),doFilter()方法每次的访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init()方法以后调用,不管第几次,都在调用doGet(),doPost()方法之前)。
Interceptor的生命周期

一个拦截器实例在一个controller生命周期之内可以多次调用



31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
容器加载顺序:

Servlet->context-param->listener->filter->servlet


加载过程:

启动  web 项目,web 容器读取 web.xml ,读取 <listener>与<context-parem>节点


创建一个 ServletContext(servlet上下文),整个web项目都可以读取这个上下文

容器将 <context-param> 转换为键值对,交给 ServletContext


容器创建 <listener>中的实例,创建监听器



Web.xml 主要配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<web-app version="3.0"
<!-- <filter>过滤器-->
<!-- filter可以认为是servlet的一种加强版,主要用于对用户请求request进行预处理,也可以对response进行后处理,-->
<!-- 是个典型的处理链。使用filter的完整流程是,filter对用户请求进行预处理,接着将请求HttpServletRequest交给Servlet处理并生成响应。-->
<!-- 最后Filter再对服务器响应HttpServletResponse进行后处理。ServletServlet具有完全相同的生命周期,-->
<!-- Filter也可以通过<init-para>进行初始化参数的配置,并通过FilterConfig传送给filter-->
<!-- Filter的配置就是将此项目与一个实现javax.servlet.Filter接口的类相关联-->
<!-- <filter/>-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置spring-mvc的前端控制器-->
<servlet>
<servlet-name>springmvc1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--配置处理适配器地址,交给springmvc.xml分配处理器-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-mvc.xml</param-value>
</init-param>
<!--打开处理器-Controller-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--配置servlet映射器-->
<servlet-mapping>
<servlet-name>springmvc1</servlet-name>
<!--设置为处理所有请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>isLog4jAutoInitializationDisabled</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
</web-app>

显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。



32.Spring  MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?

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和POST本质上就是TCP链接,并无差别。
区别在于

GET产生一个TCP数据包;POST产生两个TCP数据包。


长点来说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

参考网址:https://www.oschina.net/news/77354/http-get-post-different



Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
常见的媒体格式类型如下:
text/html       : HTML格式
text/plain       :纯文本格式
text/xml       : XML格式
image/gif       :gif图片格式
image/jpeg       :jpg图片格式
image/png:png图片格式
以application开头的媒体格式类型:
application/xhtml+xml       :XHTML格式
application/xml:       XML数据格式
application/atom+xml       :Atom XML聚合格式
application/json:       JSON数据格式
application/pdf:pdf格式
application/msword       : Word文档格式
application/octet-stream       : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded       : <form       encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data       : 需要在表单中进行文件上传时,就需要使用该格式
 
分类
分类描述
1**
信息,服务器收到请求,需要请求者继续执行操作
2**
成功,操作被成功接收并处理
3**
重定向,需要进一步的操作以完成请求
4**
客户端错误,请求包含语法错误或无法完成请求
5**
服务器错误,服务器在处理请求的过程中发生了错误
HTTP状态码分类

太多了,不一一列举。



36.了解maven的module。
Maven支持模块化管理,可以把一个大项目拆成几个模块:
可以通过继承在parent的pom.xml统一定义重复配置;
可以通过<modules>编译多个模块。
参考网址:

https://www.liaoxuefeng.com/wiki/1252599548343744/1309301243117601




37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?


REST 的好处

REST 比其他方法(如 SOAP)要容易得多,SOAP 使开发人员不必在 HTTP 请求操作方面重新发明轮子。SOAP 还需要单独的服务器和客户端程序。


由于 REST 基于标准 HTTP 操作,因此它使用具有特定含义的动词,如"获取"或"删除",以避免歧义。为资源分配了单独的 URI,增加了灵活性。


使用 REST,生产和消费的信息与促进生产和消费的技术分离开来。因此,REST 性能良好,可伸缩性高、简单且易于修改和扩展。


rest之前使用的是 soap,这种方式可以让开发者以自己想要的结构来获取数据,但是最终由于其定义与约束越来越复杂访问过于缓慢而被淘汰。统一使用REST,大家都方便



38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
A 序列化实体数据来生成 json
B json taglib

使用 jsontaglib 的话需要修改的时候只要修改 jsp页面,用实体序列化的方式就必须改动实体类或者新建一个类用于序列化为 json 数据。


39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
请求方法,请求地址,返回参数以及字段与备注。
标准:
   保持兼容性
    方法名子描述,看到名字就知道方法的作用,需要的数据
    便于使用者理解,不能定义过于复杂

    有必要的接口参数验证,返回的异常要足够全面


40.Http的Header里面包含哪些字段,每个字段都有哪些含义?
请求字段[编辑]
协议头字段名
说明
示例
状态
Accept
能够接受的回应内容类型(Content-Types)。参见内容协商
Accept: text/plain
常设
Accept-Charset
能够接受的字符集
Accept-Charset: utf-8
常设
Accept-Encoding
能够接受的编码方式列表。参考HTTP压缩
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
发起此请求的用户的邮件地址
常设
Host
服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号。如果所请求的端口是对应的服务的标准端口,则端口号可被省略。
[10] 自超文件传输协议版本1.1(HTTP/1.1)开始便是必需字段。
常设
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
仅请求某个实体的一部分。字节偏移以0开始。参见字节服务
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
向服务器告知,这个请求是由哪些代理发出的。
Via: 1.0 fred, 1.1 example.com    (Apache/1.1)
常设
Warning
一个一般性的警告,告知,在实体内容体中可能存在错误。
Warning: 199 Miscellaneous    warning
常设
 
41.如何写shell脚本?尝试自己编写一个简单脚本。

已经写过了


42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?

环境的检查与安装,代码拉取与编译,部署,清理


43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
看情况吧,穷则战术穿插,达则集群覆盖。
差别就是配在一个容器的话配置文件改起来比较麻烦,然后端口也会需要多个,要么访问的时候加端口号,要么只能在前面再加一个 nginx 之类的代理。

我选肯定是配置多个容器。



44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?
这个也要看情况吧,首先硬件配置有限制,操作系统也有限制,在保障服务能正常运行的前提下尽量大一点。

这个我上次测过一次 resin 的最小启动内存,到 32m 的时候无法启动,当时我的  war 包是 15m 多,我在想最小应该不能低于 war 包的大小。然后 32m 的时候执行操作可能会卡死,所以我估计大概要分配 war 包大小的 3倍以上。



45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
虚拟路径,log文件格式及位置,内存设置,端口等等

之前在任务里配置过有日报记载



46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
Tomcat服务器特点:
1、提供了可被服务器加载并执行的程序代码,并服务于来自客户端的请求。
2、Servlet不依赖浏览器,是允许在服务器端,所以不管浏览器是否支持java,都能请求访问servlet。
Resin服务器特点:
1、Resin包含了很多可靠的特性,包括服务器自动重启、检测并重启死锁的服务器、管理JVM内存以防止内存泄露等。
2、Resin可以将多个服务器作为一个服务器来对客户进行响应,从而增强服务器的扩展能力。
3、Resin可实现持久和分布的sessions:持久的session能够在服务器重启的时候保持现有的Http会话,分布式的session可以在多个服务器之间共享Http会话的状态。
Jetty服务器特点:
1、Jetty嵌入比较便利,它设计之初就是作为一个优秀的组件来设计的,因此Jetty可以非常容易的嵌入到应用程序当中而不需要程序为了使用Jetty做修改。
2、Jetty是轻量的web服务器,一般来说,它的默认配置便可以满足日常大部分需求,
如果要完成较为复杂的功能,只需修改相关的xml文件。jetty的嵌入只需少量的代码就可以做到。
3、Jetty易拓展,有许多非常良好的接口,因此在Jetty的某种实现无法满足用户的需要时,用户可以非常方便地对Jetty的某些实现进行修改,使得Jetty适用于特殊的应用程序的需求。

线上的选择需要根据实际情况来决定。




47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
A。maven-jar-plugin: jar 与依赖分开打包,生成的 jar 包比较小,需要放在 lib 文件夹中运行
B。maven-assembly-plugin:所有的依赖打包进同一个 jar包,生成的文件比较大,可以直接运行,但是可能会有缺失 spring xds 文件而无法运行的风险

C。maven-shade-plugin:所有的依赖放进同一个 jar 文件,可以直接运行




48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?

war包:是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。


war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。


war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。

还有 jar 包,是一种通用类,直接运行或者做依赖。



49.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?

没遇到过。。。



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

@RequestMapping



51.什么是restful?rest的请求方法有哪些,有什么区别?
Restful 是一种交互方法的描述,我现在主要用到的就是根据其约束来设计api。

请求方法:GET,POST,DELETE,PUT等···


GET:获取资源
POST:新建资源
DELETE:删除资源

PUT:替换资源



=================================================

任务总结地址:

http://new.wiki.jnshu.com/pages/viewpage.action?pageId=74779676








返回列表 返回列表
评论

    分享到