Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 如何使用OSGi声明性服务正确实现servlet?_Java_Eclipse_Servlets_Osgi_Declarative Services - Fatal编程技术网

Java 如何使用OSGi声明性服务正确实现servlet?

Java 如何使用OSGi声明性服务正确实现servlet?,java,eclipse,servlets,osgi,declarative-services,Java,Eclipse,Servlets,Osgi,Declarative Services,我正在尝试(学习如何)使用OSGi提供的声明性服务(DS)创建Servlet(javax.Servlet.Servlet),如下所示: import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest;

我正在尝试(学习如何)使用OSGi提供的声明性服务(DS)创建Servlet(
javax.Servlet.Servlet
),如下所示:

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.osgi.service.component.annotations.Component;

@Component(service = Servlet.class, property = { "alias:String=/hello" }, immediate = true)
public class LogsHTTPServlet extends HttpServlet {

    private static final long serialVersionUID = 2302372200114479484L;

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            resp.setContentType("text/plain");
            resp.getWriter().println("It works!");
        } catch (Exception e) {
            e.printStackTrace();
        }
        resp.setStatus(200);
    }
}
当我在(2019-03(4.11.0),build id:20190314-1200)上运行时,我使用(
-Dorg.osgi.service.http.port=8080
)在osgi控制台中看到如下内容:

osgi> 2019-05-07 18:22:28.236:INFO::Start Level: Equinox Container: 0d7d3d67-401b-48eb-b016-6e6c0c16352c: Logging initialized @1590ms to org.eclipse.jetty.util.log.StdErrLog
2019-05-07 18:22:28.388:INFO:oejs.session:Start Level: Equinox Container: 0d7d3d67-401b-48eb-b016-6e6c0c16352c: DefaultSessionIdManager workerName=node0
2019-05-07 18:22:28.388:INFO:oejs.session:Start Level: Equinox Container: 0d7d3d67-401b-48eb-b016-6e6c0c16352c: No SessionScavenger set, using defaults
2019-05-07 18:22:28.389:INFO:oejs.session:Start Level: Equinox Container: 0d7d3d67-401b-48eb-b016-6e6c0c16352c: node0 Scavenging every 660000ms
2019-05-07 18:22:28.427:INFO:oejs.session:Start Level: Equinox Container: 0d7d3d67-401b-48eb-b016-6e6c0c16352c: node0 Scavenging every 660000ms
现在,当我使用(
http://127.0.0.1:8080/hello
)我得到:


错误404 ProxyServlet:/hello
HTTP错误404
访问/hello时出现问题。原因:
@Component(service = Servlet.class, property = {"osgi.http.whiteboard.servlet.pattern=/hello/*" })
ProxyServlet:/hello




如何解决此问题?

使用
osgi.http.whiteboard.servlet.pattern
属性代替
别名

@Component(service=Servlet.class)
@org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern("/hello/*")
或者,对于当前的osgi概要依赖项(版本7.0.0),您可以使用
@org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern
注释,如下所示:


请参见此处包含所有属性的表:
@Component(service=Servlet.class)
@org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern("/hello/*")