1、 运用ServletContext, 统计网站访问次数。 2、 运用HttpServletResponse与HttpServletRequest,实现用户登录验证 3、 运用HttpSession,实现登录合法的用户,在后续浏览链接的页面都显示输出该用户名,并提供退出功能。
时间: 2024-09-22 08:02:16 浏览: 42
1. 要统计网站访问次数,你可以通过`ServletContext`来实现。首先,在`web.xml`文件中初始化一个全局变量,如`ServletContextListener`,并在监听器的`contextInitialized()`方法中设置初始值。然后,在每个请求开始前,通过`HttpServletRequest`获取到`ServletContext`,检查当前的访问次数并加一。每次响应结束,可以将结果存储回`ServletContext`中供后续访问获取。
```java
public class AccessCounter implements ServletContextListener {
private static int visitCount = 0;
@Override
public void contextInitialized(ServletContextEvent sce) {
sce.getServletContext().setAttribute("visitCount", visitCount);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// 清理逻辑,这里不做示例
}
public static synchronized int getVisitCount() {
return (Integer)sce.getServletContext().getAttribute("visitCount");
}
}
```
2. 用户登录验证通常涉及创建一个`Servlet`处理POST请求,从表单接收用户名和密码,然后与数据库对比。如果成功,使用`HttpServletResponse`设置会话属性(如`setAttribute`),表示用户已登录。对于GET请求,检查会话属性是否存在,如果存在则验证通过,否则跳转到登录页:
```java
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
String password = request.getParameter("password");
if (isValidLogin(username, password)) {
HttpSession session = request.getSession();
session.setAttribute("username", username);
response.sendRedirect("/protected");
} else {
response.sendRedirect("/login?error=invalid");
}
}
// ... 这里省略了实际的登录验证逻辑和错误处理
}
```
3. 使用`HttpSession`保持登录状态,可以在`doGet`或`doPost`方法的开头检查会话是否包含用户名。若存在,则显示用户名;否则,提示用户未登录。同时,可以添加一个注销按钮,清除会话信息:
```java
@WebServlet("/protected")
public class ProtectedServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
if (session.getAttribute("username") != null) {
String username = (String) session.getAttribute("username");
// 显示用户名...
} else {
response.sendRedirect("/");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
// ...其他业务逻辑
// 登出
request.getSession().removeAttribute("username");
response.sendRedirect("/");
}
}
```
阅读全文