barriers / 阅读 / 详情

Undertow和jetty做嵌入式,哪个更好

2023-08-15 22:06:06
共2条回复
蓓蓓

应该是Undertow更好些,它是借鉴tomcat, jetty而发展起来的嵌入式servlet容器。

ardim

使用Jetty的嵌入式API,可以将J2EE容器嵌入你的Application中,更进一步的是,采用Servlet 3.0的标准,你甚至可以省掉web.xml的配置文件,因此Spring提供了类 SpringServletContainerInitializer。但是在实际开发中,发现Jetty的嵌入式API默认情

相关推荐

jetty和tomcat的区别和联系是什么

Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。由于它们的实现都遵循Java Servlet规范,一个Java Web应用部署于两款容器的任意一个皆可。但选择哪个更优?也许这得看场景。 近期很多人关注Jetty,也许主要是因为GAE放弃了Tomcat而选择了Jetty。于是,以很直接的想法,Jetty更符合GAE的需求、即云环境的需求,亦分布式环境的需求。 那Jetty与Tomcat比较,有哪差异呢? 自己简单做了些调研,也请救了熟悉Tomcat和Jetty的朋友和师兄,得出以下结论: 1)Jetty更轻量级。这是相对Tomcat而言的。由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。2)Jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其的成本远大于丰富Jetty的成本。用自己的理解,即增肥容易难。3)然而,当支持大规模级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。总结:Jetty更满足公有云的分布式环境的需求,而Tomcat更符合级环境。
2023-08-09 13:25:402

Jetty9 使用

Jetty比较简单,和Tomcat大致相同,本文主要描述jetty9以上版本的使用,jetty9版本对jetty的目录结构和使用都有了一些明显的改动。 Jetty较于Tomcat属于轻量级,而且在处理高并发细粒度请求的场景下显得更快速高效。所以使其也拥有众多使用场景,合适的选择应该为:云平台本身的门户网站放在Tomcat内,而云台托管的Java Web应该是部署在Jetty内的。 bin目录是存放在Unix系统下运行的shell脚本的; etc存放的都是jetty的配置文件; modules是存放着各个模块的,以.mod结尾,点进去可以看到有众多模块,不过大多数是没有激活的,像logs,webapps这种模块就是默认激活的。 webapps和Tomcat一样,用于存放项目的; 可以看到截图中是有个work目录的,正常情况下,解压jetty是没有这个目录的,因为当在webapps中存放项目时,通过在根目录下面运行java -jar start.jar命令,启动jetty,由于jetty本身所在的目录和运行的项目的路径是分开的,这方便于丹jetty升级的时候,并不影响运行的项目,所以例如在webapps下放置一个war包,运行jetty,该war包解压出来的项目是存在于系统的temp的目录下面的,在jetty的目录中并不能找到,不过当创建一个work文件夹的时候,解压出来的项目就会默认的存放在work文件夹内了。 里面的配置文件编写为: 这是最基础的配置,同tomcat的server.xml类似,不过jetty可以配置更多。 默认情况下,jetty会对根目录(也可以配置jetty.base)下webapps/目录下的内容实现自动部署,部署的规则如下: 隐藏文件(.开头)和.d结尾的目录被忽略; CVS目录如”CVS”和”CVSROOT”被忽略; 任何war包都会被自动部署; 任何xml描述文件被认为是可部署的; 任何目录都被认为是可部署的; 同名的war包和目录同时存在,目录不被部署,仅war包部署,且认为war包引用该目录; 同名的war包和xml文件同时存在,war包不被部署,仅xml文件描述符被部署,且认为该xml文件引用该war包; 同名的目录和xml文件同时存在,目录不被部署,xml文件被部署,且认为xml文件引用该目录; 关于更详细的说明,请参考官方文档的这里。我主要提醒的是:在webapps目录中,如果存在同名的目录、war包和xml文件,它们会被当做同一个工程,部署的优先级是xml文件>war包>目录。一定要注意同名,如果不同名,在webapps下存在一个war包,同时存在一个引用该war包的xml文件,则会导致重复部署,这就是我跳的坑。 部署时,推荐的做法是,将xml描述文件放到自动部署的webapps目录下,里面定义war包的路径、上下文路径、是否解压、临时目录、日志文件等,然后将war包放在自定义的固定目录下,项目更新,只需要备份和替换war包,重启jetty即可。 以上转自: https://blog.csdn.net/weixin_38978094/article/details/87917711 demo-base目录为单独项目的一个实例,该目录就是运行某个项目的jetty_base,其可以在服务器的任何位置。 目录结构: 修改访问的context-path在webapps对应的xml中,修改端口号在start.d/http.ini中。 启动该项目:java -jar ${JETTY_HOME}/start.jar 启动时候也可以指定jetty_base:java -jar ${JETTY_HOME}/start.jar jetty.base=...
2023-08-09 13:25:481

如何选择Tomcat和Jetty

1、在架构方面Jetty架构需要在Handler基础上才能实现,主要功能都可以用Handler来实现,也比较简单;Tomcat架构则需要建立在容器设计基础上才能实现,比Jetty复杂一些。2、在轻量级方面Jetty相对于Tomcat更轻一些,Tomcat既要遵循Java Servlet,还要扩展大量的JEE特性以满足企业级应用的需求。3、在灵活性方面Jetty灵活性更高一些,扩展性强,开发者可以对etty本身进行二次开发,重量级的Tomcat原本便支持过多特性,成本比Jetty要高很多。3、灵活性4、其它比较Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
2023-08-09 13:25:582

