控制台莫名打印输入问题,
来源:3-1 多端设备自动适配
彤宝贝
2022-06-29 19:45:55
点击加载按钮后,我的控制台会输出一堆不符合我代码逻辑的信息。代码截图如下。
2回答
好帮手慕小尤
2022-06-30
同学你好,如下图代码中注释所示:当同学直接访问时,没有地址中没有包含pc与mobile、请求头中没有android与iphone就会执行下方代码。所以当同学直接访问项目时,会输出内容。
祝学习愉快!
彤宝贝
提问者
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并启动,浏览器端没有进行任何操作,控制台会输出以下信息,这些信息完全不符合我代码的逻辑,我没有在浏览器进行操作,这些信息是不应该打印输出的。
备注:我尝试在dofilter方法中写一些稍微复杂的代码,有时候会遇到类似的问题。
相似问题