Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌入式jetty处理从eclipse运行但未部署的请求_Java_Spring Mvc_Jetty_Embedded Jetty - Fatal编程技术网

Java 嵌入式jetty处理从eclipse运行但未部署的请求

Java 嵌入式jetty处理从eclipse运行但未部署的请求,java,spring-mvc,jetty,embedded-jetty,Java,Spring Mvc,Jetty,Embedded Jetty,我有一个嵌入Jetty的应用程序作为web服务器来承载RESTful API。我一直在Ubuntu上用Eclipse开发它,当从IDE启动时,一切都很好。但是,当我打包应用程序并将其部署到服务器上时,Jetty不再响应请求 服务器确实在我指定的端口上打开了一个套接字,打开SpringMVC的信息日志显示我的控制器及其方法被正确映射。请求成功地打开了一个连接,但是没有数据被发送回来,事实上,请求从未发送到我的控制器代码。当我关闭应用程序时,我看到所有已建立的连接都被终止 我已经检查了Eclipse

我有一个嵌入Jetty的应用程序作为web服务器来承载RESTful API。我一直在Ubuntu上用Eclipse开发它,当从IDE启动时,一切都很好。但是,当我打包应用程序并将其部署到服务器上时,Jetty不再响应请求

服务器确实在我指定的端口上打开了一个套接字,打开SpringMVC的信息日志显示我的控制器及其方法被正确映射。请求成功地打开了一个连接,但是没有数据被发送回来,事实上,请求从未发送到我的控制器代码。当我关闭应用程序时,我看到所有已建立的连接都被终止

我已经检查了Eclipse项目的类路径上的所有库在部署时都在类路径上。我还应该检查什么来弄清楚为什么它在Eclipse中工作而在其他地方被破坏

Jetty是版本9,Java版本1.7,Spring 3.2.2

当我发出请求时,从Jetty编辑调试日志:

