我正在运行一个tomcat服务器,我的web.xml如下所示。我需要从Component类中获取TaskService的实例。我没有明确地创建一个Component。我相信ServerServlet类在内部创建了一个隐式Component。 我的问题是如何访问隐式的Component实例?
<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>
答案 0 :(得分:2)
是的,你是对的! 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>
希望它可以帮到你, 亨利