hi am создаю одно веб-приложение, в этом приложении я хочу ограничить число пользователей. Например, только 4 пользователя могут получить доступ к приложению, если оно превышает 4 пользователя, оно показывает сообщение об ошибке, такое как ограничение, до тех пор, пока ни один из 4 пользователей не выйдет из системы. если кто-либо из 4 пользователей выходит из системы, означает, что счет будет равен 3, чтобы некоторые другие пользователи могли получить доступ к приложению. Другой лучший пример: репутация на странице stackoverflow, если кто-то дает один минус, он будет отображаться на каждой странице.Мне нужно ограничить доступ пользователей к моему веб-приложению
индексная страница:
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<html>
<body>
<form method="get" action="PageHitCounter">
<input type="submit" value="Add User" />
</form>
</body>
<%
if(session.getAttribute("ht")!=null)
{
String Aht= session.getAttribute("ht").toString();
int hitCount=Integer.parseInt(Aht);
System.out.println("hit count in login"+hitCount);
session.setAttribute("hitCount",hitCount);
}
else {
int hitCount = 0;
session.setAttribute("hitCount",hitCount);
System.out.println("new session count"+hitCount);
}
%>
</html>
сервлет страницы:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//import java.sql.Date;
//import java.sql.SQLException;
//import java.util.*;
//import java.sql.*;
public class PageHitCounter extends HttpServlet{
private int hitCount;
public void init()
{
// Reset hit counter.
hitCount = 0;
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session = request.getSession();
// Set response content type
response.setContentType("text/html");
// This method executes whenever the servlet is hit
// increment hitCount
if(session.getAttribute("hitCount")!= null){
String Aht= session.getAttribute("hitCount").toString();
int hitCount=Integer.parseInt(Aht);
System.out.println(hitCount);
hitCount++;
System.out.println("after increment"+hitCount++);
if(hitCount <= 5)
{
System.out.println("if");
PrintWriter out = response.getWriter();
String title = "Total Number of Hits";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<form action='Logout.jsp'>"+
"<h1 align=\"center\">" + title + "</h1>\n" +
"<h2 align=\"center\">" + hitCount + "</h2>\n" +
"<input type='submit' value='logout'/>"+
"</body></html>");
}
}
else
{
System.out.println("else");
hitCount++;
session.setAttribute("ht", hitCount);
if(hitCount <= 4)
{
System.out.println("aa");
PrintWriter out = response.getWriter();
String title = "Total Number of Hits";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<form action='Logout.jsp'>"+
"<h1 align=\"center\">" + title + "</h1>\n" +
"<h2 align=\"center\">" + hitCount + "</h2>\n" +
"<input type='submit' value='logout'/>"+
"</body></html>");
}
}
/* else
{
destroy();
response.sendRedirect("Logout.jsp");
}*/
}
public void destroy()
{
// hitCount -= 1;
// This is optional step but if you like you
// can write hitCount value in your database.
}
}
Выход страницы:
<%
session.removeAttribute("hitCount");
//session.invalidate();
String ht1=session.getAttribute("ht").toString();
int ht2=Integer.parseInt(ht1);
System.out.println("hit count before"+ht1);
if(ht2 != 0)
{
ht2 -= 1;
System.out.println("hit count after"+ht2);
}
session.setAttribute("ht", ht2);
%>
<h2>Session Destroyed successfully.. </h2>
<a href="index1.jsp">Click here to go Back</a>
что теперь проблема утра облицовочный является счетчиком не уменьшат, так как счетчик будет в сеансе, но на странице выхода из системы мне нужно сделать недействительным сеанс, поэтому я не получу этот счет правильно. Поэтому, пожалуйста, помогите мне.
Не используйте сеанс это новое для каждого пользователя, сохранить 'hitCount' в области приложения, используя' ServletContext' общего числа всех пользователей – Arvind
@Arvind да я тоже думаю, что только один пользовательский выход из системы означает, что count хочет быть 3 пользователями, а для другого пользователя будет отображаться счетчик 3 пользователя. – 2014-09-11 07:36:34
реализовать фильтр, который обрабатывает входящий запрос, имеет счетчик для увеличения при входе и декрете при выходе из системы, если счет меньше затем 10 перенаправить на страницу входа или перенаправить на страницу с ошибкой – SparkOn