WedX - журнал о программировании и компьютерных науках

Вызов сервлета с помощью jquery

У меня есть следующее требование

  1. на странице Login.html - Войти btn и Забыть пароль btn
  2. если Войти нажмите кнопку,
  3. Необходимо выполнить проверку текстовых полей имени пользователя и пароля.
  4. Если проверка прошла успешно - вызовите LoginServlet
  5. Если LoginServlet успешно проверяет пользователя → вызовите другой DashboardServlet
  6. Если LoginServlet проверить пользователя не удалось --> вернуть сообщение об ошибке на страницу login.html, а на странице login.html должно отображаться предупреждение или сообщение.
  7. Что работает? - работает проверка пустого текстового поля, я могу найти, какая кнопка нажата, логин или забыл пароль.
  8. Я не использую jsp-страницу, поэтому предложите решение, которое работает с html.

Я изо всех сил пытаюсь найти решение за последние 3 дня, я уже обратился за помощью к SO и другим порталам, но до сих пор не получил окончательного результата

Логин.html

<script>
function validateloginform() {
var name = document.getElementById("username").value;
var password = document.getElementById("password").value;
if (name == null || name == "") {
    alert("Please enter valid userName");
    return false;
} else if (password.length < 6) {
    alert("Password must be at least 6 characters long.");
    return false;
}else
    {return true;
    }
}
$(document).ready(function(){
    // Set a variable, we will fill later.
    var value = null;

// On submit click, set the value
$('input[type="submit"]').click(function(){
    value = $(this).val();
});

// Use the set value in the submit function
$('form').submit(function (event)
{
    event.preventDefault();
    //alert(value);
    if(value == "LOGIN")
        {
        if (validateloginform()){
            alert('i want to call LoginServlet here');
        }
    else if (value == "FORGOT PASSWORD")
        window.location.href = "ChangePassword.html"

});});//ready function
</script>

</head>
 <body background="../Images/zebra_background.jpg">
        <p id="header"> ZMC Server</p>
        <div class="combine">
        <img class="logo" src="../Images/zebra_logo.png"><br>
        <text>Welcome To</text>
        <text1>Admin Console Login Page </text1>
   <!-- onsubmit="return validateloginform();" -->
    <form action="/zmcwebadmin/loginServlet" method="post" 
         id="loginForm" name="loginform"> <!-- </form> -->

        <div class="usernameformat">
            <input type="text" name="username" class="userformat" id="username"
                placeholder="User Name"> <br> <input type="password"
                name="password" id="password" class="passformat" placeholder="Password">
        </div>

        <p class="rememberme">
            Remember me <img id="remember_me" onclick="changeRememberImage()"
                src="../Images/remember_me_off.png" width="28" height="20"
                style="float: right">
        </p><br>

        <input type="submit" class="buttonformat" value="LOGIN" id="btnlogin" name="btnlogin">

         <input
            type="submit" class="buttonformat" value="FORGOT PASSWORD" id="btnforgetpwd" name="btnforgetpwd">
    </form>


Сервер входа в систему

/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public LoginServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("I am in doGet of LoginServlet");
    response.sendRedirect("/html/Loginpage.html");
}
/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("I am in doPost of LoginServlet");
    String userName = request.getParameter("username");
    String passWord = request.getParameter("password");

    if(LoginDao.validate(userName, passWord))
    {
        HttpSession session=request.getSession();  
        if(session.isNew())
           {
            //New session creation
              session=request.getSession(true);
           }
            else
            {
               session = request.getSession(false);
            }

         //setting attribute on session
         session.setAttribute("userName",userName);
         //send request to Welcome.jsp page
         //response.sendRedirect("/Dashboard.html");
         response.sendRedirect("/zmcwebadmin/dashBoardServlet");
         response.getWriter().write(String.valueOf(userName));
         System.out.println("I have connected to DB");
    }

    else
    {
        //response.sendRedirect("error.html");
        String data = "User name and password do not match";
        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(data);
        /*RequestDispatcher rd = request.getRequestDispatcher("Loginpage.html"); -- This solution works
        rd.forward(request, response);*/
        //response.sendRedirect("Loginpage.html");

        request.setAttribute("error", "Unknown login, try again");
        doGet(request, response);

        System.out.println("I have not connected to server");
    }
 }
}

  • используйте вызов xhr/ajax для отправки формы и подтвердите с помощью существующего сервлета. И если имя пользователя и пароль верны, перенаправьте форму на стороне клиента. эта ссылка может быть полезной (отправка форм: xhr.send(FormData)) ..html5rocks .com/en/tutorials/file/xhr2 22.03.2016
  • @ damitj07 Спасибо за комментарий. Я могу отправлять данные через запрос ajax, но меня беспокоит отправка поля пароля в части «данные» в вызове ajax. 22.03.2016
  • stackoverflow.com/questions/4101440/ 22.03.2016

Ответы:


1

Основываясь на вашем заявлении, я бы предположил, что шаги 1-3 работают, и то, что вы на самом деле просите о помощи, - это шаг 4. В этом случае то, что вы ищете, кажется запросом ajax к сервлету, что-то вроде

$.ajax({
  method: "POST",
  url: "/loginServlet",
  data: { username: "username", password: "password" }
})
.success(function(){
  //do success stuff
})
.error(function(){
  //do error handling stuff
});

Если проверка пользователя прошла успешно, вы можете просто перенаправить в сервлете, используя что-то вроде

response.sendRedirect(targetUrl);

Для вашей разработки может быть полезно немного прочитать о функции jQuery.ajax. Это неплохо знать.

https://api.jquery.com/jquery.ajax/

Кроме того, если вы хотите отменить поведение отправки, может быть предпочтительнее использовать щелчок вместо отправки, то есть изменить тип кнопки на кнопку вместо отправки и либо добавить onclick в разметку кнопки, либо через jQuery.

22.03.2016

2

Привет, просто добавьте этот метод после проверки формы

 function sendForm() {
  var isUserValid =false;
  var name = document.getElementById("username").value;
  var password = document.getElementById("password").value;

  var formData = new FormData();
  formData.append('username', name);
  formData.append('password', password);

  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/zmcwebadmin/loginServlet', true);
  xhr.onload = function(e) { 

        if(this.data == name){
          isUserValid =true;
           window.location.replace("https://myapp/DashboardServlet");
         }else{
          isUserValid =false;
           alert("User name and password do not match");
         }
      };

  xhr.send(formData);
 }

Для добавления дополнительного уровня безопасности вы можете обратиться к это .

22.03.2016
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]