servlet 全局配置打印请求参数、请求方式、请求路径、sql的代码
时间: 2023-09-30 12:02:05 浏览: 92
以下是一个示例的 Servlet 全局配置文件,可以打印请求参数、请求方式、请求路径、SQL:
```java
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
@WebFilter("/*")
public class ServletGlobalConfig implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化方法,可以留空
}
@Override
public void destroy() {
// 销毁方法,可以留空
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String method = req.getMethod();
String url = req.getRequestURL().toString();
String query = req.getQueryString();
String params = "";
if (StringUtils.isNotBlank(query)) {
params = "?" + query;
}
System.out.println(String.format("[%s] %s%s", method, url, params));
chain.doFilter(request, response);
printSql(); // 打印 SQL
}
private void printSql() {
Connection conn = null;
try {
conn = getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT * FROM mytable");
ps.executeQuery();
System.out.println("SQL: " + ps.toString());
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
private Connection getConnection() throws SQLException {
// 获取数据库连接的方法
return null;
}
}
```
这个 Servlet 全局配置会拦截所有的请求,并在请求开始时打印请求参数、请求方式、请求路径,请求结束时打印执行的 SQL 语句。
需要注意的是,这个示例的 SQL 语句是写死的,实际情况下应该根据业务需要动态生成 SQL 语句。同时,为了避免 SQL 注入等安全问题,应该使用 PreparedStatement 等安全的方式来执行 SQL。
阅读全文