2013-05-06 09:40:30,214 DEBUG qtp1215430550-35-acceptor-0-ServerConnector@263676bd{HTTP/1.1}{0.0.0.0:8090} [SelectorManager.java submit]-: <Queued change org.eclipse.jetty.io.SelectorManager$ManagedSelector$Accept@1493f589>
2013-05-06 09:40:30,215 DEBUG qtp1215430550-29-selector-2 [SelectorManager.java runChange]-: <Running change org.eclipse.jetty.io.SelectorManager$ManagedSelector$Accept@1493f589>
2013-05-06 09:40:30,217 DEBUG qtp1215430550-29-selector-2 [AbstractEndPoint.java onOpen]-: <onOpen SelectChannelEndPoint@38261f82{/127.0.0.1:39895<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@4edeac9a{false,null},wf=WriteFlusher@7d15dae9{IDLE},it=30000}{null}{io=0,kio=0,kro=0}>
2013-05-06 09:40:30,220 DEBUG qtp1215430550-29-selector-2 [IdleTimeout.java checkIdleTimeout]-: <SelectChannelEndPoint@38261f82{/127.0.0.1:39895<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@4edeac9a{false,null},wf=WriteFlusher@7d15dae9{IDLE},it=30000}{null}{io=0,kio=0,kro=0} idle timeout check, elapsed: 3 ms, remaining: 29997 ms>
2013-05-06 09:40:30,221 DEBUG qtp1215430550-29-selector-2 [HttpConnection.java <init>]-: <New HTTP Connection HttpConnection@5465f4d9{IDLE},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}>
2013-05-06 09:40:30,224 DEBUG qtp1215430550-29-selector-2 [AbstractConnection.java onOpen]-: <onOpen HttpConnection@5465f4d9{IDLE},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}>
2013-05-06 09:40:30,227 DEBUG qtp1215430550-29-selector-2 [AbstractConnection.java fillInterested]-: <fillInterested HttpConnection@5465f4d9{IDLE},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}>
2013-05-06 09:40:30,229 DEBUG qtp1215430550-29-selector-2 [SelectChannelEndPoint.java updateLocalInterests]-: <Local interests updated 0 -> 1 for SelectChannelEndPoint@38261f82{/127.0.0.1:39895<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@4edeac9a{true,AC.ExReadCB@5465f4d9},wf=WriteFlusher@7d15dae9{IDLE},it=30000}{HttpConnection@5465f4d9{INTERESTED},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}}{io=1,kio=0,kro=0}>
2013-05-06 09:40:30,232 DEBUG qtp1215430550-29-selector-2 [SelectorManager.java createEndPoint]-: <Created SelectChannelEndPoint@38261f82{/127.0.0.1:39895<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@4edeac9a{true,AC.ExReadCB@5465f4d9},wf=WriteFlusher@7d15dae9{IDLE},it=30000}{HttpConnection@5465f4d9{INTERESTED},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}}{io=1,kio=0,kro=0}>
2013-05-06 09:40:30,233 DEBUG qtp1215430550-29-selector-2 [SelectorManager.java runChange]-: <Running change org.eclipse.jetty.io.SelectChannelEndPoint$1@e56eabe>
2013-05-06 09:40:30,233 DEBUG qtp1215430550-29-selector-2 [SelectChannelEndPoint.java setKeyInterests]-: <Key interests updated 0 -> 1>
2013-05-06 09:40:30,234 DEBUG qtp1215430550-29-selector-2 [SelectorManager.java select]-: <Selector loop waiting on select>
2013-05-06 09:40:30,234 DEBUG qtp1215430550-29-selector-2 [SelectorManager.java select]-: <Selector loop woken up from select, 1/1 selected>
2013-05-06 09:40:30,234 DEBUG qtp1215430550-29-selector-2 [SelectChannelEndPoint.java setKeyInterests]-: <Key interests updated 1 -> 0>
2013-05-06 09:40:30,238 DEBUG qtp1215430550-29-selector-2 [SelectChannelEndPoint.java updateLocalInterests]-: <Local interests updated 1 -> 0 for SelectChannelEndPoint@38261f82{/127.0.0.1:39895<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@4edeac9a{true,AC.ExReadCB@5465f4d9},wf=WriteFlusher@7d15dae9{IDLE},it=30000}{HttpConnection@5465f4d9{INTERESTED},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}}{io=0,kio=0,kro=1}>
2013-05-06 09:40:30,238 DEBUG qtp1215430550-29-selector-2 [SelectorManager.java runChange]-: <Running change org.eclipse.jetty.io.SelectChannelEndPoint$1@e56eabe>
2013-05-06 09:40:30,239 DEBUG qtp1215430550-29-selector-2 [QueuedThreadPool.java dispatch]-: <qtp1215430550{STARTED,2<=10<=10,i=0,q=4} dispatched AC.ExReadCB@5465f4d9>
2013-05-06 09:40:30,240 DEBUG qtp1215430550-29-selector-2 [SelectorManager.java select]-: <Selector loop waiting on select>
2013-05-06 09:40:35,88 DEBUG Scheduler-702565976 [IdleTimeout.java checkIdleTimeout]-: <SelectChannelEndPoint@238b5d33{/127.0.0.1:39894<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@1293d180{false,null},wf=WriteFlusher@269f3407{IDLE},it=30000}{HttpConnection@1e10cb60{INTERESTED},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}}{io=0,kio=0,kro=1} idle timeout check, elapsed: 29996 ms, remaining: 4 ms>
2013-05-06 09:40:35,96 DEBUG Scheduler-702565976 [IdleTimeout.java checkIdleTimeout]-: <SelectChannelEndPoint@238b5d33{/127.0.0.1:39894<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@1293d180{false,null},wf=WriteFlusher@269f3407{IDLE},it=30000}{HttpConnection@1e10cb60{INTERESTED},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}}{io=0,kio=0,kro=1} idle timeout check, elapsed: 30005 ms, remaining: -5 ms>
2013-05-06 09:40:35,99 DEBUG Scheduler-702565976 [IdleTimeout.java checkIdleTimeout]-: <SelectChannelEndPoint@238b5d33{/127.0.0.1:39894<r-l>/127.0.0.1:8090,o=true,is=false,os=false,fi=FillInterest@1293d180{false,null},wf=WriteFlusher@269f3407{IDLE},it=30000}{HttpConnection@1e10cb60{INTERESTED},g=HttpGenerator{s=START},p=HttpParser{s=START,0 of 0}}{io=0,kio=0,kro=1} idle timeout expired>

啊,9号码头的接头已经换了

从Jetty 9开始,连接器由一系列ConnectionFactory组成,它提供连接类型检测和备用

