Я действительно расстроен, потому что с трех дней я не делал никакого прогресса в этой проблеме.Restlet Servlet Context Always Null
У меня есть сервлет сервлета, встроенный в сервер 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();
Я отлажена его и сделал Screenshop переменной "с" сверху:
https://www.dropbox.com/s/b31a52l3w8xifgg/context_full.PNG?dl=0
Как вам может видеть «контекст». Переменная «ServerDispatcher» имеет значение null. Но есть «componentContext», который содержит ServletContext, который мне так нужен. Но я не вижу возможности получить к нему доступ.
Вот некоторые Infos о моей конфигурации
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». Я пробовал несколько URL-адресов, передаваемых в cosntructor ClientResource, также не работал. Есть ли другой способ прочитать локальный файл в сервлете tomcat? – keltomat