标签: embedded-jetty

在Jersey和嵌入式Jetty中忽略LoggingFilter

我正在尝试LoggingFilter在嵌入式Jetty设置中配置Jersey.使用的胶水代码如下:

ServletContainer servletContainer = new ServletContainer(application);
ServletHolder servletHolder = new ServletHolder(servletContainer);
servletHolder.setInitParameter("com.sun.jersey.config.feature.Debug", "true");
servletHolder.setInitParameter("com.sun.jersey.config.feature.Trace", "true");
servletHolder.setInitParameter("com.sun.jersey.spi.container.ContainerRequestFilters", 
  "com.sun.jersey.api.container.filter.LoggingFilter");
servletHolder.setInitParameter("com.sun.jersey.spi.container.ContainerResponseFilters", 
  "com.sun.jersey.api.container.filter.LoggingFilter");
Run Code Online (Sandbox Code Playgroud)

但实际上忽略了日志记录过滤器,我在控制台中看不到相关日志.我怎样才能做到这一点?在Jersey 1.x和2.x上进行了测试.

一个相关的答案描述了如何利用这个来实现web.xml.

java jersey embedded-jetty

5
推荐指数
1
解决办法
2039
查看次数

如何从Jetty Client Async API中的CompleteListener获取内容

在下面Jetty文档的示例中,描述了一种执行高效异步HTTP请求的简单方法.但是,在这个例子中,它从未指定你实际应该如何检索服务器的回复,我似乎无法弄明白.

Result对象具有getResponse()和getRequest(),但它们都没有访问内容的方法.

谁知道?


Jetty的文档

可以用这种方式编写一个简单的异步GET请求:

httpClient.newRequest("http://domain.com/path")
        .send(new Response.CompleteListener()
        {
            @Override
            public void onComplete(Result result)
            {
                // Your logic here
            }
        });
Run Code Online (Sandbox Code Playgroud)

方法Request.send(Response.CompleteListener)返回void并且不阻塞; 作为参数提供的Response.CompleteListener在请求/响应对话完成时得到通知,Result参数允许您访问响应对象.

jetty embedded-jetty

5
推荐指数
1
解决办法
2550
查看次数

将Jetty资源库设置为嵌入在同一jar文件中的静态文件

我正在尝试访问包装在同一.jar文件(testJetty.jar)中的静态资源(例如first.html),该文件也具有启动码头(v.8)服务器(MainTest.java)的类。我无法正确设置资源库。

我的jar文件(testJetty.jar)的结构:testJetty.jar

  • first.html

  • MainTest.java

==在本地计算机上工作正常,但是当我将其包装在jar文件中然后运行时,它不起作用,并出现“ 404:找不到文件”错误。

我尝试使用以下值设置资源库,所有这些都失败了:

a)尝试将其设置为。

resource_handler.setResourceBase("."); // Results in directory containing the jar file, D:\Work\eclipseworkspace\testJettyResult
Run Code Online (Sandbox Code Playgroud)

b)尝试从getResource获取它

ClassLoader loader = this.getClass().getClassLoader();
File indexLoc = new File(loader.getResource("first.html").getFile());
String htmlLoc = indexLoc.getAbsolutePath();
resource_handler.setResourceBase(htmloc); // Results in D:\Work\eclipseworkspace\testJettyResult\file:\D:\Work\eclipseworkspace\testJettyResult\testJetty1.jar!\first.html
Run Code Online (Sandbox Code Playgroud)

c)尝试获取webdir

String webDir = this.getClass().getProtectionDomain()
        .getCodeSource().getLocation().toExternalForm();
resource_handler.setResourceBase(webdir); // Results in D:/Work/eclipseworkspace/testJettyResult/testJetty1.jar
Run Code Online (Sandbox Code Playgroud)

这3种方法均无效。

任何帮助或替代将不胜感激

谢谢阿巴斯

jar jetty embedded-jetty

5
推荐指数
1
解决办法
3248
查看次数

Jetty + Programatic SPNEGO配置

我正在尝试配置嵌入式Jetty Web服务器以编程方式使用SPNEGO(不使用xml).

我试图将此转换为:http://www.eclipse.org/jetty/documentation/current/spnego-support.html到非基于xml的配置.这是我的尝试:

AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();

// ...

String domainRealm = "MY.DOMAIN.COM";

Constraint constraint = new Constraint();
constraint.setName(Constraint.__SPNEGO_AUTH);
constraint.setRoles(new String[] { domainRealm });
constraint.setAuthenticate(true);

ConstraintMapping cm = new ConstraintMapping();
cm.setConstraint(constraint);
cm.setPathSpec("/*");

SpnegoLoginService loginService = new SpnegoLoginService();
loginService.setConfig(System.getProperty("spnego.properties"));
loginService.setName(domainRealm);

