如何获取组件实例
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>
希望对你有帮助,
蒂埃里
我是运行一个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>
希望对你有帮助, 蒂埃里