Java容器Jetty7、8、9各大版本之间的区别?

Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。Jetty版本众多,下面一张图解释他们的区别:明显看出只是多了支持的协议,其他都是一样的。
2023-08-09 13:26:161

Jetty启动项目失败?两个命令解决address already in use问题

在使用Idea开发Java项目时常常选中Jetty作为我们本地运行项目的Web容器。当我们执行了jetty run后,若Idea被非正常地关闭了,可能出现Idea关闭了但Jetty仍在运行的情况。这时候如果我们重新打开Idea,再次执行jetty run时就会报错: 以下为在Windows系统下的解决方法。只需要执行两个命令即可。 假如我是在80端口启动了jetty,那么打开windwos“命令提示符”窗口,输入以下命令: 解释一下,netstat -ano是列出系统当前所有端口的占用情况。但这个列表往往较长,我们想要找到自己要的并不容易。所以才有了命令的后边部分——findstr "80"。findstr命令搜索符合条件的结果,为我们过滤掉大部分的内容,这样就容易找到我们需要的80端口占用情况。 netstat和findstr命令之间有个“|”,这个竖杠表示将netstat命令的结果作为findstr命令的输入。这种写法在Linux系统中也比较常见。 执行此命令的输出结果示例如下: 我们看到输出结果一共有5列,分别是:协议、本地地址、外部地址、状态、PID。其中本地地址为“127.0.0.1:80”的为我们要找的,其对应的PID是10468。 使用命令一我们拿到了占用端口的进程的PID,10468。再执行以下命令杀死进程即可。 其中PID用于指定进程ID,F选项意思是强制结束进程 拿到进程的PID后,如果想进一步了解其对应的程序名称,可以使用以下命令:如PID是4832 其输出结果为:
2023-08-09 13:26:291

jetty-6.1.9 怎么配置jdk

1. 首先从Jetty的官方网站wiki.eclipse.org/Jetty/Starting/Downloads下载最新的Jetty,上面有两个版本7.x和8.x,7.x是运行在JDK5及以上版本,8.x,9.x是运行在JDK6及以上版本,这里我选择了8.0.4版本。2. 解压压缩包到指定目录,且将其目录路径定义为${JETTY_HOME}3. 启动Jetty服务 3.1 进入${JETTY_HOME}目录,然后运行“java -jar start.jar”,就可以启动Jetty server了 3.2 打开浏览器,访问localhost:8080,此时可以看到Jetty的欢迎页面了。4. Jetty配置 4.1 Jetty的配置文件都是放在${JETTY_HOME}/etc目录下; 4.2 通过${JETTY_HOME}/etc/jetty-webapps.xml文件,可以看出Jetty中默认将所有的web app都放在了${JETTY_HOME}/webapps目录下;(备注:9.x版本是${JETTY_HOME}/etc/webdefault.xml) 4.3 在Jetty包中默认带了一个test.war的应用,可以${JETTY_HOME}/webapps目录下找到这个文件,在启动Jetty服务的时候默认已经部署了test.war应用。对于test.war文件,Jetty还定义了context文件,放在${JETTY_HOME}/contexts/test.xml,其中将contextPath定义成了“/”,这就是为什么默认访问localhost:8080/的时候为什么是访问test应用的原因了。
2023-08-09 13:26:541

eclipse怎么安装jetty8

elipse上jettyrun插件在线安装:help--install new software 在work with后点击add,name随便取,location里面输入插件更新地址http://run-jetty-run.googlecode.com/svn/trunk/updatesite/,加载一会后会出现相关安装选择。如图
2023-08-09 13:27:011

tomcat和jetty的区别

1、在架构方面Jetty架构需要在Handler基础上才能实现,主要功能都可以用Handler来实现,也比较简单;Tomcat架构则需要建立在容器设计基础上才能实现,比Jetty复杂一些。2、在轻量级方面Jetty相对于Tomcat更轻一些,Tomcat既要遵循Java Servlet,还要扩展大量的JEE特性以满足企业级应用的需求。3、在灵活性方面Jetty灵活性更高一些,扩展性强,开发者可以对etty本身进行二次开发,重量级的Tomcat原本便支持过多特性,成本比Jetty要高很多。3、灵活性4、其它比较Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
2023-08-09 13:27:402

jetty启动后怎么关闭

假设你在使用 Jetty7 eclipse 版本,为了启动 Jetty (当然这个我们都知道),人们通过使用如下命令:?java -jar start.jar但是如果你想通过命令行关闭 Jetty 服务器,你不得不在启动服务器时传入两个 JVM 属性,例如:?java -DSTOP.PORT=8079 -DSTOP.KEY=secret -jar start.jar为了关闭 Jetty,你需要提供与启动 Jetty 服务器时相同的参数才行:
2023-08-09 13:27:591

如何设置jetty的端口

