如何保护jetty只允许来自localhost的连接?这意味着从系统B上的客户端B到系统A上的服务器A的连接必须失败.我知道我可以通过配置防火墙来做到这一点(所以请不要回答这个问题).我只是希望Jetty只能监听localhost(loopback).
我有一个在jetty服务器上运行的REST服务,它使用一些资源数据响应GET请求.到目前为止,我检索的数据大约为几kb.我希望使用类似的REST服务,可能会返回大量数据,可能是100 MB或更多.由于请求量较低且jetty服务器和rest客户端进程都配置了足够的内存,因此不会出现内存问题.
我想知道jetty或任何网络服务器是否会限制它可以返回到客户端以响应GET的数据长度.如果是这样,它是否可以在码头配置?
我试图用我的Web应用程序生成一个战争以及一个带有嵌入式jetty的自包含jar文件.对于嵌入式jetty(jar文件分发),我添加一个servlet,如下所示:
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.addServlet(new ServletHolder(new HelloServlet()),"/*");
server.start();
server.join();
}
Run Code Online (Sandbox Code Playgroud)
war文件分发使用web.xml文件,该文件在web-app部分中包含以下内容:
<servlet>
<servlet-class>com.example.HelloServlet</servlet-class>
<servlet-name>SimplestServer</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
这有效.但是,我想摆脱两种方法之间的重复.即,当我添加一个新的servlet时,我想要只在一个位置配置它.我可以从嵌入式jetty加载和使用web.xml文件吗?
典型的DropWizard应用程序指定一个Application子类,并覆盖其initialize方法,如下所示:
class MyApplication extends Application<MyConfiguration> {
static void main(String[] args) {
new MyApplication().run(args)
}
@Override
public void initialize(Bootstrap<MyConfiguration> bootstrap) {
// ???
}
@Override
public void run(MyConfiguration configuration, Environment environment)
throws Exception {
// Register resources, health checks, etc.
}
}
Run Code Online (Sandbox Code Playgroud)
仔细阅读DropWizard文档以及JavaDocs:
Configuration - YAML配置文件的对象表示.使用您自己的配置属性扩展它,它们也将从YAML文件中解析.Bootstrap - 预启动应用程序环境,包含引导Dropwizard命令所需的所有内容.Environment - Dropwizard应用程序的环境.但这些是相当模糊的类定义,特别是最后两个.我理解我应该是子类Configuration,并且它代表我的应用程序的YAML/JSON配置文件的内存中POJO.
但我无法理解其他构造代表什么(Bootstrap和Environment).我习惯于在我的应用程序中注入特定于环境的配置,因此我倾向于将"环境"和"配置"的概念视为同一个概念.
此外,似乎DropWizard将Bootstrap实例与Configurationimpl实例紧密结合,但我找不到关于这两个类如何不同以及如何使用它们彼此不同的可证明的例子.
所以我问:
Bootstrap,我用它做什么用的?Environment,我用它做什么?我正在尝试在Linux上的Jetty 7.0.1中运行的Java webapp中调试文件描述符泄漏.
由于打开的文件过多而导致请求开始失败,应用程序已经愉快地运行了一个月左右,并且必须重新启动Jetty.
java.io.IOException: Cannot run program [external program]: java.io.IOException: error=24, Too many open files
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at org.apache.commons.exec.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58)
at org.apache.commons.exec.DefaultExecutor.launch(DefaultExecutor.java:246)
Run Code Online (Sandbox Code Playgroud)
起初我认为问题在于启动外部程序的代码,但它使用的是commons-exec,我没有看到它有什么问题:
CommandLine command = new CommandLine("/path/to/command")
.addArgument("...");
ByteArrayOutputStream errorBuffer = new ByteArrayOutputStream();
Executor executor = new DefaultExecutor();
executor.setWatchdog(new ExecuteWatchdog(PROCESS_TIMEOUT));
executor.setStreamHandler(new PumpStreamHandler(null, errorBuffer));
try {
executor.execute(command);
} catch (ExecuteException executeException) {
if (executeException.getExitValue() == EXIT_CODE_TIMEOUT) {
throw new MyCommandException("timeout");
} else {
throw new MyCommandException(errorBuffer.toString("UTF-8"));
}
}
Run Code Online (Sandbox Code Playgroud)
在服务器上列出打开的文件我可以看到大量的FIFO:
# lsof -u jetty
... …Run Code Online (Sandbox Code Playgroud) 为什么它会优于Tomcat?
您是大公司还是小公司的经历?内部或外部(面向客户/公众)系统?
我正在尝试使用jetty来使用maven来托管一个简单的helloworld servlet.我很困惑.
我按照这些说明操作,但是当我发出时mvn jetty:run,我收到以下错误:
[ERROR] No plugin found for prefix 'jetty' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/abc/.m2/repository), central (http://repo.maven.apache.org/maven2)]
Run Code Online (Sandbox Code Playgroud)
更令人困惑的是,当我在网上搜索一些例子时,有些人指的是org.mortbay.jetty,有些人指的是org.eclipse.jetty.我认为Eclipse版本是最新版本,不是吗?
是否有任何文档描述了maven repo上托管的每个依赖项的含义?以及如何使用它们?
修改版本号后9.0.0.v20130308,我得到一个不同的错误:
Unable to load the mojo 'run' in the plugin 'org.eclipse.jetty:jetty-maven-plugin:9.0.0.v20130308' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: org/eclipse/jetty/maven/plugin/JettyRunMojo : Unsupported major.minor version 51.0
Run Code Online (Sandbox Code Playgroud)
这是我更新的pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neon.research</groupId>
<artifactId>jetty</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>jetty …Run Code Online (Sandbox Code Playgroud) Spring 最近关于在Spring Boot项目中使用静态Web内容的博客文章(https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot)表明可以使用几个资源目录:
这要归功于WebMvcAutoConfiguration类,它自动将这些目录添加到类路径中.这一切似乎都很好,并且在使用spring-boot-maven-plugin spring-boot:run目标时似乎有效,所有静态内容都在工作(例如:/index.html).
打包Spring Boot项目并允许spring-boot-maven-plugin创建增强的JAR然后尝试使用java -jar my-spring-boot-project.jar您运行项目时发现您的静态内容现在返回404错误.
我使用Jetty-9.2.2和CometD-3.0.1.我在设置中看到以下警告.一天到来的时间约为4,5次:
2014-08-28 08:50:53.712:WARN:oejh.HttpParser:qtp607635164-15194: badMessage:
400 Illegal character for HttpChannelOverHttp@5946f125{r=1,a=IDLE,uri=-}
Run Code Online (Sandbox Code Playgroud)
没有可以从警告消息中调试的详细信息.我已经记录了一个请求https://bugs.eclipse.org/bugs/show_bug.cgi?id=443049以提供详细的警告.
同时我想知道造成这种警告的原因是什么?我可以忽略这个或因为这个而丢失了一些消息吗?