发表于: 2022-06-30 19:28:44
1 515
46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
Tomcat服务器
TomcatTomcat是一个实现了JAVA EE标准的最小的WEB服务器,是Apache 软件基金会的Jakarta 项目中的一个核心项目,
由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且开源免费,
因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
学习JavaWeb开发一般都使用Tomcat服务器,该服务器支持全部JSP以及Servlet规范
Tomcat 特点
1、提供了可被服务器加载并执行的程序代码,并服务于来自客户端的请求。
2、Servlet不依赖浏览器,是允许在服务器端,所以不管浏览器是否支持java,都能请求访问servlet。
Resin服务器
Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,
性能也比较优良,resin自身采用JAVA语言开发。支持负载均衡。
Resin特点
1、Resin包含了很多可靠的特性,包括服务器自动重启、检测并重启死锁的服务器、管理JVM内存以防止内存泄露等。
2、Resin可以将多个服务器作为一个服务器来对客户进行响应,从而增强服务器的扩展能力。
3、Resin可实现持久和分布的sessions:持久的session能够在服务器重启的时候保持现有的Http会话,
分布式的session可以在多个服务器之间共享Http会话的状态。
Jetty服务器
Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,
它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,
可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
Jetty特点
1、Jetty的指导原则是“简单不复杂“。Jetty容易理解和使用: 通过API或者XML文件配置; XML文件语法直接了当地在POJOs上影射API操作;
默认的配置文件可以使Jetty作为外盒(out-of-the-box); 只需少量的行数就可以嵌入一个Jetty实例。
2、可扩展性在异步的WEB2.0类型的应用程序使用的技术,例如AJAX,连接停留时间要比处理一个静态页长,
线程和内存需求可能急剧增长。 底层必须优雅地处理这些问题,一个低速的数据库连接可能造成站点瘫痪,因为线程被占满了。使用Jetty...
3、高效大量的努力用来优化代码,精炼的代码以至于漏洞尽可能少:相关性尽可能少; 核心保持最小,
附加函数放在可选包中;可扩展性是一个关键问题;高强度下性能衰减平缓。
4、嵌入性 Jetty是一个非常好的组件。这意味着很容易嵌入到一个应用程序中,而不需要应用程序去适应它: 使用依赖注射和反转的控制模式
5、Jetty内建插入性。所有Jetty核心组件的实现允许不同的选择,至少一个或者更多,组件的实现总是会提供的。如果这些仍然不能满足你的要求,
你可以自由的编写底层接口和抽象类最为基础。这意味着Jetty能够容易地用在一个特别的应用环境中。
当Jetty在一个 JavaEE服务器中作为web容器时,这是相当有用的,Jetty的插入性保证了它和主机容器的一个紧密的集成。
曲边:
Tomcat和Resin的区别
相同点:他们都是用java编写的,都是web服务器,并且支持集群部署。
不同点:1、速度方面,Resin比Tomcat快2倍以上,不过Tomcat也很快,所以这个差别几乎感受不到。
2、开关机制上方面,Resin要比Tomcat好,比如修改了配置文件之后,Resin是会自动重启的,而Tomcat需要人工手动关闭并重启。
3、报错方面,Tomcat比较详细,一个小小的错误也会用大篇幅来描述,而Resin则相对简洁明确一些。
Tomcat和Jetty的区别
相同点:tomcat与jetty都是一种servlet引擎,他们都支持标准的servlet规范和javaEE规范
不同点:1.架构方面,jetty相比tomcat更为简单jetty架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,
扩展简单tomcat的框架是基于容量设计的,进行扩展是需要了解tomcat的整体设计结构,不易扩展。
2.jetty的应用更加快捷,修改简单,对新的servlet规范的支持更好,tomcat目前应用比较广泛,
对javaEE和servlet的支持更加全面,很多特性会直接集成进来
在线上服务应该选择哪一种WEB服务器?
这些服务器各有优劣,选择服务器时应该先参考项目,预估规模大小等。
比如大规模的企业级应用,Tomcat自身扩展了大量JEE特性可满足企业级应用的需求, 所以这种情况下应选用Tomcat。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
package
任何一个Maven项目都需要定义POM元素packaging(如果不写则默认值为jar)。该元素决定了项目的打包方式。实际的情形中,
如果你不声明该元素,Maven会帮你生成一个JAR包;如果你定义该元素的值为war,那你会得到一个WAR包;
如果定义其值为POM(比如是一个父模块),那什么包都不会生成.
常规打包
maven项目常规的四种包:jar、war、source和javadoc,maven提供了对应的插件:
maven-jar-plugin 、maven-war-plugin 、maven-source-plugin 和 maven-javadoc-plugin。
可执行jar包
Maven默认生成的jar包只包含了编译生成的.class文件和项目资源文件,而要得到一个可以直接在命令行通过java命令运行的jar文件,
还要满足两个条件:
1)jar包中的/META-INF/MANIFEST.MF元数据文件必须包含Main-Class信息。
2)项目所有的依赖都必须在Classpath中。
有三种生成方式:
1)使用jar和dependency插件
2)使用shade插件
3)使用assembly插件
2.3 项目分发包
实际的软件项目常常会有更复杂的打包需求,例如我们可能需要为客户提供一份产品的分发包,这个包不仅仅包含项目的字节码文件,
还得包含依赖以及相关脚本文件以方便客户解压后就能运行,此外分发包还得包含一些必要的文档。
assembly插件支持各种打包文件格式,包括zip、tar.gz、tar.bz2等等,通过一个打包描述文件,
能够帮助用户选择具体打包哪些文件集合、依赖、模块、和甚至本地仓库文件,每个项的具体打包路径用户也能自由控制。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
war是Sun提出的一种Web应用程序格式,是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:
通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录。
通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,
而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类。
war 包是一种打包格式
Java web工程,都是打成war包,进行发布,打成war包的好处是不会缺少目录,并且只管理好一个发布文件就好,并且tomcat服务器能够自动识别,
将war包放在tomcat容器的webapps下,启动服务,即可运行该项目,该war包会自动解压出一个同名的文件夹。
Java web工程,都是打成war包,进行发布.
打成war包的好处是不会缺少目录,并且只管理好一个发布文件就好,并且tomcat服务器能够自动识别,
将war包放在tomcat容器的webapps下,启动服务,即可运行该项目,该war包会自动解压出一个同名的文件夹。
除了War包,还有几种打包格式,他们之间的区别呢?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
49.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
- PUT请求:PUT请求是向服务器发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,
- 但是不会增加数据的种类等,也就是说无论进行多少次的PUT操作,其结果并没有不同。
接收不到数据的原因:可能是防火墙的权限问题
linux命令窗口输入service iptables status查看开放端口
发现没有自己需要查询的端口号,被拦截了
之后输入这三个命令就可以解决问题:
/sbin/iptables -I INPUT -p tcp --dport 7070(需要开放的端口) -j ACCEPT #开启7070端口;
/etc/rc.d/init.d/iptables save #保存配置 ;
/etc/rc.d/init.d/iptables restart #重启服务 。
什么是jetty
Jetty是一个开源的HTTP服务器和Servlet引擎,它可以为JSP和Servlet提供运行时环境。相对于Tomcat,jetty更加轻量、更加简易、更加灵活。
jetty特点
(1)jetty是异步的,支持更高的并发量
(2)jetty更灵活,更加轻量,更容易定制,更高的资源利用率
(3)Jetty 默认采用的 NIO 模型,jetty能很好支持长链接
(4)集成简单,应用只要集成jetty,应用就可以快速支持 http 服务
Jetty的请求流程
一个请求的流程:
- 1.
Acceptor
监听连接请求,当有连接请求到达时就接受连接,一个连接对应一个 Channel,Acceptor 将 Channel 交给 ManagedSelector 来处理。 - 2.
ManagedSelector
把 Channel 注册到 Selector 上,并创建一个EndPoint
和Connection
跟这个 Channel 绑定,接着就不断地检测 I/O 事件。 - 3.I/O 事件到了就调用
EndPoint
的方法拿到一个 Runnable,并扔给线程池执行。 - 4.线程池中调度某个线程执行 Runnable。
- 5.Runnable 执行时,调用回调函数,这个回调函数是
Connection
注册到EndPoint
中的。 - 6.回调函数内部实现,其实就是调用
EndPoint
的接口方法来读数据。 - 7.
Connection
解析读到的数据,生成请求对象并交给Handler
组件去处理。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
50.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
Content-Type
Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,
HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。
最初MIME是用于电子邮件系统的,后来HTTP也采用了这一方案。
在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,
以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。
Content-Type的格式:
Content-Type:type/subtype ;parameter
type:主类型,任意的字符串,如text,如果是*号代表所有;
subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
parameter:可选参数,如charset,boundary等。
在Spring MVC中都怎么接收数据?
方式一
第一种方式:通过Httprequest来获取前端请求数据,这也是最常见的一种方式了。
方式二
第二种方式:直接获取,通过定义形参(注意对应前端页面元素的name、password属性的值)。
方式三
第三种:通过@RequestParam注解来绑定页面参数获取(@RequestParam注解括号里的值一定要与页面元素的name、password属性的值保持一致而userName、passWord否则相当于取了个别名。)
方式四
第四种:通过实体类的get方法获取。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
51.什么是restful?rest的请求方法有哪些,有什么区别?
什么是REST?
REST(英文:Representational State Transfer,简称REST,意思:表述性状态转换,描述了一个架构样式的网络系统,比如web应用)。
它是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,它主要用于客户端和服务端交互类的软件。
基于这个风格设计的软件可以更简介,更有层次,更易于实现缓存等机制。
它本身并没有什么使用性,其核心价值在于如何设计出符合REST风格的网络接口。
什么是RESTful?
REST:指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。
RESTful的特性
资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个URI(统一资源定位符)指向它,每种资源对应一个特性的URI。要获取这个资源,访问它的URI就可以,因此URI即为每一个资源的独一无二的识别符。
表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式。
状态转换(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转换”(State Transfer)。而这种转换是建立在表现层之上的,所以就是“表现层状态转换”。具体说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。他们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
rest请求方法有4种:
包括get,post,put,delete.分别对应获取资源,添加资源,更新资源及删除资源
基本上来说,我们用get和post方法就可以满足日常操作,而且rest的delete和put方法可以通过某种方式转换成get和put方法。
rest其实还有4中操作方法:OPTIONS HEAD TRACE CONNECTION
DELETE
请求服务器删除指定的页面。
DELETE请求一般返回3种码
200(OK)——删除成功,同时返回已经删除的资源。
202(Accepted)——删除请求已经接受,但没有被立即执行(资源也许已经被转移到了待删除区域)。
204(No Content)——删除请求已经被执行,但是没有返回资源(也许是请求删除不存在的资源造成的)。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS
允许客户端查看服务器的性能。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
收获:以上
明天计划:完成任务二
评论