控制台莫名打印输入问题,

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

彤宝贝

2022-06-29 19:45:55

点击加载按钮后,我的控制台会输出一堆不符合我代码逻辑的信息。代码截图如下。

写回答

2回答

好帮手慕小尤

2022-06-30

同学你好,如下图代码中注释所示:当同学直接访问时,没有地址中没有包含pc与mobile、请求头中没有android与iphone就会执行下方代码。所以当同学直接访问项目时,会输出内容。

https://img1.sycdn.imooc.com/climg/62bd102e09d8549012210651.jpg

祝学习愉快!

0

彤宝贝

提问者

2022-06-29

我的代码如下,

package filter;

import jakarta.servlet.FilterChain;

import jakarta.servlet.FilterConfig;

import jakarta.servlet.ServletException;

import jakarta.servlet.ServletRequest;

import jakarta.servlet.ServletResponse;

import jakarta.servlet.http.HttpFilter;

import jakarta.servlet.http.HttpServletRequest;

import jakarta.servlet.http.HttpServletResponse;


import java.io.IOException;



/**

 * Servlet Filter implementation class Test

 */

public class Test extends HttpFilter {

       

    /**

     * @see HttpFilter#HttpFilter()

     */

    public Test() {

        super();

        // TODO Auto-generated constructor stub

    }


/**

* @see Filter#destroy()

*/

public void destroy() {

}


/**

* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

*/

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest req=(HttpServletRequest) request;   

HttpServletResponse resp=(HttpServletResponse) response;

String uri=req.getRequestURI();

if(uri.startsWith("/pc")||uri.startsWith("/mobile")) {

System.out.println("明确请求访问pc端或移动端,无需跳转");

chain.doFilter(request, response);

System.out.println("明确请求访问pc端或移动端,响应成功");

}else {

String ua=req.getHeader("user-agent").toLowerCase(); 

System.out.println(ua);

String target="";

if(ua.indexOf("android")!=-1||ua.indexOf("iphone")!=-1) {

target="/mobile"+uri;

System.out.println(target);

resp.sendRedirect(target);

chain.doFilter(request, response);

System.out.println("跳转到移动端");

}else {

target="/pc"+uri;

System.out.println(target);

resp.sendRedirect(target);

chain.doFilter(request, response);

System.out.println("跳转到pc端");

}

}

}


/**

* @see Filter#init(FilterConfig)

*/

public void init(FilterConfig fConfig) throws ServletException {

}


}

xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="5.0">

  <display-name>test</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.jsp</welcome-file>

    <welcome-file>default.htm</welcome-file>

  </welcome-file-list>

  <filter>

    <display-name>Test</display-name>

    <filter-name>Test</filter-name>

    <filter-class>filter.Test</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>Test</filter-name>

    <url-pattern>*.html</url-pattern>

  </filter-mapping>

</web-app>


问题描述:将项目添加到tomcat并启动,浏览器端没有进行任何操作,控制台会输出以下信息,这些信息完全不符合我代码的逻辑,我没有在浏览器进行操作,这些信息是不应该打印输出的。

https://img.mukewang.com/climg/62bc3da609f96e4d19010998.jpg

备注:我尝试在dofilter方法中写一些稍微复杂的代码,有时候会遇到类似的问题。




下载视频          
0

0 学习 · 9666 问题

查看课程