请用监听器来实现获取请求访问的资源地址、请求用户的名称的功能。 要求: (1)若未登录,用户名称为“游客”。 (2)将请求访问的资源地址和用户名称显示在控制台的日志信息里
时间: 2024-02-15 07:02:54 浏览: 13
好的,可以使用 Servlet 的 Filter 来监听请求,获取请求访问的资源地址和请求用户的名称。具体实现如下:
```java
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestUrl = httpRequest.getRequestURL().toString(); // 获取请求的地址
String userName = httpRequest.getRemoteUser(); // 获取请求用户的名称
if (userName == null) {
userName = "游客";
}
System.out.println("请求访问的资源地址:" + requestUrl + ",请求用户的名称:" + userName);
chain.doFilter(request, response); // 继续执行过滤器链
}
@Override
public void destroy() {
// 销毁
}
}
```
然后在 web.xml 文件里配置 Filter:
```xml
<filter>
<filter-name>loggingFilter</filter-name>
<filter-class>LoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loggingFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 拦截所有请求 -->
</filter-mapping>
```
这样,当用户访问任何一个资源时,都会在控制台输出相应的日志信息,包括请求访问的资源地址和请求用户的名称。