帮我编写JSP程序,要求是使用application 内置对象存储当前页面被访问的次数并输出到页面
时间: 2024-11-15 19:26:47 浏览: 22
在JSP中,我们可以利用`application`内置对象来实现页面访问计数的功能。下面是一个简单的示例,展示了如何在每次请求时增加计数并在页面上显示:
首先,在`web.xml`文件中配置一个名为`counter`的`session-config`元素,用于初始化应用范围的`ServletContextAttributeListener`,这将自动为我们管理计数:
```xml
<web-app>
<context-param>
<param-name>com.example.Counter</param-name>
<param-value>com.example.CounterBean</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- 其他配置... -->
</web-app>
```
然后创建一个Java Bean `CounterBean`,作为`application`作用域的存储容器:
```java
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
public class CounterBean implements ServletContextAttributeListener {
private static volatile CounterBean instance = new CounterBean();
private int visitCount = 0;
private ServletContext context;
public synchronized static CounterBean getInstance() {
return instance;
}
@Override
public void attributeAdded(ServletContextEvent sce) {
this.context = sce.getServletContext();
}
@Override
public void attributeRemoved(ServletContextEvent sce) {
// 程序启动时添加,这里不做处理
}
@Override
public void attributeReplaced(ServletContextEvent sce) {
// 旧值替换新值的情况不会发生
}
public synchronized void incrementVisitCount(HttpSession session) {
if (session != null) {
visitCount++;
session.setAttribute("visitCount", visitCount);
} else {
// 如果没有会话,则可能是第一次访问,直接在应用上下文存储
context.setAttribute("visitCount", visitCount + 1);
}
}
public int getVisitCount() {
HttpSession session = (HttpSession) request.getSession();
return (Integer) (session != null ? session.getAttribute("visitCount") : context.getAttribute("visitCount"));
}
}
```
最后,在JSP页面中通过EL表达式获取并显示计数:
```jsp
<!DOCTYPE html>
<html>
<head>
<title>访问计数</title>
</head>
<body>
您已访问此页面 <%= CounterBean.getInstance().getVisitCount() %> 次。
</body>
</html>
```
当用户访问页面时,`incrementVisitCount`方法会被调用,页面上的计数会相应增加。
阅读全文