我有一个servlet来处理某些HTTP请求和响应.我想在发送回客户端之前记录响应正文.有没有什么办法可以在HttpServletResponse从servlet 作为对象发送之前捕获响应主体?
有什么办法可以在服务器端捕获生成的动态内容,并将相同的文件或字符串对象提供给servlet.
我们可以使用JSP生成动态内容,但是我们无法访问服务器端生成的动态内容.我们一旦转发容器生成动态内容并将其发送到响应.
我需要访问服务器端生成的动态内容.
任何帮助将不胜感激.
我意识到这是一个鸡和蛋的问题,并且不可能准确地解决呈现页面所花费的时间(或响应的大小)并将该数字插入页面本身而不影响任何一个度量.不过,我正在寻找一种方法来将一个数字部分插入JSF/Facelets/Seam应用程序的页面中.
例如,在某个地方的.jsf页面的底部:
<!-- page size: 10.3Kb -->
<!-- render time: 0.2s -->
Run Code Online (Sandbox Code Playgroud)
我遇到过JSFUnit的JSFTimer,非常方便.但是,相位侦听器方法不允许将RENDER_RESPONSE阶段的结果插入到页面中.不知道如何访问目前为止编码的响应的大小.
在RENDER_RESPONSE结束时或之后是否有一种快速而肮脏的方式来连接某种后处理事件,并将这两个数字注入到即将呈现的页面中?接近这个的一种方法可能是通过servlet过滤器,但我正在寻找更简单的东西; 也许是Seam或Facelets的一招
谢谢,
-A
看起来像一个愚蠢的问题,答案是"不要使用encodeURL()!" 但是我正在使用在JSP中使用netui锚标签的代码库,我需要禁用将JSESSIONID写入URL,因为这是一个安全风险.
在WebLogic中,您可以通过在weblogic.xml中配置url-rewriting-enabled来配置它(我知道,因为我在WebLogic服务器中编写了该功能!).但是,我找不到Tomcat的等效配置选项.
我想Expires为所有image/*和设置标题text/css.我正在这样做Filter.然而:
chain.doFilter(..)Content-type 之前还没有"实现"chain.doFilter(..)Content-type 后,内容长度也是如此,禁止添加新标题(至少在Tomcat实现中)我可以使用所请求资源的扩展,但由于某些css文件是由richfaces通过从jar文件中获取而生成的,因此文件的名称不是x.css,但是/xx/yy/zz.xcss/DATB/....
那么,有没有办法在提交响应之前获取Content-type.
我将Jetty服务器配置为允许跨域http请求(allowedOrigins =*),并使用其CrossOriginFilter允许跨域身份验证(allowCredentials = true).没有身份验证要求的跨域http请求正常工作.现在谈到需要身份验证的http调用时,使用JQuery无法解决问题.我使用以下代码并遵循此示例:http://www.aswinanand.com/2009/01/http-basic-authentication-using-ajax/
function login(username, password) {
$.ajax({
type: "GET",
contentType: "application/json",
dataType: "json",
url: url,
beforeSend: function(xhr) {
var base64 = Base64.encode(username + ":" + password);
xhr.setRequestHeader("Authorization", "Basic " + base64);
xhr.withCredentials = true;
},
error: function(data){
alert("error");
},
success: function(data){
alert("success");
}
});
Run Code Online (Sandbox Code Playgroud)
在HTTPFox中,我看到以下对服务器的请求:
OPTIONS /login HTTP/1.1
...
Access-Control-Request-Method GET
Access-Control-Request-Headers authorization,content-type
Run Code Online (Sandbox Code Playgroud)
服务器以a响应
HTTP/1.1 204 No Content
...
Allow OPTIONS,GET,HEAD
Run Code Online (Sandbox Code Playgroud)
我也使用下面的选项,这没有什么区别.
$.ajax({
...
username: username,
password: password,
...
}
Run Code Online (Sandbox Code Playgroud)
错误功能始终触发.有谁知道问题可能是什么?
我有一个带有 doFilter 方法的过滤器类。在doFilter方法中,我设置了一个cookie如下
HttpServletResponse httpResp=(HttpServletResponse)servletResponse;
Cookie myCookie=new Cookie("test","");
myCookie.setValue("testValue");
myCookie.setPath("/");
myCookie.setDomain(".mydomain.com");
httpResp.addCookie(myCookie);
filterChain.doFilter(servletRequest,servletResponse);
Run Code Online (Sandbox Code Playgroud)
这应该理想地工作吗?在 httpResp(HttpServletResponse) 对象中设置 cookie,然后只转发 servletResponse(ServletResponse) 对象
奇怪的是,cookie 是为一些客户端设置的,但对于其他一些客户端,cookie 没有设置。我检查了客户端浏览器上的 cookie 设置,看起来没问题。
我正在寻找一种方法来检查a的内容,HttpServletResponse用MD5哈希对它们进行签名.
伪代码可能看起来像这样
process(Response response, Request request){
defaultProcessingFor(response,request);
dispatcher.handle(response,request);
// Here I want to read the contents of the Response object (now filled with data) to create a MD5 hash with them and add it to a header.
}
Run Code Online (Sandbox Code Playgroud)
那可能吗?
我正在尝试确保来自基于Jersey的java应用程序的所有JSON响应都在其ContentType标头中附加了UTF-8字符编码参数.
所以,如果它是一个JSON响应,我想响应报头的Content-Type要
Content-Type:application/json; charset = UTF-8
EDIT: I know I can do this on a case by case basis, but I'd like to do it globally, so it affects all content responses that have a content type of "application/json".
如果我只是尝试在我的过滤器中设置字符编码,无论内容类型如何,它都可以正常工作.但是我只想在ContentType为"application/json"时设置字符编码.我发现response.getContentType()方法总是返回null,除非我先调用chain.doFilter.但是如果我在此之后尝试更改字符编码,它似乎总是会被覆盖.
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ws.rs.core.MediaType;
public class EnsureJsonResponseIsUtf8Filter implements Filter
{
private class SimpleWrapper extends HttpServletResponseWrapper
{
public SimpleWrapper(HttpServletResponse response)
{
super(response);
}
@Override
public String getCharacterEncoding()
{
return "UTF-8";
}
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我知道v3.0有方法getHeader()但2.3怎么样?也许有可能从蒸汽中获得?
更新:
实际上,我需要HTTP响应头RESTful应用程序.出于某种原因,我已决定在servlet过滤器中执行此操作...但没有成功...解决方案@javax.ws.rs.core.Context HttpHeaders requestHeaders.
例如,
@javax.ws.rs.GET
public String invoceRestMethod(@Context HttpHeaders requestHeaders){
MultivaluedMap<String, String> map = headers.getRequestHeaders();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
// processing header....
}
}
Run Code Online (Sandbox Code Playgroud)
也许会帮助某人.但无论如何,对于Servlet问题仍然是开放的
java ×9
servlets ×7
http ×2
httpresponse ×2
tomcat ×2
content-type ×1
cookies ×1
cross-domain ×1
filter ×1
hash ×1
java-ee ×1
jersey-2.0 ×1
jetty ×1
jquery ×1
jsf ×1
jsp ×1
servlet-2.5 ×1
session ×1