我有RESTful Web服务,该服务由javascript使用。该服务返回的内容类型为“ application /
json”。但是,对于IE,内容类型必须为“ text /
html”。因此,当检测到IE作为客户端时,我编写了一个过滤器和包装程序来更改内容类型。我的逻辑似乎对内容类型没有影响。我究竟做错了什么?
过滤器:
public class IE8Filter implements Filter {
private Logger logger = LoggerHelper.getLogger();
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String userAgent = request.getHeader("User-Agent");
logger.debugf("User Agent = '%s'", userAgent);
IE8FilterResponseWrapper wrapper = new IE8FilterResponseWrapper(response);
chain.doFilter(req, wrapper);
if (userAgent.contains("MSIE 8") || userAgent.contains("MSIE 7")) {
wrapper.setContentType("text/html");
logger.debugf("Content Type = '%s'", wrapper.getContentType());
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {}
}
包装器:
public class IE8FilterResponseWrapper extends HttpServletResponseWrapper {
private String contentType;
public IE8FilterResponseWrapper(HttpServletResponse response) {
super(response);
}
public void setContentType(String type) {
this.contentType = type;
super.setContentType(type);
}
public String getContentType() {
return contentType;
}
}
我找到了答案。诀窍是防止我的Web服务使用包装器设置内容类型:
public class IE8FilterResponseWrapper extends HttpServletResponseWrapper {
public IE8FilterResponseWrapper(HttpServletResponse response) {
super(response);
}
public void forceContentType(String type) {
super.setContentType(type);
}
public void setContentType(String type) {
}
public void setHeader(String name, String value) {
if (!name.equals("Content-Type")) {
super.setHeader(name, value);
}
}
public void addHeader(String name, String value) {
if (!name.equals("Content-Type")) {
super.addHeader(name, value);
}
}
public String getContentType() {
return super.getContentType();
}
}
现在我的过滤器如下所示:
public class IE8Filter implements Filter {
private Logger logger = LoggerHelper.getLogger();
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String userAgent = request.getHeader("User-Agent");
logger.debugf("User Agent = '%s'", userAgent);
IE8FilterResponseWrapper wrapper = new IE8FilterResponseWrapper(response);
if (userAgent.contains("MSIE 8") || userAgent.contains("MSIE 7")) {
wrapper.forceContentType("text/html");
chain.doFilter(req, wrapper);
}
else {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {}
}
我不确定这是否是打算使用包装器的方式,但确实可行。
我有下面的servlet过滤器。
问题内容: 我的Android应用程序具有登录屏幕,并且用户登录到他的仪表板。但是我不希望用户每次关闭应用程序并启动时都进行登录(除非他们从仪表板上注销)。因此,我创建了一个类来检查用户是否登录 CheckLoggedIn.java 当用户登录时,我将布尔值更改为,并在注销时更改。但是,当我通过成功登录并关闭并再次启动进行检查时,它仍然进入LoginActivity。为什么? 编辑:现在,我明白这
问题内容: Servlet和Filter有什么区别?您建议使用什么来授权页面? 问题答案: 当你要根据特定条件过滤和/或修改请求时,请使用。使用时要控制,预处理和/或后处理请求。 在Java EE的教程中提到有关筛选如下: 筛选器是可以转换请求或响应的标头和内容(或两者)的对象。过滤器与Web组件的不同之处在于,过滤器本身通常不会创建响应。相反,过滤器提供的功能可以“附加”到任何类型的Web资源。
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。 Servlet 过滤器是可用于 Servlet
问题内容: 我正在为我的Android手机构建一个小型应用程序,以使用非常基本的REST界面将短信转发到网络服务器。 我正在使用android 4.0.3 SDK。我使用Django和Django restframework包在python中开发了Web服务。设置完全是开箱即用的。基本上有一个端点可以接收包含消息信息(发送者,正文,日期)的JSON对象的POST。我已经使用cURL通过以下命令测试
有没有办法以。x容器?我需要在提供服务的同时提供静态资源,因此需要使用或仅在根据Javadoc作为过滤器运行时工作 该属性仅在Jersey servlet容器配置为作为javax运行时适用。servlet。筛选,否则将忽略此属性。 我想彻底摆脱 并且在我的定制类中拥有所有内容 不幸的是,官方留档(https://jersey.java.net/documentation/latest/deploy