第一种,通过命令行,在启动jetty的时候设置:mvn -Djetty.port=10086 jetty:run第二种,是在maven的pom文件中进行设置<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.26</version> <configuration> <scanIntervalSeconds>3</scanIntervalSeconds> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>10086</port> </connector> </connectors> <scanTargetPatterns> <scanTargetPattern> <directory>src/main/webapp/WEB-INF</directory> <excludes> <exclude>**/*.jsp</exclude> </excludes> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </scanTargetPattern> </scanTargetPatterns> </configuration>
2023-08-09 13:28:071

org.mortbay.jetty和org.eclipse.jetty的区别

在maven项目中经常会用到jetty插件,mvn jetty:run默认启动的是8080端口,tomcat通常占用这个端口,可以手动修改jetty插件的启动端口,命令如下: mvn jetty:run -Djetty.port=9999 另一种方法是修改pom文件,jetty插件部分代码如下: <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.6</version> <configuration> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>9999</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin>
2023-08-09 13:28:153

Jetty 和Netty的区别,求大神能深入浅出给讲解下

jetty是一个servlet容器。netty是个网络框架,是个库。本来就没关系的东西,如果非要说区别,一个是成品,一个是半成品。
2023-08-09 13:28:281

jetty怎么安装到eclipse里

工具/原料eclipse/myeclipse网络方法/步骤打开eclipse,帮助(help)菜单下的 软件超市(eclilpse marketplace..)点击停止下载最新列表,要不然,这地方会等待比较长的时间~当然也会因各自网络问题,有所长短,不过还是建议直接停止下载最新的列表在搜索框中输入 jetty,按回车键搜索,就是第一个了,jetty,点击 install全选下载所有点击 confire.同意~接着就开始下载了~确认信息,继续安装~安装完,确定是否重新启动eclipse ,点击 yes! 重启后,在web容器管理里面就可以看到jetty插件了
2023-08-09 13:28:351

linux下如何设置jetty开机启动?

你可以jetty的启动加到linux系统中/etc/rc.local文件中,这样下次启动linux的时候,jetty就会随系统启动了
2023-08-09 13:29:221

eclipse中怎么启动jetty9

在 Servers 视图中右击 New Server 项目找 ”Download Additional Server“看看有没有 Jetty 插件,如果没有的话,需要手工处理,这需要你很了解如何手工从命令行启动一个 Java 程序同时指定各种各样的参数给它。如果你知道这个步骤的话,你只需要去 Microsoft 网站上下载一个 Process Explorer NT 的工具,先从你的 Jetty 目录下双击一个 bat 文件启动 jetty 服务器,然后用 Process Explorer NT 观察它的完整命令行参数,复制下来之后去 Eclipse 中添加一个 Java Application 类型的 Launching 配置,手工把它的 main class 和各种参数加上去,让它运行起来跟你双击 bat 文件时得到的命令行是一样就可以了。理论上讲 jetty 是一个 Java 程序,因此只要我们从 Eclipse 启动 Jetty 的命令行参数和双击 bat 文件启动时是一样的话,结果就是一样的,你也一样地可以在 Eclipse 中 debug 它。 只不过没有插件的话,可能部署过程需要手工复制 war 包。
2023-08-09 13:29:321

maven web项目如何用jetty运行?

在maven项目中经常会用到jetty插件,mvn jetty:run默认启动的是8080端口,tomcat通常占用这个端口,可以手动修改jetty插件的启动端口,命令如下: x0dx0ax0dx0amvn jetty:run -Djetty.port=9999 x0dx0ax0dx0a另一种方法是修改pom文件,jetty插件部分代码如下: x0dx0ax0dx0a x0dx0a org.mortbay.jetty x0dx0a maven-jetty-plugin x0dx0a 6.1.6 x0dx0a x0dx0a x0dx0a x0dx0a 9999 x0dx0a 60000 x0dx0a x0dx0a x0dx0a x0dx0a
2023-08-09 13:30:211

海运中ROLO jetty是什么意思

RO:roll on and roll off 滚上滚下LO:lift on/lift off 保证书jetty:突提码头
2023-08-09 13:30:313

怎么找到eclipse中jetty路径

内置的?在 eclipse 菜单 Window > Open Perspecive > Plugin Development 找到 Plugin 视图,里面有 jetty 的插件。它依赖的 jetty jar 之类的应该在文件名上就写着版本号吧。a
2023-08-09 13:31:032

jetty url中文乱码,怎么配置

在使用jetty的maven插件,有两种方式来改变jetty server的端口,第一种方式较为简单,即: 通过命令行指定端口:mvn -Djetty.port=9999 jetty:run 另一种方式是在pom中的配置中通过指定新的connector来实现的
2023-08-09 13:31:361

为什么在jetty启动后,work目录下这个应

eclipse中的jetty是通过插件方式添加的。在jetty_home/webapps/目录下的war文件就是要启动的web项目。要在eclipse jee中使用jetty:1、打开eclipse,在Window->Preference中选择Server->Runtime Environments:2、点击右侧Add:3、点击Download additional server adapters:4、待更新完了,会出现Jetty Generic Server Adapter,选中,点Next然后一步步安装就好了。在eclipse的servers视图中新建Server:
2023-08-09 13:31:431

java中的jersey和jetty的区别

区别太大了:jersey相当于spring,是一种框架,主要是用于restful风格,比spring轻量级,但功能却不弱;jetty相当于tomcat,是容器。综上,jersey和jetty完全是两码事儿。
2023-08-09 13:32:091

Maven中jetty日志怎么查看

Jetty本身并没有依赖一个特定的日志框架,它使用一个内置的日志记录器来输出标准错误。可以通过插件jcl04-over-slf4j和simple-slf4j来实现。 在pom.xml 加上<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.0-SNAPSHOT</version> <configuration> <scanIntervalSeconds>5</scanIntervalSeconds> </configuration> <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1</version> <type>jar</type> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jcl</artifactId> <version>1.0.1</version> <type>jar</type> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.13</version> <type>jar</type> </dependency> </dependencies> </plugin>用-Dslf4j=false系统属性运行插件: mvn -Dslf4j=false jetty:run 如果你使用的是log4j,你将需要告诉log4j你配置文件的位置。譬如: mvn -Dslf4j=false -Dlog4j.configuration=file:./target/classes/log4j.properties jetty:run
2023-08-09 13:32:161

eclipse 中jetty插件的安装方法

为什么失败,这不行吗http://blog.csdn.net/bhq2010/article/details/8576557
2023-08-09 13:32:242

jetty:如何配置jetty使外网可以访问服务器?

进入路由器的配置界面,找NAT或者端口映射这个选项,将公网上的8080端口映射到192.168.1.100的8080上就可以了。否则外面的访问是无法进入内网的。
2023-08-09 13:32:321

怎么样清理 jetty 缓存 有高手能替我解答吗? 急!!!!!

解压出jetty.jar中的org/mortbay/jetty/webapp/webdefault.xml文件,将这一选项由true改为false,另存到src/main/resources目录,或者其它自选目录。 <init-param> <param-name>useFileMappedBuffer</param-name> <param-value>true</param-value> <!-- change to false --> </init-param> 在pom.xml中加入对这个文件的指向: Java代码 <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml> </configuration> </plugin> <plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><configuration><webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml></configuration></plugin>
2023-08-09 13:32:391

常见的中间件有哪些

常见的中间件有Apache Websphere IIS tomcat JBoss Weblogic IBM HTTP Server NGINX。在系统架构层面,中间件主要起到中间连接的重要作用,特别适用分布式系统架构。在单体应用中,系统功能模块高度耦合,系统的高效、高性能运行对系统的硬件配置高度依赖,并且存在理论上的极限值;而对系统进行拆分、分布式部署,系统之间如何关联、联系,则是中间件的主要任务。
2023-08-09 13:33:095

如何准确的关闭web服务器jetty的进程

1.查找jetty进程,通过端口查询netstat -ano | findStr "8080" ,其中“8080”是web服务器开启的端口。2,.再通过PID关掉对应的java进程,PID的值对应为1中查询结果的最后一列。PID在任务管理器中通过“查看->选择列”中,勾上PID来显示PID,如何就可以准确的关闭web服务器jetty的进程了,实际上是一个java进程。
2023-08-09 13:33:292

Liunx系统下怎么查看Jetty服务器的运行日志

: 你想查看端口首先要确保服务是正常启动的,如果是正常启动,可使用grep来筛选 例如: netstat -tunlp | grep jetty netstat -tunlp是列出所有监听的端口,...
2023-08-09 13:33:361

idea 项目配置jetty问题

尊敬的联想用户您好!您好!为了方便起见,建议您到联想的服务站查询诊断问题,在保修期内维修是免费的,主要部件保修2年,系统及软件保修1年,国外行货需要注册IWS全球联保,服务站的选择可以查询:http://support1.lenovo.com.cn/lenovo/wsi/station/servicestation/default.aspx?intcmp=I_F_FWWD其他问题也可以在这两个论坛比较全,Idea论坛:http://lenovobbs.lenovo.com.cn/forum.php?intcmp=FM_LBBS_baidureplyThink论坛:http://thinkbbs.lenovo.com.cn/forum.php?intcmp=FM_LBBS_baidureply希望能帮助到您,谢谢呢。期待您满意的评价,感谢您对联想的支持,祝您生活愉快!
2023-08-09 13:33:461

jetty运行java项目不打印日志并且启动一会就自动关闭了,希望大神指导一哈?

1 Jetty6自带的配置文件etc/jetty.xml,已经包括了http配置。2 一般情况下是默认http配置。除非etc/jetty.xml配置文件生效<Set name="handlers"><Array type="org.mortbay.jetty.Handler"><Item><Ref id="RequestLog"/></Item>......</Array></Set>RequestLog Item标签放在最前面修改配置<Set name="ignorePaths"><Array type="String"><Item>/image/*</Item><Item>*.css</Item></Array></Set> 即,配置操作数据3 修改过的http配置的位置:<Arg><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Arg>需要改为:<Arg><SystemProperty name="jetty.home" default="."/>/logs/yyyy_mm_dd.request.log</Arg
2023-08-09 13:33:561

如何快速在CentOS 7中安装Jetty服务器

首先我们要用下面的命令安装JDK:yum -y install java-1.7.0-openjdk wgetJDK安装之后,我们就可以下载最新版本的Jetty了:解压并移动下载的包到/opt:tar zxvf jetty-distribution-9.2.5.v20141112.tar.gz -C /opt/重命名文件夹名为jetty:mv /opt/jetty-distribution-9.2.5.v20141112/ /opt/jetty创建一个jetty用户:useradd -m jetty改变jetty文件夹的所属用户:chown -R jetty:jetty /opt/jetty/为jetty.sh创建一个软链接到 /etc/init.d directory 来创建一个启动脚本文件:ln -s /opt/jetty/bin/jetty.sh /etc/init.d/jetty添加脚本:chkconfig --add jetty是jetty在系统启动时启动:chkconfig --level 345 jetty on使用你最喜欢的文本编辑器打开 /etc/default/jetty 并修改端口和监听地址:vi /etc/default/jettyJETTY_HOME=/opt/jettyJETTY_USER=jettyJETTY_PORT=8080JETTY_HOST=50.116.24.78JETTY_LOGS=/opt/jetty/logs/*我们完成了安装,现在可以启动jetty服务了 *service jetty start完成了!
2023-08-09 13:34:041

jetty的 continuations 有什么优点

jetty在6.0以后引入了continuations, 那么什么是continuations?他有什么优点?原始的servlet是一个连接对应一个线程,在短连接情况下都没什么问题,但是现在有越来越多的运用是基于长连接的,这样用户并发量上去的话,后台的线 程数将会以正比数上升。一个java线程一般占用64K内存,包括其他的,资源会占用很多,况且线程调度,线程锁机制等都很耗CPU。后来出现一个请求对应一个线程。得益于NIO,连接能够在请求被处理时分配一个线程。当连接空闲时,那个线程将会被放到线程池中,而连接再次添加到NIO Select Set中去检测新的请求。这种一个请求对应一个线程的模式能应对更多的用户连接。对于ajax运用来说,轮循请求去取数据不太好,因为要不断建立连接,而 且一般连接都没取到数据,浪费很多连接,所以比较好的办法是服务器保持住那个请求,直到服务器有数据就往客户端转送或超时为止。这是一个好技术,但是它同 时也背离了一个请求一个线程的初衷,因为每个客户端在服务端都有一个请求线程保持着,因此服务端需要为每个客户端生成一个或多个线程。在大量并发用户下仍 然有问题。jetty的continuations正是解决上面的问题而产生的。它的原理是:使用SelectChannelConnector来处理请求,这个类 是基于NIO API上的。因此使它能够不用消耗每个连接的线程就可以持有开放的连接。使用continuations suspend时,调用的实际是SelectChannelConnector.RetryContinuation.suspend,此时会抛出一个异 常RetryRequest,该异常将传播到 servlet 以外并通过过滤器链传回,并由 SelectChannelConnector 捕获。 但是发生该异常之后并没有将响应发送给客户机,请求被放到处于等待状态的 Continuation 队列中,而 HTTP 连接仍然保持打开状态。此时,为该请求提供服务的线程将返回 ThreadPool,用于为其他请求提供服务。 暂停的请求将一直保持在等待状态的 Continuation 队列,直到超出指定的时限,或者当对 resume() 方法的 Continuation 调用 resume() 时,出现上述任意一种条件时,请求将被重新提交到 servlet(通过过滤器链)。事实上,整个请求被重新进行处理,直到首次调用 suspend()。当执行第二次发生 suspend() 调用时,RetryRequest 异常不会被抛出,执行照常进行.判断的依据是:if (!_pending && !resumed && timeout >= 0) ..throw _retry;其中_pending是指是不是第二次调用了suspend....这样子,jetty中的thread pool就会有空闲线程来处理其他的请求。continuations的引入能用很少的线程处理大量的请求。。实验见下:public class App { public static void main(String[] args) throws Exception { Server server = new Server(); Connector conn = new SelectChannelConnector(); conn.setPort(8080); server.setConnectors(new Connector[]{conn}); WebAppContext ctx = new WebAppContext(); ctx.setContextPath("/"); ctx.setWar("./webapp"); server.setHandler(ctx); QueuedThreadPool threadPool = new QueuedThreadPool(); threadPool.setMaxThreads(100);#设置jetty的thread pool最大为100个线程。 server.setThreadPool(threadPool); DaemonService.bind(server); server.start(); }}DaemonService是一个ServletContextListener,代码为: public void contextInitialized(ServletContextEvent sce) { new Thread(new Runnable() { public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } #每次打印出当前线程池的线程大小及空闲线程 System.out.println("thread:" + server.getThreadPool().getThreads() + "#idle:" + server.getThreadPool().getIdleThreads()); } } }).start(); }写一个TestServlet,对应的mapping是/testpublic class TestServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } resp.getWriter().write("Test"); resp.getWriter().flush(); }}使用ab -c 200 -n 1000 http://localhost:8080/test 测试后结果如下:thread:2#idle:1thread:2#idle:1thread:89#idle:0thread:100#idle:0大概还有10多个的thread:100#idle:0thread:100#idle:0thread:100#idle:0thread:99#idle:19thread:99#idle:88thread:99#idle:98thread:99#idle:98thread:99#idle:98说明了在并发200个时,jetty线程池里几乎没有空闲线程来处理其他的请求。ab测试结果为:Requests per second: 44.54 [#/sec] (mean)Time per request: 4490.625 [ms] (mean)当把TestServlet代码改为Continuation时,同样是停顿2秒public class TestServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Continuation continuation = ContinuationSupport.getContinuation(req, null); continuation.suspend(2000); resp.getWriter().write("Test"); resp.getWriter().flush(); }}使用ab -c 200 -n 1000 http://localhost:8080/test 测试后结果如下:thread:2#idle:1thread:7#idle:6thread:7#idle:6thread:39#idle:26thread:42#idle:41thread:42#idle:36thread:65#idle:64thread:65#idle:46thread:91#idle:90thread:91#idle:90thread:91#idle:89thread:91#idle:90thread:91#idle:83说明在并发200个时,jetty线程池中一直都有很多空闲线程ab测试结果为:Requests per second: 79.21 [#/sec] (mean)Time per request: 2525.000 [ms] (mean)结论:jetty的continuations在短连接上不见得有很大的优势,但是在长连接或者在后台访问IO资源(数据库,网络等)造成的 servlet响应慢问题上,会有很大的优势,他不会让一个线程傻傻地在等待数据库访问完成,而是会放入线程池去处理其他请求。等数据库访问完后,再过来 处理。servlet 3.0规范已经引入了异步servlet功能,写法为:请求/url/AAsyncContext ac = request.startAsync();//...这边处理具体的资源操作,如db.getConnection()或其他的操作ac.dispatch();
2023-08-09 13:34:141

jetty9莫名的启动不了了,该怎么处理

电脑蓝屏有很多方面的影响因素: 一、屏幕显示系统忙,请按任意键继续…… 1、虚拟内存不足造成系统多任务运算错误 虚拟内存是WINDOWS系统所特有的一种解决系统资源不足的方法,其一般要求主引导区的硬盘剩余空间是其物理内存的2-3倍。而一些发烧友为了充分利用空间,将自己的硬盘塞到满满的,忘记了WINDOWS这个苛刻的要求。结果导致虚拟内存因硬盘空间不足而出现运算错误,所以就出现蓝屏。要解决这个问题好简单,尽量不要把硬盘塞得满满的,要经常删除一些系统产生的临时文件、交换文件,从而可以释放空间。或可以手动配置虚拟内存,选择高级,把虚拟内存的默认地址,转到其他的逻辑盘下。这样就可以避免了因虚拟内存不足而引起的蓝屏。 2、CPU超频导致运算错误 超频对于发烧友来说是常事,所以由超频所引起的各种故障也就在所难免了。超频,就本身而言就是在原有的基础上完成更高的性能,但由于进行了超载运算,造成其内部运算过多,使CPU过热,从而导致系统运算错误。有些CPU的超频性能比较好,如INTEL的赛扬处理器和AMD-K6-2处理器还算较好的,但有时也会出现一些莫名其妙的错误。(例如:我曾试过将INTEL赛扬300A,在超频到450时,软驱在没有接受命令时,进行读盘操作)。INTEL的低于200的CPU以及AMD-K5的超频能力就不是那么好。建议高档的CPU要超频时,那么散热工作一定要做好,最好装一个大的风扇,再加上一些硅胶之类的散热材料。至于一些低档的CPU我建议你就最好不要超频了,免得超频达不到预想的效果反而经常出现蓝屏影响计算机的正常速度。 二、内存条的互不兼容或损坏引起运算错误 这时个最直观的现象,因为这个现象往往在一开机的时候就可以见到,根本启动不了计算机,画面提示出内存有问题,问你是否要继续。造成这种错误是物理上的损坏内存或者内存与其它硬件不兼容所致。这时候只有换过另外的内存了。 三、光驱在读盘时被非正常打开所至 这个现象是在光驱正在读取数据时,由于被误操作打开而导致出现蓝屏。这个问题不影响系统正常动作,只要再弹入光盘或按ESC键就可以。 以上是我在维护计算机中碰到导致蓝屏的几种原因,或许还会有其他一些莫名其妙的问题导致计算机出现蓝屏。不管怎样,遇到这类问题后,应先仔细分析问题发生的原因,然后再着手解决。 四、硬件剩余空间太小或碎片太多 由于Win9X运行时需要用硬盘作虚拟内存,这就要求硬盘必须保留一定的自由空间以保证程序的正常运行。一般而言,最低应保证100MB以上的空间,否则出现“蓝屏”很可能与硬盘剩余空间太小有关。另外,硬盘的碎片太多,也容易导致“蓝屏”的出现。因此,每隔一段时间进行一次碎片整理是必要的。 五、系统硬件冲突 这种现象导致“蓝屏”也比较常见。实践中经常遇到的是声卡或显示卡的设置冲突。在“控制面板”→“系统”→“设备管理”中检查是否存在带有黄色问号或感叹号的设备,如存在可试着先将其删除,并重新启动电脑,由Win9X自动调整,一般可以解决问题。若还不行,可手工进行调整或升级相应的驱动程序。 "蓝屏"的软件原因及解决 与硬件密切联系的是软件,有时软件在"蓝屏"现象中也"功不可没",加载了过多的程序、注册表有问题、软硬不兼容、驱动程序有问题,相对于硬件原因来说要不易察觉些,可要多加注意......... 一、启动时加载程序过多 不要在启动时加载过多的应用程序(尤其是你的内存小于64MB),以免使系统资源消耗殆尽。正常情况下,Win9X启动后系统资源应不低于90%。最好维持在90%以上,若启动后未运行任何程序就低于70%,就需要卸掉一部分应用程序,否则就可能出现“蓝屏”。 二、应用程序存在着BUG 有些应用程序设计上存在着缺陷或错误,运行时有可能与Win9X发生冲突或争夺资源,造成Win9X无法为其分配内存地址或遇到其保护性错误。这种BUG可能是无法预知的,免费软件最为常见。另外,由于一些用户还在使用盗版软件(包括盗版Win9X),这些盗版软件在解密过程中会破坏和丢失部分源代码,使软件十分不稳定,不可靠,也常常导致“蓝屏”。 三、遭到不明的程序或病毒攻击所至 这个现象只要是平时我们在上网的时候遇到的,当我们在冲浪的时候,特别是进到一些BBS站时,可能暴露了自己的IP,被"黑客"用一些软件攻击所至。对互这种情况最好就是在自己的计算机上安装一些防御软件。再有就是登录BBS要进行安全设置,隐藏自己IP。 四、版本冲突 有些应用程序需调用特定版本的动态链接库DLL,如果在安装软件时,旧版本的DLL覆盖了新版本的DLL,或者删除应用程序时,误删了有用的DLL文件,就可能使上述调用失败,从而出现“蓝屏”。不妨重新安装试一试。 五、注册表中存在错误或损坏 很多情况下这是出现“蓝屏”的主要原因。注册表保存着Win9X的硬件配置、应用程序设置和用户资料等重要数据,如果注册表出现错误或被损坏,就很可能出现“蓝屏”。如果你的电脑经常出现“蓝屏”,你首先就应考虑是注册表出现了问题,应及时对其检测、修复,避免更大的损失。 六、软硬件不兼容 新技术、新硬件的发展很快,如果安装了新的硬件常常出现“蓝屏”,那多半与主板的BIOS或驱动程序太旧有关,以致不能很好支持硬件。如果你的主板支持BIOS升级, 应尽快升级到最新版本或安装最新的设备驱动程序。
2023-08-09 13:34:211

如何修改eclipse中的jetty容器参数

java中Eclipse下的jetty容器配置项目数据源1、在WEB-INF目录下创建jetty-env.xml文件,内容如下:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <!-- 应用数据源 --> <New id="leo" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg>leo</Arg> <Arg> <New class="org.apache.commons.dbcp.BasicDataSource"> <Set name="driverClassName">com.mysql.jdbc.Driver</Set> <Set name="url">jdbc:mysql://127.0.0.1:3306/leo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull</Set> <Set name="username">test</Set> <Set name="password">test</Set> <Set name="maxActive">30</Set> </New> </Arg> </New> </Configure> 123456789101112131415161712345678910111213141516172、在web.xml里面加入以下配置:<res-ref-name>标签里面的名字一定要和jetty-env.xml里面的arg标签的值对应。 <resource-ref> <description>My DataSource Reference</description> <res-ref-name>leo</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>123456123456运行项目时候右键项目名称,然后选择run as,然后选择run configurations,弹出jetty的选项框,具体如下图: 运行截图选项截图
2023-08-09 13:34:302

如何通过命令行启动或者关闭 Jetty 服务器

有人分配给我壹个任务:去寻找壹种更好的停止 Jetty 服务器的方法,而在此之前我们是通过在命令行窗口中输入 Ctrl + C 或者在任务管理器中结束相应进程的方式来关闭 Jetty 服务器。于是我在网上搜索这个问题的解决方案:如何通过命令行关闭它而不是纯粹靠运气。最后在我们壹个同事的博客文章中,他解释了如何通过 ant 脚本启动和关闭 Jetty ,我才得以找到壹种使用命令行关闭服务器的方法。假设你在使用 Jetty7 eclipse 版本,为了启动 Jetty (当然这个我们都知道),人们通过使用如下命令:?java -jar start.jar但是如果你想通过命令行关闭 Jetty 服务器,你不得不在启动服务器时传入两个 JVM 属性,例如:?java -DSTOP.PORT=8079 -DSTOP.KEY=secret -jar start.jar为了关闭 Jetty,你需要提供与启动 Jetty 服务器时相同的参数才行:?1java -DSTOP.PORT=8079 -DSTOP.KEY=secret -jar start.jar -–stop
2023-08-09 13:35:371

jetty可以部署jar包吗

支持,jetty跟tomcat一样是servlet容器,如果你安装有maven,用mvn jetty:run-war就可以用jetty运行war包,当然,你jetty也可以独立运行的,jetty是典型的OSGI规范的一个实现,它可以内嵌到你的应用中,只需要依赖jetty的几个jar包
2023-08-09 13:35:441

eclipse的jetty插件和maven的jetty插件的区别

在maven项目中经常会用到jetty插件,mvn jetty:run默认启动的是8080端口,tomcat通常占用这个端口,可以手动修改jetty插件的启动端口,命令如下: mvn jetty:run -Djetty.port=9999 另一种方法是修改pom文件,jetty插件部分代码如下: <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.6</version> <configuration> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>9999</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin>
2023-08-09 13:35:521

jetty 支持内嵌ssh项目吗,为什么在tomcat下面正常的war 放到jetty就跑不起来

用jetty?这个你确定可以的
2023-08-09 13:36:063

jetty9.4支持java7吗

1. 首先从Jetty的官方网站wiki.eclipse.org/Jetty/Starting/Downloads下载最新的Jetty,上面有两个版本7.x和8.x,7.x是运行在JDK5及以上版本,8.x,9.x是运行在JDK6及以上版本,这里我选择了8.0.4版本。 2. 解压压缩包到指定目录,且将其目录路.
2023-08-09 13:36:131

jetty如何配置不让让访问目录?

webdefault.xml文件中设置dirAllowed属性为false
2023-08-09 13:36:212

如何设置jetty的端口

在使用jetty的maven插件,有两种方式来改变jetty server的端口,第一种方式较为简单,即:通过命令行指定端口:mvn -Djetty.port=9999 jetty:run另一种方式是在pom中的配置中通过指定新的connector来实现的
2023-08-09 13:36:281

如何让嵌入式Jetty加载Spring WebApplicationInitializer

由于Jetty本身代码的原因,WebApplicationInitializer的实现必须直接实现接口,不能继承 AbstractContextLoaderInitializer。MetaData metaData = _ctx.getMetaData();Resource webappInitializer = Resource.newResource(WebApp.class.getProtectionDomain().getCodeSource().getLocation());metaData.addContainerResource(webappInitializer);
2023-08-09 13:36:391

linux怎么重新启动jetty

在/etc/init.d/下创建jetty文件内容:123456789101112131415vim /etc/init.d/jetty#内容如下:#!/bin/bash # chkconfig: 35 95 1 # description: script to start/stop jetty case $1 in start) sh /opt/startjetty.sh ;; stop) sh /opt/stopjetty.sh ;; *) echo "Usage: $0 (start|stop)" ;; esac #更改权限 chmod 775 jetty # 加入自动启动chkconfig –add jetty#查看自动启动设置 chkconfig –list jettyjetty 0:off 1:off 2:off 3:on 4:off 5:on 6:off以后可以用以下命令启动和停止脚本12service jetty start #启动 service jettystop #停止
2023-08-09 13:36:591

maven web项目如何用jetty运行

添加插件(里面的版本,可以使用更新的)<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-jspc-plugin</artifactId> <version>6.1.16</version> <executions> <execution> <id>jspc</id> <goals> <goal>jspc</goal> </goals> <configuration> <webAppSourceDirectory> ${basedir}/web </webAppSourceDirectory> <generatedClasses> ${basedir}/target/jspc </generatedClasses> </configuration> </execution> </executions></plugin><plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <webappDirectory> ${basedir}/web </webappDirectory> <warSourceDirectory> ${basedir}/web </warSourceDirectory> <webXml> ${basedir}/web/WEB-INF/web.xml </webXml> </configuration></plugin>
2023-08-09 13:37:092

myeclipse 配置jetty7服务器启动报错

未找到jetty服务器,在eclispe--选项--服务器--配置jetty 选择版本。将jetty server下面的enable打开
2023-08-09 13:37:161

jetty上传文件涉及哪些配置

jetty的启动方式后很多中,可以采用嵌入式的方法,也就是在自己的代码中创建jetty的组件对象,然后启动,还有一种启动方法就是服务器启动了,也就是我们常用的方法:在jetty的根目录中敲命令行:java -jar start.jar ,当然这也是用的最多的启动方法了。。。。这种启动方法真正会调用org.mortbay.xml.XmlConfiguration来作为启动类,而这个它默认又会读取/etc/jetty.xml文件,这也是我们比较熟悉的jetty的配置文件。。。那么接下来就来看看这个文件中定义的主要内容(jetty的配置文件感觉很像是用xml定义了一种命令脚本,在载入的时候就自动根据它的说明来创建相应的对象):[java] <Configure id="Server" class="org.mortbay.jetty.Server"> 上述是整个配置文件的root元素,读到它的时候会创建一个server对象,当然这个server对象的创建采用的是默认构造函数,因而可以理解为它是一个空的server。。。那么接下来就是为其填充各种各样的对象了。。。接下来继续看配置:[java] <Set name="ThreadPool"> <New class="org.mortbay.thread.QueuedThreadPool"> <Set name="minThreads">10</Set> <Set name="maxThreads">200</Set> <Set name="lowThreads">20</Set> <Set name="SpawnOrShrinkAt">2</Set> </New> <!-- Optional Java 5 bounded threadpool with job queue <New class="org.mortbay.thread.concurrent.ThreadPool"> <Set name="corePoolSize">50</Set> <Set name="maximumPoolSize">50</Set> </New> --> </Set> 这段配置是用于为当前的server设置线程池,可以看看这个xml元素的名字叫Set,其实也就是调用server的set方法,后面有一个name属性的值为ThreadPool
2023-08-09 13:37:241

我要查看eclipse安装的jetty是什么版本,怎么看

内置的?在 eclipse 菜单 Window > Open Perspecive > Plugin Development 找到 Plugin 视图,里面有 jetty 的插件。它依赖的 jetty jar 之类的应该在文件名上就写着版本号吧。
2023-08-09 13:37:311

jetty出现org.mortbay.jetty.EofException异常为啥

从异常日志可知是jetty准备会写response发现connection已经被关闭导致。应用部署架构代码 http2.2.15+mod_proxy+jetty7.2.0
2023-08-09 13:37:411

Web服务器软件有哪些。简单点的?

不知道你说的是什么环境的web服务器,如果是php的话,你可以使用phpstudy,java的话可以使用tomcat。
2023-08-09 13:37:512

使用jetty启动java工程,怎么访问

jetty是一个web服务器,所以你启动的需要是一个web工程,启动后,直接通过浏览器输入url地址进行访问。
2023-08-09 13:38:081