Общее описание
Несколько дней назад я случайно подумал об этой проблеме и чувствовал, что это довольно практично, и было необходимо разобраться. Не очень трудно написать простой режим случайно. На самом деле довольно просто выпрямить идею.
Чтобы понять, что пользователи не могут войти в систему одновременно, просто подумайте о Sina, Baidu и т. Д. На самом деле просто войдите в одно место и «сжимайте» другое место, и вы можете знать, что такое результат реализации. Затем измените его, и вы можете сформировать более четкую идею. Давайте обсудим это вместе.
Прежде всего, мы должны понимать, какой логин используется пользователями для входа в систему, то есть принцип пользователей в Интернете. Это просто хранение объекта пользователя в сеансе, а затем вызов его в кадре, и другие конкретные страницы могут быть непосредственно упомянуты. Затем функция «сжимать вниз» состоит в том, чтобы сделать вновь сгенерированный сеанс эффективным и сделать сеанс, изначально хранящийся в пользователе. На данный момент общая идея была создана. Так как это достичь?
Если вы хотите знать, как его реализовать, вы должны понимать процесс хранения пользовательских объектов в сеансе. После входа пользователя мы можем получить пользователя объекта пользователя и session.setAttribute(key,value); Мы храним пользовательский идентификатор пользователя или другой уникальный идентификатор в качестве ключа и сохраняем объект пользователя в качестве значения. Таким образом, вы можете позвонить единственному пользователю в любое время. Проблема хранения пользователя была решена, как насчет проблемы отмены сеанса при входе в систему?
Это на самом деле не сложно. У нас может быть больше характеристик сеанса, точно так же, как использование карты для хранения идентификации пользователя в качестве ключа, и сохранить соответствующий сеанс в качестве значения. Затем, когда пользователь входит в систему неоднократно, вам нужно только взять соответствующий сеанс и аннулировать его.
На этом этапе идея реализации была ясной. После так долго все с нетерпением ждут читать код, верно? Вот код:
Предварительная подготовка, интерфейс JSP
Интерфейс прост, просто простой интерфейс входа в систему
<form action = "<%= request.getContextPath ()%>/userwxplyervlet" method = "post"> username š <input type = "text" name = "username"/> <br/> пароль <input type = "text" name = "Пароль"/> <br/> <input type = "vadue ="/> </form>
Перейти на страницу после успеха
Добро пожаловать: ${sessionScope.user.username}登陆!<br/>
Я не написал неудавшуюся страницу, вы можете написать ее самостоятельно, и нечего сказать о неудачной странице.
Реализация сущности и входа в систему
Пользовательский Javabean
частное имя пользователя; Private String Password; public user () {} public user (String user, String password) {super (); this.username = user; this.password = пароль; } public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public String getPassword () {return пароль; } public void setPassword (String password) {this.password = password; }Войдите в метод реализации службы пользователя, поэтому я не буду писать здесь DAO и интерфейс, все просто
public boolean domain (пользователь пользователя) {Properties pro = new Properties (); InputStream IS = userWXPSERVLET.CLASS.GETCLASSLOALER (). GetResourCeasStream ("user_wxp.properties"); String password = null; System.out.println (is+"--------->"+pro); if (user == null) {return false; } try {pro.load (is); пароль = pro.getProperty (user.getUsername ()); if (user.getPassword ()! = null && user.getPassword (). equals (password)) {System.out.println ("Вход успешно"); вернуть истину; }} catch (ioException e) {e.printstacktrace (); } наконец {if (is! = null) {try {as.close (); } catch (ioException e) {e.printstackTrace (); }} вернуть false; }Верните True, если вход в систему успешно, и ложь, если он не удается.
Сервлет и соответствующие классы логических инструментов
Следующий код - это реальный код для работы пользователя
Я определил два класса здесь, один класс инструментов и один класс обработки сервлета
Некоторые общие элементы добавляются в класс инструментов, такие как следующий код:
/*** Каждый пользователь хранит сеанс. Легко работать всеми способами! ! ! */ public Static Map <String, httpsession> mapsession = new Hashmap <String, httpsession> (); Код выхода пользователя (должен лететь, чтобы отменить сеанс или удалить соответствующий объект пользователя): [java] Просмотреть простой Copypublic static void userlogout (string username) {if (mapsessess.get (username)! = Null) {// Получить сеанс пользователя, которому нужно вывести httpsession session = mapsession.get (username); // Удалить пользователя в карте <имя пользователя, сеанс>. Не забудьте выйти из пользователя, вы должны отменить сеанс или удалить пользовательскую карты. РЕМОВА (Имя пользователя); // Получить сбор атрибутов перечисления сеанса e = session.getattributeNames (); // Удалить все атрибуты while (e.hasmoreElements ()) {String sessionName = (string) e.nextElement (); session.removeattribute (sessionname); } // Отменить сеанс сеанса.invalidate (); }}Код сервлета выглядит следующим образом:
Protected void Doget (httpservlectrequest, httpservletresponse response) Throws servletexception, ioexception {String username = request.getParameter ("username"); String password = request.getParameter ("пароль"); Пользователь пользователь = новый пользователь (имя пользователя, пароль); Userservice userservice = new userservice (); Httpsession session = request.getsession (); if (userservice.dologin (user)) {// После входа в систему вставьте пользователя в сеанс сеанса.setattribute («Пользователь», пользователь); if (cheacksession (username)) {// Если сеанс уже существует до этого, выйдите из пользователя dbutil.userlogout (имя пользователя); } // Хранение новое сеанс в карте <Имя пользователя, сеанс> dbutil.mapsession.put (имя пользователя, сеанс); // После успешной операции, прыжок, лучше всего перенаправить здесь, чтобы другие знали, что логин был успешным запросом. GetRequestDispatcher («Вход»). возвращаться ; } // Пропустите страницу сбоя здесь. Если читатели заинтересованы, они могут добавить это самостоятельно}Код проверки (имя пользователя) выглядит следующим образом:
/** * Проверьте, является ли этот сеанс уже содержатся * @param username * @return true: он уже существует, его следует удалить! false: не присутствовать */ private boolean checkessession (string username) {httpsession session = dbutil.mapsession.get (username); if (session! = null) {return true; } вернуть false; }Наконец, прикрепите конфигурацию XML сервлета
<Servlet> <sociding> Для тестирования пользователи не могут войти в систему многократно </description> <Silamname> userwxpservlet </display-name> <servlet-name> userwxpservlet </servlet-mame> <servlet-class> com.fingard.rabbit.wxp_test.servlet.userwxerserverer </servlet-rabsle> </servlet-mer-mer-mer-mer-marlep <servlet-name> userwxpservlet </servlet-name> <url-pattern>/userwxpservlet </url-pattern> </servlet-mapping>
Выше приведено функция Java, которую редактор внедрил вам для реализации функции входа в систему без повторного замены пользователей. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!