можно комбинировать: трикотаж + причал + пружина - PullRequest
6 голосов
/ 24 июня 2010

Я пытаюсь создать веб-сервер с врезкой (а не Java EE) и отображать мои сервлеты RESTful, используя джерси. Я использую Spring для внедрения зависимостей и отображаю сервлеты как бины Однако, когда я пытаюсь сделать HTTP-запрос к сопоставленным сервлетам, я получаю ошибку 500 - ошибка сервера, или 404, страница не найдена.
Я не уверен, правильно ли я это делаю, и мне, вероятно, следует использовать файл jetty.xml, а не этот. (интересно, если есть ярлык с помощью jetty.xml)

</p> <pre><code><bean id="contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"> </bean> <bean id="server" class="org.mortbay.jetty.spring.Server" init-method="start" destroy-method="stop"> <property name="threadPool"> <bean id="ThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <property name="minThreads" value="10" /> <property name="maxThreads" value="50" /> </bean> </property> <property name="connectors"> <list> <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <property name="port" value="8080" /> </bean> </list> </property> <property name="handler"> <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <property name="handlers"> <list> <ref bean="contexts" /> <bean class="org.eclipse.jetty.server.handler.ResourceHandler"> <property name="directoriesListed" value="true" /> <property name="welcomeFiles"> <list> <value>index.jsp</value> </list> </property> <property name="resourceBase" value="./WebContent" /> </bean> <bean id="myServletHandler" class="org.eclipse.jetty.servlet.ServletHandler"> <property name="servlets"> <list> <bean id="jerseyServletContainer" class="org.eclipse.jetty.servlet.ServletHolder"> <property name="name" value="jersey" /> <property name="servlet"> <bean class="com.sun.jersey.spi.container.servlet.ServletContainer" /> </property> <property name="initParameters"> <map> <entry key="com.sun.jersey.config.property.resourceConfigClass" value="com.sun.jersey.api.core.PackagesResourceConfig" /> <entry key="com.sun.jersey.config.property.packages" value="servlets" /> </map> </property> </bean> </list> </property> <property name="servletMappings"> <list> <bean id="jerseyMapping" class="org.eclipse.jetty.servlet.ServletMapping"> <property name="servletName" value="jersey" /> <property name="pathSpec" value="/*" /> </bean> </list> </property> </bean> </list> </property> </bean> </property> <property name="beans"> <list> <bean id="ContextDeployer" class="org.eclipse.jetty.deploy.ContextDeployer"> <property name="contexts" ref="contexts" /> <property name="directory" value="contexts" /> <property name="scanInterval" value="5" /> </bean> </list> </property> </bean>

У меня есть один класс в пакете сервлетов: DoNothing.java


package servlets;

import javax.ws.rs.GET;

import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/nothing")
public class doNothing
{
    @GET
    @Produces("text/plain")
    public String returnNothing()
    {
        return ("test");
    }


}

что в мире я делаю не так? или я должен спросить, что в мире я делаю правильно?

Спасибо

1 Ответ

1 голос
/ 04 июля 2011

Я искал способ использовать Джерси + Spring + Embedded Jetty и нашел этот вопрос.Я попробовал ваш метод, и он на самом деле работает.

Если вы действительно хотите использовать бобы Spring в своих ресурсах, вы можете использовать jersey-spring:

<bean id="server" class="org.mortbay.jetty.Server" destroy-method="stop">
    <property name="connectors">
        <list>
            <bean id="Connector" class="org.mortbay.jetty.nio.SelectChannelConnector">
                 <property name="port" value="8080"/>
            </bean>
        </list>
    </property>
    <property name="handlers">
        <list>
            <bean class="org.mortbay.jetty.servlet.Context">
                <property name="contextPath" value="/"/>
                <property name="sessionHandler">
                    <bean class="org.mortbay.jetty.servlet.SessionHandler" />
                </property>
                <property name="servletHandler">
                    <bean class="org.mortbay.jetty.servlet.ServletHandler">
                        <property name="servlets">
                            <list>
                                <bean class="org.mortbay.jetty.servlet.ServletHolder">
                                    <property name="name" value="jersey" />
                                    <property name="servlet">
                                        <bean class="com.sun.jersey.spi.spring.container.servlet.SpringServlet" />
                                    </property>
                                    <property name="initParameters">
                                         <map>
                                         <entry key="com.sun.jersey.spi.container.ContainerRequestFilters"
                                            value="com.sun.jersey.api.container.filter.LoggingFilter" />
                                        <entry key="com.sun.jersey.spi.container.ContainerResponseFilters"
                                            value="com.sun.jersey.api.container.filter.LoggingFilter" />
                                    </map>
                                    </property>

                                </bean>
                            </list>
                        </property>
                        <property name="servletMappings">
                            <list>
                                <bean class="org.mortbay.jetty.servlet.ServletMapping">
                                    <property name="servletName" value="jersey"/>
                                    <property name="pathSpecs">
                                        <list>
                                            <value>/*</value>
                                        </list>
                                    </property>
                                </bean>
                            </list>
                        </property>
                    </bean>
                </property>
                <property name="eventListeners">
                    <list>
                        <bean id="requestContextListener" class="org.springframework.web.context.request.RequestContextListener"/>
                        <bean id="contextLoaderListener" class="org.springframework.web.context.ContextLoaderListener"/>
                    </list>
                </property>
                <property name="initParams">
                    <map>
                        <entry key="contextConfigLocation" value="classpath:META-INF/AdditionalBeansContext.xml"/>
                    </map>
                </property>
            </bean><!--
        --></list>
    </property>
</bean>

В файле AdditionalBeansContext.xml:

Затем определите свои Ресурсы с помощью: @Component annotation, добавленные bean-компоненты с @ Autowired

...