ConstraintSecurityHandler sh = new ConstraintSecurityHandler();
sh.setLoginService(loginService);
sh.setConstraintMappings(new ConstraintMapping[]{cm});
sh.setRealmName(domainRealm);

ServletContextHandler contextHandler = new ServletContextHandler();
contextHandler.setErrorHandler(new ErrorHandler() { }); // TODO
contextHandler.setContextPath(contextPath);
contextHandler.addServlet(new ServletHolder(new DispatcherServlet(context)), "/*");
contextHandler.addEventListener(new ContextLoaderListener(context));
contextHandler.setSecurityHandler(sh);

Server server = new Server(port);
server.setHandler(contextHandler);
Run Code Online (Sandbox Code Playgroud)

但是,当我点击服务器时,它正在尝试使用基本身份验证(base 64). …

java jetty spnego embedded-jetty

5
推荐指数
1
解决办法
1089
查看次数

嵌入式Jetty的异步Servlet

我想构建一个在嵌入式Jetty服务器中调用异步servlet的简单示例.当我尝试从Request的AsyncContext启动Runnable时,我得到一个NullPointerException.这是服务器代码:

public static void main(String[] args) throws Exception {
    Server server = new Server(8080);
    ServletHandler handler = new ServletHandler();
    server.setHandler(handler);
    ServletHolder holder = handler.addServletWithMapping(AsyncServlet.class, "/*");
    holder.setAsyncSupported(true);
    server.start();
    server.join();
}
Run Code Online (Sandbox Code Playgroud)

这是servlet代码:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
    final AsyncContext ctxt = req.startAsync();
    ctxt.start(() -> {
        ctxt.complete();
    });
}
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪的错误:

java.lang.NullPointerException
at org.eclipse.jetty.server.AsyncContextState$2.run(AsyncContextState.java:168)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:540)
at java.lang.Thread.run(Thread.java:745) 
Run Code Online (Sandbox Code Playgroud)

也许服务器需要任何其他配置.有什么建议?

增加:相同的servlet在嵌入式tomcat中运行时没有任何变化.

asynchronous servlets jetty embedded-jetty

5
推荐指数
1
解决办法
6984
查看次数

在Spring Boot 1.2.1中使用SSL的Jetty

如何在Spring Boot 1.2.x中配置带有SSL连接器的Jetty?

以下配置适用于Spring引导1.1.6,但是为版本1.2.1 提供了"SslSocketConnector无法解析为类型"错误.

