编写一个Servlet实现网站访客计数器业务逻辑处理,要求一个客户端访问多次只统计一次,并使用EL隐含对象将统计结果输出到浏览器。 可以使用HttpServletRequest对象的getRemoteAddr方法获取客户端IP,一个IP地址代表一个用户;可使用Set或Map来存储IP并保证一个IP记录了一次,获取Set或Map的大小得到网站访客数,使用ServletContext对象存储IP数据(网站访客数)。将客户端IP和网站访客数存储到JavaBean中,并使用HttpServletRequest对象存储JavaBean对象,然后请求转发到JSP页面使用EL隐含对象获取数据并输出。
时间: 2024-03-19 22:46:27 浏览: 115
1javaweb上机报告.doc
下面是一个示例实现:
```java
import java.io.IOException;
import java.util.HashSet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
@WebServlet("/counter")
public class CounterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = getServletContext();
HashSet<String> ipSet = (HashSet<String>) context.getAttribute("ipSet");
if (ipSet == null) {
ipSet = new HashSet<String>();
context.setAttribute("ipSet", ipSet);
}
String remoteAddr = request.getRemoteAddr();
if (ipSet.add(remoteAddr)) {
// New visitor
context.setAttribute("visitorCount", ipSet.size());
}
RequestDispatcher dispatcher = request.getRequestDispatcher("counter.jsp");
dispatcher.forward(request, response);
}
}
```
```java
public class VisitorCountBean {
private int visitorCount;
private String clientIp;
public int getVisitorCount() {
return visitorCount;
}
public void setVisitorCount(int visitorCount) {
this.visitorCount = visitorCount;
}
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
}
```
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>网站访客计数器</title>
</head>
<body>
<h1>网站访客计数器</h1>
<p>当前在线访客数:<c:out value="${visitorCount}" /></p>
<p>您的IP地址:<c:out value="${clientIp}" /></p>
</body>
</html>
```
在这个示例中,我们在CounterServlet中使用ServletContext对象来存储IP数据和网站访客数。如果IP集合不存在,则创建一个新的集合并将其存储在ServletContext中。然后,我们检查客户端IP是否存在于集合中。如果不存在,则将其添加到集合中,同时增加访客数并将其存储在ServletContext中。最后,我们将请求转发到counter.jsp页面,该页面使用EL隐含对象获取存储在HttpServletRequest中的JavaBean对象,并将其输出到浏览器中。
阅读全文