为什么 URI:/desktop/index.html 没有打印?

来源:3-1 多端设备自动适配

电磁护盾

2020-03-02 10:26:06

在地址栏输入localhost:8080/index.html, 只打印了两行,为什么 URI:/desktop/index.html 没有打印?

http://img.mukewang.com/climg/5e5c6c6b09e727c308320267.jpg

http://img.mukewang.com/climg/5e5c6ce309171e7e11310328.jpg

http://img.mukewang.com/climg/5e5c6eae099dbdce03380435.jpg

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

同学你好!

老师使用你的代码测试的结果:

http://img.mukewang.com/climg/5e5cdbd20966283509150404.jpg

老师这里访问的多了,也会出现只打印一次的现象。可能是由于浏览器缓存导致的。你可以移动端和pc端切换这测试一下。

祝学习愉快~

0

电磁护盾

提问者

2020-03-02

http://img.mukewang.com/climg/5e5c6fa6091cc3dd02860033.jpg

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

http://img.mukewang.com/climg/5e5c6fcc0997f08f03250027.jpg

输出   URI:/desktop/index.html    啊

 

0

0 学习 · 9666 问题

查看课程