我真的很沮喪,因爲三天來我沒有在這個問題上取得任何進展。Restlet Servlet上下文總是爲空
我有一個Restlet Servlet嵌入在Tomcat v7.0服務器中。除了訪問ServletContext外,一切都按預期工作。
我的目標是讀取位於WEB-INF中的文件,位於web.xml的位置。
Deployment Resources
WebContent
log
META-INF
WEB-INF
lib
textFileToRead.txt <-----
web.xml
爲了達到這個目的,我需要訪問ServletContext。我嘗試了所有可以通過網絡找到的代碼,但是由於事實,我沒有預料到會發生什麼事情。我正在使用Restlet 2.0 je e,並且爲Restlet 1.0 jee製作了一些示例。
這裏是我嘗試訪問上下文:
Context c = this.getContext();
我調試它,並取得了變量 「c」 的從上面Screenshop:
https://www.dropbox.com/s/b31a52l3w8xifgg/context_full.PNG?dl=0
正如你可以看到「上下文」「ServerDispatcher」的變量爲空。但是有一個「componentContext」,它包含我需要的ServletContext如此糟糕。但我沒有看到有可能訪問它。
下面是一些相關信息約我的配置
的web.xml
<display-name>MyRestServer</display-name> <servlet> <servlet-name>MyServer</servlet-name> <servlet-class>org.restlet.ext.servlet</servlet-class> <init-param> <param-name>org.restlet.component</param-name> <param-value>com.example.my.server.MyMainComponent</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <context-param> <param-name>myParam</param-name> <param-value>the value</param-value> </context-param> <servlet-mapping> <servlet-name>MyServer</servlet-name> <url-pattern>/rs/*</url-pattern> </servlet-mapping>
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>MyRestServer</groupId> <artifactId>MyRestServer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>YaynoRestServer</name> <description>Maven POM von MyRestServer</description> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>maven-restlet</id> <name>Public online Restlet repository</name> <url>http://maven.restlet.com</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet.ext.servlet</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.restlet.jse</groupId> <artifactId>org.restlet.ext.json</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet.ext.jackson</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>3.0</version> </dependency> </dependencies> </project>
來源
的結構,使基本MyMainComponent創建了MyMainApplication
public class MyMainComponent extends Component {
public YaynoMainComponent() {
// Starting Application
getDefaultHost().attachDefault(new MyMainApplication(questionManager.getQuestionPool(), userManager.getUserpool()));
}
}
public class MyMainApplication extends Application {
@Override
public Restlet createInboundRoot() {
// attach routes
Router router = new Router(getContext());
//router attachments...
ComponentServerDispatcher c = (ComponentServerDispatcher) this.getContext().getServerDispatcher();
return router; //breakpoint here to read out c-variable in debugger
}
感謝您的回答。 不幸的是,它不工作,作爲變量: 表示fileContent = cr.get()也是「null」。 我嘗試了幾個傳遞給ClientResource的構造函數的URL,也沒有工作。 有沒有不同的方式來讀取本地文件到tomcat servlet中? – keltomat