public class Authenticate implements Filter
{
static List<Thread> homethread = new ArrayList<Thread>();
static Queue<Thread> threadQueue = new LinkedList<Thread>();
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException
{
if(homethread.size()>=2)
{
threadQueue.add(Thread.currentThread());
while(!threadQueue.isEmpty())
{
for(Thread th : homethread)
{
if(th.getState()!=Thread.State.TIMED_WAITING)
{
homethread.remove(th);
Thread thr = threadQueue.remove();
homethread.add(thr);
chain.doFilter(request, response);
}
}
}
}
else
{
homethread.add(Thread.currentThread());
chain.doFilter(request, response);
}
}
Я выполнил приведенный выше код в фильтре, чтобы ограничить число пользователей, обращающихся к сервлету (то есть) к его домашней странице, которая появляется после входа в систему
public class Home extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter writter = response.getWriter();
writter.println
(
"<!DOCTYPE html>" +
"<html>" +
"<body>" +
"<h1 style=\"text-align:center;\">Provide Your Choice</h1>"+
"<form action=\"Upload\" method=\"POST\">" +//enctype=\"multipart/form-data\"
"<div style=\"text-align:center\">Upload File :<input type=\"file\" name=\"UploadedFile\" multiple/><input type=\"submit\" value=\"Upload\"><br><br>"+
"</form>" +
"<div style=\"text-align:center\">View Files :<input type=\"submit\" formaction=\"View\" formmethod=\"post\" value=\"View\"/><br><br>" +
"<div style=\"text-align:center\"><input type=\"submit\" formaction=\"LogOut\" formmethod=\"post\" value=\"LogOut\"/>" +
"</body>" +
"</html>"
);
response.flushBuffer();
try
{
Thread.currentThread().sleep(50000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
Показывает ответ Home Страница первым 2 пользователям Отлично. Я сохранил последующие запросы (3,4,5) в очереди, и я проверил, закончил ли какой-либо из предыдущих homethreads (1 или 2) свое состояние сна. Если это так, то я удалю пробуждаемый поток и выскакиваю 3-й поток (т. е.) отправляйтесь из очереди и дайте ему выполнить работу (т. е.), показывая домашнюю страницу 3-му пользователю и спя. Теперь, согласно моему мото, это то, что я ожидал.
Первый пользователь входит в систему.
Через 10 секунд Второй пользователь входит в систему.
Через 10 секунд третий пользователь Вход в систему и он должен быть в стадии ожидания.
Через 10 секунд 4-й пользователь входит в систему, и он должен быть в стадии ожидания.
Во время 50-й секунды 3-й пользователь должен получить ответ. (т.е.) 1-й пользователь завершил свою работу.
Во время 60-й секунды 4-й пользователь должен получить ответ. (т.е.) 2-й пользователь завершил свою работу.
Но теперь Проблема здесь заключается в том, что как 3-й, так и 4-й пользователь сам получают ответ на 50-й секунде.
Любая помощь будет настолько полезной. Заранее спасибо.