为什么 URI:/desktop/index.html 没有打印?
来源:3-1 多端设备自动适配
电磁护盾
2020-03-02 10:26:06
在地址栏输入localhost:8080/index.html, 只打印了两行,为什么 URI:/desktop/index.html 没有打印?



package com.imooc.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DeviceAdapterFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
/*
/index.html
PC:/desktop/index.html
MOBILE:/mobile/index.html
/test.html
PC:/desktop/test.html
MOBILE:/mobile/test.html
*/
String uri=req.getRequestURI();
System.out.println("URI:"+uri);
if(uri.startsWith("/desktop")||uri.startsWith("/mobile")) {
System.out.println("AAAAA");
chain.doFilter(request, response);
}else {
String userAgent=req.getHeader("user-agent").toLowerCase();
String targetURI="";
if(userAgent.indexOf("android")!=-1||userAgent.indexOf("iphone")!=-1) {
targetURI="/mobile"+uri;
System.out.println("移动端设备正在访问,重新跳转URI:"+targetURI);
res.sendRedirect(targetURI);
}else {
targetURI="/desktop"+uri;
System.out.println("PC端设备正在访问,重新跳转URI:"+targetURI);
res.sendRedirect(targetURI);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>device-adapter</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>DeviceAdapterFilter</filter-name> <filter-class>com.imooc.filter.DeviceAdapterFilter</filter-class> </filter> <filter-mapping> <filter-name>DeviceAdapterFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> </web-app>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <img alt="" src="/images/mobile.jpg" style="width:100%"/> </body> </html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<img alt="" src="/images/desktop.jpg"/>
</body>
</html>
2回答
好帮手慕柯南
2020-03-02
同学你好!
老师使用你的代码测试的结果:

老师这里访问的多了,也会出现只打印一次的现象。可能是由于浏览器缓存导致的。你可以移动端和pc端切换这测试一下。
祝学习愉快~
电磁护盾
提问者
2020-03-02

响应重定向,让浏览器重新发送请求,又被过滤器拦截,应该第二次执行

输出 URI:/desktop/index.html 啊
相似问题