- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个测试客户端,它发出 ReSTLet 请求,如下所示:公共(public)类 TestReSTLet {
public static void main(String[] args) throws IOException {
CookieHandler.setDefault(new CookieManager( null, CookiePolicy.ACCEPT_ALL ));
ClientResource resource = getClientResource();
Representation rep = resource.get();
System.out.println(rep.getText());
}
private static ClientResource getClientResource() {
String resouceURL = "http://localhost:8080/ActivitiSampleProject/service/process-definitions?suspended=false";
CookieSetting cookie1 = new CookieSetting("USER", "qdny6HjWY0HONvWoyufBWemrDE+5IcdsssssK0E8UGmu5RKPF7h0BWKvBPSn+Kucb82Aq");
cookie1.setDomain(".abc.com");
cookie1.setPath("/");
cookie1.setMaxAge(-1);
ClientResource resource = new ClientResource(resouceURL);
resource.getRequest().getCookies().add(cookie1);
return resource;
}
}
在服务器端,我想从请求中读取这些 cookie,并将它们发送回调用客户端,以根据 cookie 获取一些信息。
但我无法检索 cookie:我已将调试器设置为 org.reSTLet.ext.servlet.ServerServlet 的服务方法,并且请求没有 cookie。
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
.......
}
这是在请求中设置 cookie 的正确方法吗?我做错了什么?
通过使用以下代码进行一些点击和尝试后,我能够在服务器端检索 cookie。 ReSTLet的文档说ClientResource内部调用Client。有没有办法通过设置一些选项来使用 ClientResource 来实现相同的效果?我想使用 ClientResource 作为我计划引入更改的大部分代码,使用 ClientResource,所有示例源代码也使用 ClientResource。
public static void main(String[] args) throws IOException {
Client c = new Client(Protocol.HTTP);
Request request = new Request(Method.GET,
"http://localhost:8080/ActivitiSampleProjectNonSpring/service/hello");
request.getCookies().add("USER", "TESTCOOKIE");
Response response = c.handle(request);
Representation rep = response.getEntity();
System.out.println(rep.getText());
}
最佳答案
我使用以下 Maven 配置对 ReSTLet 2.3.1 进行了一些测试,并且您的用例使用独立的 ReSTLet 引擎在我这边工作。我使用了您在问题中提供的代码。您可以注意到,您需要显式添加 cookie 到响应中,才能将其发送回客户端。
这是 Maven 配置文件:
<project (...)>
<modelVersion>4.0.0</modelVersion>
<groupId>stackoverflow</groupId>
<artifactId>test-restlet-cookies</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java-version>1.7</java-version>
<restlet-version>2.3.1</restlet-version>
</properties>
<dependencies>
<dependency>
<groupId>org.restlet.jse</groupId>
<artifactId>org.restlet</artifactId>
<version>${restlet-version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.com</url>
</repository>
</repositories>
</project>
使用命令mvn eclipse:eclipse
将其转换为Eclipse Java项目或mvn package
构建相应的jar文件。
您可以在此处找到示例项目:https://github.com/templth/restlet-stackoverflow/tree/master/restlet/test-restlet-cookies .
看来您使用了ReSTLet的servlet扩展。我还对嵌入 servlet 容器中的 ReSTLet 应用程序进行了测试,它对我有用。我使用以下 Maven 文件:
<project (...)>
<modelVersion>4.0.0</modelVersion>
<groupId>stackoverflow</groupId>
<artifactId>test-restlet-cookies-servlet</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java-version>1.7</java-version>
<restlet-version>2.3.1</restlet-version>
<wtp-version>2.0</wtp-version>
</properties>
<dependencies>
<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet</artifactId>
<version>${restlet-version}</version>
</dependency>
<dependency>
<groupId>org.restlet.jee</groupId>
<artifactId>org.restlet.ext.servlet</artifactId>
<version>${restlet-version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.com</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpapplicationxml>true</wtpapplicationxml>
<wtpversion>${wtp-version}</wtpversion>
</configuration>
</plugin>
</plugins>
</build>
</project>
使用命令mvn eclipse:eclipse
将其转换为Eclipse Java项目或mvn package
构建相应的war文件。您可以注意到 Eclipse 项目符合 WTP 标准,因此您可以连接到 Eclipse 中的服务器。
您可以在此处找到示例项目:https://github.com/templth/restlet-stackoverflow/tree/master/restlet/test-restlet-cookies-servlet .
希望对你有帮助蒂埃里
关于java - ReSTLet 客户端在请求中设置的 Cookie 在 ReSTLet Servlet 结束时删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388609/
我有一个 ReSTLet (v2.1.1) 组件,它使用 ServerResource 来处理 HTTP GET 请求。 我想将过滤器和/或路由器放入组件中,以便它们可以在请求到达 ServerRes
我有一些使用 ReSTLet 框架的代码。它正在将错误写入我的 log4j 日志文件: 2012-05-30 12:16:42,169 3278917 ERROR [STDERR] (Thread-9
我需要在 ReSTLet 资源类(它扩展 ServerResource)中获取应用程序根。我的最终目标是尝试返回到另一个资源的完整显式路径。 我目前正在使用 getRequest().getResou
我正在使用 ReSTLet 来实现 Web 服务。客户端(也使用 ReSTLet)对服务器进行多次连续调用,但在少数调用成功完成后,进一步的调用挂起服务器,显示消息: INFO: Stop accep
我想创建一个 servlet 作为一堆 reSTLet 应用程序的容器。我已经为一个 reSTLet 应用程序完成了 servlet,但我不知道如何修改 web.xml 以适应许多应用程序。这是单个
我通过使用带有camel的reSTLet来公开休息服务。 我公开了一个休息服务作为一端,而在另一端我覆盖了流程方法。代码如下所示, from("restlet:/service/serviceName
我有一个 ReSTLet (2.0.10) 应用程序,我从以下代码开始: public static void main(final String[] args) { try {
这是我限制每分钟请求数量的代码: MethodAuthorizer ma = createMethodAuthorizer(); ma.setNext(router);
我无法在同一个 Java Web 应用程序中使用 ReSTLet 服务器和客户端 jar。问题是服务器和客户端的某些 jar 具有相同的名称。如果我尝试删除重复的 jar ,我会收到类似的错误 jav
我正在尝试在 RESTlet 上运行第一个服务器教程 docs但是即使我将 jars 添加到我的类路径中,我也会收到错误。我添加了 org.reSTLet.jar 和 org.reSTLet.ext.
我有一个测试客户端,它发出 ReSTLet 请求,如下所示:公共(public)类 TestReSTLet { public static void main(String[] args) throw
我已经完成了 ReSTLet 1.1 教程的第一个资源部分,并通过继承 Resource 类并覆盖适当的方法并使用一个 Router 来附加子类 Resource 类。 所以我在想 - ReSTLet
我在 tomcat 环境中使用带有 reSTLet 的 jackson 时遇到问题。正如您可以从 restlet site 中读到的那样,他们保证 jackson 扩展 provides a plug
我试图通过 reSTLet 接收文件,但只得到完整的 MULTIPART_FORM_DATA。如何提取我的特定文件? 我找到了一些代码块,但它们的类型不可用... RESTlet: How to pr
我们使用 ReSTLet 2.0.8 并有一个覆盖 org.reSTLet.Application#createInboundRoot() 的 Application 实例。在那里,我们创建 Rout
我在我的应用程序中使用 ReSTLet 2.3.5。当调用某个服务器资源的 GET 请求处理程序时,我收到以下错误: [10:26:04] [Restlet-860541310/WARN]: Nov
我想运行这些示例,但它们使用了不推荐使用的 ReSTLet API 和不存在的 db4o API。总之,不编译。 我是 ReSTLet(和 Java)的新手,所以我真的不想浪费时间尝试修复代码。我希望
首先,我检查了关于这个问题的讨论,但找不到我的问题的答案,这就是我打开这个问题的原因。 我已经使用reSTLet 2.0.15 设置了一个Web 服务。该实现仅适用于服务器。与服务器的连接是通过网页进
我有一个客户端向服务器发出请求,这可能需要一些时间才能响应。 当服务器想要回复时,它抛出以下异常: The connection was broken. It was probably closed
我是reSTLet的新手,并试图了解我应该在android上使用哪个HTTPS客户端选项。哪个 HTTPS 客户端选项对 Android 来说最强大和稳定? 我使用的是reSTLet 2.1rc4(和
我是一名优秀的程序员,十分优秀!