如何获取组件实例

How to get hold of Component instance

我是运行一个tomcat服务器,我的web.xml如下。我需要从组件 class 获取 TaskService 的实例。我没有明确创建组件。我相信 ServerServlet class 正在内部创建一个隐式组件。 我的问题是如何访问隐式组件实例?

<servlet>
    <servlet-name>ServiceGateway</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>com.test.ServiceApplication</param-value>
    </init-param>
</servlet>

是的,你是对的! Restlet 的 servlet 扩展在后台为您创建了一个组件。

没有真正直接的方法来获取它。也就是说,您可以浏览上下文以访问其实例。

public class TestApplication extends Application {
    @Override
    public Restlet createInboundRoot() {
        // Get restlet context
        Context context = getContext();

        // Get servlet context
        ServletContext servletContext = (ServletContext) attrs.get(
                  "org.restlet.ext.servlet.ServletContext");

        // Get restlet component
        Component component = (Component) servletContext.getAttribute(
         "org.restlet.ext.servlet.ServerServlet.component.ServerServlet");

        (...)
    }
}

这是我在文件 web.xml:

中使用的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"   
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="myApplication" version="2.5">
    <display-name>My Application</display-name>

    <servlet>
        <servlet-name>ServerServlet</servlet-name>
        <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
        <init-param>
            <param-name>org.restlet.application</param-name>
            <param-value>test.RestletApplication</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>ServerServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

希望对你有帮助, 蒂埃里