发表于: 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 上,并创建一个 EndPointConnection 跟这个 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

回显服务器收到的请求,主要用于测试或诊断。




收获:以上




明天计划:完成任务二



返回列表 返回列表
评论

    分享到