这样做是为了支持替代web连接类型的现代现实(例如TLS扩展、NPN、SPDY、WebSocket,甚至准备使用
HTTP/2.0

以下是一些嵌入式示例:

在Jetty 9中配置标准HTTP连接器

package org.eclipse.jetty.embedded;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.ServerConnector;
公共一级连接器
{
公共静态void main(字符串[]args)引发异常
{
//服务器
服务器=新服务器();
//HTTP连接器
ServerConnector http=新的ServerConnector(服务器);
http.setHost(“localhost”);
http.setPort(8080);
http.setIdleTimeout(30000);
//设置连接器
addConnector(http);
//设置处理程序
setHandler(新的HelloHandler());
//启动服务器
server.start();
join();
}
}
在Jetty 9中为SSL+NPN+SPDY/3+SPDY/2+HTTPS配置连接器链

package org.eclipse.jetty.embedded;
导入org.eclipse.jetty.server.HttpConfiguration;
导入org.eclipse.jetty.server.HttpConnectionFactory;
导入org.eclipse.jetty.server.SecureRequestCustomizer;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.ServerConnector;
导入org.eclipse.jetty.server.SslConnectionFactory;
导入org.eclipse.jetty.spdy.server.NPNServerConnectionFactory;
导入org.eclipse.jetty.spdy.server.SPDYServerConnectionFactory;
导入org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnectionFactory;
导入org.eclipse.jetty.spdy.server.http.refererPushStrategy;
导入org.eclipse.jetty.util.ssl.SslContextFactory;
公共类SpdyConnector
{
公共静态void main(字符串[]args)引发异常
{
字符串jetty_home=System.getProperty(“jetty.home”、“../../jetty-distribution/target/distribution”);
System.setProperty(“jetty.home”,jetty_home);
//服务器
服务器=新服务器();
//HTTP配置
HttpConfiguration http_config=新的HttpConfiguration();
http_config.setSecureScheme(“https”);
http_config.setSecureReport(8443);
//HTTP连接器
ServerConnector http=newserverconnector(服务器,新的HttpConnectionFactory(http_config));
http.setPort(8080);
addConnector(http);
//HTTPS和SPDY的SSL上下文工厂
SslContextFactory SslContextFactory=新的SslContextFactory();
setkeystrepath(jetty_home+“/etc/keystore”);
setKeyStorePassword(“OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4”);
sslContextFactory.setKeyManagerPassword(“OBF:1u2u1wml1z7s1z7a1wnl1u2g”);
//HTTPS配置
HttpConfiguration https_config=新的HttpConfiguration(http_config);
https_config.addCustomizer(新的SecureRequestCustomizer());
//SPDY版本
HTTPSPDYServerConnectionFactory spdy2=
新的HTTPSPDYServerConnectionFactory(2,https_配置);
HTTPSPDYServerConnectionFactory spdy3=
新的HTTPSPDYServerConnectionFactory(3,https_config,新的refererPushStrategy());
//NPN工厂
SPDYServerConnectionFactory.checknpnavaailable();
npn服务器连接工厂npn=
新的NPN服务器连接工厂(spdy3.getProtocol()、spdy2.getProtocol()、http.getDefaultProtocol());
setDefaultProtocol(http.getDefaultProtocol());
//SSL工厂
SslConnectionFactory ssl=新的SslConnectionFactory(sslContextFactory,npn.getProtocol());
//SPDY连接器
服务器连接器spdyConnector=
新的服务器连接器(服务器、ssl、npn、spdy3、spdy2、新的HttpConnectionFactory(https_配置));
spdyConnector.setPort(8443);
server.addConnector(spdyConnector);
//设置处理程序
setHandler(新的HelloHandler());
//启动服务器
server.start();
join();
}
}

我已确保我的开发环境使用与生产服务器完全相同的JRE,并且IDE类路径在服务器上运行时与类路径完全匹配。服务器运行CentOS 5.9。我发现Jetty服务器在CentOS 6.4服务器上按预期工作,按预期处理我的请求和返回。。。。在JRE和类路径相同的情况下,我的应用程序是由“java-cp$(classpath variable)com.company.project.Main”启动的。还有什么不同之处使它能够在我的Ubuntu开发环境和6.4服务器中工作,而不是5.9?没有足够的信息来支持我的应用程序
<bean id="JettyServer" class="org.eclipse.jetty.server.Server" init-method="start" destroy-method="stop">

<property name="connectors">
    <list>
        <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <property name="port" value="8090"/>
        </bean>
    </list>
</property>

<property name="handler">
    <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
        <property name="handlers">
            <list>
                <bean id="servletContextHandler" class="org.eclipse.jetty.servlet.ServletContextHandler">
                    <property name="contextPath" value="/"/>
                    <property name="servletHandler">
                        <bean class="org.eclipse.jetty.servlet.ServletHandler">

                            <property name="servlets">
                                <list>
                                    <bean class="org.eclipse.jetty.servlet.ServletHolder">
                                        <property name="name" value="DefaultServlet"/>
                                        <property name="servlet">
                                            <bean class="com.company.project.api.DispatcherServletWrapper"/>
                                        </property>
                                    </bean>
                                </list>
                            </property>
                            <property name="servletMappings">
                                <list>
                                    <bean class="org.eclipse.jetty.servlet.ServletMapping">
                                        <property name="pathSpecs">
                                            <list><value>/</value></list>
                                        </property>
                                        <property name="servletName" value="DefaultServlet"/>
                                    </bean>
                                </list>
                            </property>
                        </bean>
                    </property>
                </bean>
                <bean class="org.eclipse.jetty.server.handler.RequestLogHandler">
                    <property name="requestLog">
                        <bean class="org.eclipse.jetty.server.NCSARequestLog">
                            <constructor-arg value="/opt/company/logs/jetty-yyyy_mm_dd.log"/>
                            <property name="extended" value="false" />
                        </bean>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
</property>
</bean>
package com.company.project.api;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.GenericWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class DispatcherServletWrapper extends DispatcherServlet implements ApplicationContextAware {

    private static final long serialVersionUID = -2281511575328213502L;
    private ApplicationContext appContext;

    @Override
    public void setApplicationContext(ApplicationContext arg0)
            throws BeansException {
        this.appContext = arg0; 
    }

    protected WebApplicationContext createWebApplicationContext(WebApplicationContext arg0) {
        GenericWebApplicationContext wac = new GenericWebApplicationContext();
        wac.setParent(appContext);
        wac.refresh();

        return wac;
    }

}