@Configuration
@EnableAutoConfiguration
public class OptosoftOAuthSecurityApplication implements
        EmbeddedServletContainerCustomizer {

    public static void main(String[] args) {
        SpringApplication.run(OptosoftOAuthSecurityApplication.class, args);
    }

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        if (container instanceof JettyEmbeddedServletContainerFactory) {
            customizeJetty((JettyEmbeddedServletContainerFactory) container);
        }
    }

    public void customizeJetty(
            JettyEmbeddedServletContainerFactory containerFactory) {
        containerFactory.addServerCustomizers(jettyServerCustomizer());
    }

    @Bean
    public JettyServerCustomizer jettyServerCustomizer() {
        return new JettyServerCustomizer() {

            @Override
            public void customize(Server server) {
                SslContextFactory sslContextFactory = new SslContextFactory();
                sslContextFactory.setKeyStorePassword("jetty6");
                try {
                    sslContextFactory.setKeyStorePath(ResourceUtils.getFile(
                            "classpath:jetty-ssl.keystore").getAbsolutePath());
                } catch (FileNotFoundException ex) {
                    throw new IllegalStateException("Could …
Run Code Online (Sandbox Code Playgroud)

ssl embedded-jetty spring-boot jetty-9

5
推荐指数
1
解决办法
2186
查看次数

如何通过SparkJava更改Jetty设置?/表格太大异常/ org.eclipse.jetty.server.Request.maxFormContentSize

我正在使用使用Jetty 9.0.2的SparkJava 2.2.

我得到Jetty抛出的"Form too large"异常.如果我直接使用Jetty,我已经知道如何解决这个问题:

形式太大例外

http://www.eclipse.org/jetty/documentation/current/setting-form-size.html

问题:

现在我需要找到一种org.eclipse.jetty.server.Request.maxFormContentSize通过SparkJava 更改设置的方法.有没有办法做到这一点?

我必须注意其他方法(JVM_OPTS,System.setProperty)由于某些原因不适合我.我仍然得到同样的例外.

堆栈跟踪:

[qtp1858644635-27] ERROR spark.webserver.MatcherFilter -
java.lang.IllegalStateException: Form too large 308913>200000
    at org.eclipse.jetty.server.Request.extractParameters(Request.java:334)
    at org.eclipse.jetty.server.Request.getParameterMap(Request.java:765)
    at javax.servlet.ServletRequestWrapper.getParameterMap(ServletRequestWrapper.java:193)
    at spark.QueryParamsMap.<init>(QueryParamsMap.java:59)
    at spark.Request.initQueryMap(Request.java:364)
    at spark.Request.queryMap(Request.java:349)
    at spark.webserver.RequestWrapper.queryMap(RequestWrapper.java:213)
    at com.xyz.analytics.webservice.RequestTools.getRequestQueryMap(RequestTools.java:27)
    at com.xyz.analytics.webservice.RequestTools.getMandrillQueryParams(RequestTools.java:22)
    at com.xyz.analytics.webservice.Endpoints.lambda$initiateEndpointsAndExceptionHandlers$2(Endpoints.java:61)
    at com.xyz.analytics.webservice.Endpoints$$Lambda$3/1485697819.handle(Unknown Source)
    at spark.SparkBase$1.handle(SparkBase.java:311)
    at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:159)
    at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:451)
    at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

编辑:

我必须注意其他方法(JVM_OPTS,System.setProperty)对我不起作用.

好吧,调试器甚至不会在任何设置的断点处停止org.eclipse.jetty.server.handlerContextHandler...加上当它在org.eclipse.jetty.server.Request断点处停止时,_context属性为null.似乎SparkJava以不同的方式处理它.死路. …

java jetty embedded-jetty spark-java

5
推荐指数
1
解决办法
3393
查看次数

如何限制Jetty中允许的活动连接数

在这里,我试图在到达servlet之前拒绝jetty服务器级别的请求.由于按照以下配置,线程池有6个最小和10个最大并行执行线程,10个请求可以在线程池中排队,其中55个请求可以在连接器级别排队.总数为85表示如果一次发送200个请求,则应拒绝115个请求.但即使我用jmeter一次发送1000个请求.Jetty服务器满足所有请求.下面是一段代码.

Server server = new Server();
QueuedThreadPool threadPool = new QueuedThreadPool();

LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(15);
ExecutorThreadPool pool = new ExecutorThreadPool(6, 10, 30000, TimeUnit.MILLISECONDS, queue);
server.setThreadPool(pool);

threadPool.setMaxThreads(AssuranceConfiguration.annetAssurancesrvConsumerThread);
server.setThreadPool(threadPool);
if (AssuranceConfiguration.annetAssurancesrvSslRequired)
{
    if (logger.isInfoEnabled())
    {
        logger.info("Going to use HTTPS, Initialising SSL context....");
    }
    SslContextFactory sslContextFactory = new SslContextFactory();
    sslContextFactory.setKeyStore(JettyServer.class.getResource(KEYSTOREFILE).getFile());
    sslContextFactory.setKeyStorePassword(AssuranceConfiguration.annetAssurancesrvKeystoreidentifier);
    sslContextFactory.setKeyManagerPassword(AssuranceConfiguration.annetAssurancesrvKeystoremanagerPassword);
    SslSelectChannelConnector sslConnector = new SslSelectChannelConnector(sslContextFactory);
    sslConnector.setPort(AssuranceConfiguration.annetAssurancesrvPort);
    server.setConnectors(new Connector[] { sslConnector });

}
else
{
    if (logger.isInfoEnabled())
    {
        logger.info("Going to use HTTP, Initialising simple context....");
    }
    SelectChannelConnector simpleConnector = new SelectChannelConnector(); …
Run Code Online (Sandbox Code Playgroud)

java sockets servlets embedded-jetty

5
推荐指数
0
解决办法
1079
查看次数

如何将CDI用于JAX-RS客户端

我已经在SO和官方文档上搜索了一段时间,但我找不到直接使用CDI注入到JAX-RS客户端的方法.

我使用构建器方法检索客户端,我想注册一个WriterInterceptor(或任何类似组件的过滤器),它使用注入来检索另一个bean.

我想使用CDI注入并避免使用HK2注册每个bean.

ClientBuilder.newBuilder()
            .register(MyWriter.class)
            .build();
Run Code Online (Sandbox Code Playgroud)

和MyWriter一起注入类.

@Provider
public class MyWriter implements WriterInterceptor {
    private final MyRepo repo;

    @Inject
    public MyWriter(MyRepo repo) {
        this.repo = repo;
    }

    @Override
    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
        context.proceed();
    }
}

public class MyRepo {

}
Run Code Online (Sandbox Code Playgroud)

我在泽西2和Weld SE的嵌入式码头上跑步.

jax-rs jersey embedded-jetty cdi weld

5
推荐指数
1
解决办法
784
查看次数

如何使Javalin的Jetty http服务器绑定/监听特定的地址/端口?

使用Javalin.create().port(portNumber)设置监听端口,但是尚不清楚如何设置监听/绑定地址。

java jetty embedded-jetty kotlin javalin

5
推荐指数
1
解决办法
128
查看次数