1.使用以下sql语句创建一个log表 CREATE TABLE `cskaoyan_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `operation` varchar(255) DEFAULT NULL, `ip` varchar(255) DEFAULT NULL, `add_time` datetime DEFAULT NULL, `success` tinyint(1) DEFAULT NULL, `err_msg` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4; 需要大家创建与之对应的实体类CskaoyanLog,提供的对应的成员变量 2.提供一个默认的Servlet,该默认的Servlet实现以下功能,当别人访问了一个你其他Servlet没有对应的请求的时候,记录下来 操作(URI)、客户端IP、访问时间 这些信息,然后将这个信息记录到上面的cskaoyan_log表中,需要大家更新:id、operation、ip、add_time这些字段,其余字段不需要更新
时间: 2023-09-01 12:07:29 浏览: 41
以下是对应的实体类`CskaoyanLog`:
```java
public class CskaoyanLog {
private int id;
private String operation;
private String ip;
private Date addTime;
private Boolean success;
private String errMsg;
// getter and setter methods
}
```
以下是默认的`Servlet`实现:
```java
public class DefaultServlet extends HttpServlet {
private static final Logger logger = LoggerFactory.getLogger(DefaultServlet.class);
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 记录请求信息到日志表中
CskaoyanLog log = new CskaoyanLog();
log.setOperation(request.getRequestURI());
log.setIp(request.getRemoteAddr());
log.setAddTime(new Date());
log.setSuccess(false);
log.setErrMsg("No corresponding servlet found");
insertLog(log);
// 返回404错误
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private void insertLog(CskaoyanLog log) {
// 插入日志记录到数据库
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cskaoyan", "root", "123456");
String sql = "INSERT INTO cskaoyan_log (operation, ip, add_time, success, err_msg) VALUES (?, ?, ?, ?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, log.getOperation());
pstmt.setString(2, log.getIp());
pstmt.setTimestamp(3, new Timestamp(log.getAddTime().getTime()));
pstmt.setBoolean(4, log.getSuccess());
pstmt.setString(5, log.getErrMsg());
pstmt.executeUpdate();
} catch (SQLException e) {
logger.error("Error inserting log record: {}", e.getMessage());
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
logger.error("Error closing PreparedStatement: {}", e.getMessage());
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
logger.error("Error closing Connection: {}", e.getMessage());
}
}
}
}
}
```
该`Servlet`会在收到所有未被其他`Servlet`处理的请求时被调用,记录请求信息到日志表中,并返回404错误。其中,`insertLog()`方法用于将日志记录插入到数据库中。