Сервлет Java и JQuery AJAX - невозможно получить объект из сеанса - PullRequest
0 голосов
/ 21 декабря 2018

Не уверен, как решить эту проблему, нужна помощь здесь.

Вызов Ajax переносит информацию о пользователе в сервлет, я сохраняю объект пользователя в HttpSession, и управление возвращается в Ajax, откуда я перенаправляю управление на следующую страницу JSP через сервлет контроллера.Тем не менее, если я пытаюсь получить объект из HttpSession, это ноль .. не знаю, как решить эту проблему.

вот мой код для firstservlet:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // get values from http request
    // persist "user" object to database 

    HttpSession session = request.getSession();    //
    session.setAttribute("user", user);            //setting session variable

        Gson gson = new Gson();
        JsonElement jsonElement = null;
        jsonElement = gson.toJsonTree("/nextservlet");
        response.setContentType("text/plain");
        PrintWriter out=response.getWriter();


}

вот мой код Javascript / AJAX для перенаправления запроса на следующий сервлет

    $.ajax({
                type: 'POST',
                url: ‘firstservlet’,       
                dataType: 'json',
                contentType: 'application/json',
                data: JSON.stringify(quiz),


                success: function(result) {
                  //result = /nextservlet 
                  window.location.href = result;


                },
                error:function(data,status,er) {
                    console.log("Error:",er);
                }
              });

и, наконец, управление переходит к следующему сервлету -где я хотел бы обработать данные и затем показать новую страницу JSP.

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/plain");
    response.setCharacterEncoding("UTF-8");

    HttpSession session = request.getSession();
    User user = session.getAttribute(“user”);        //<--- this is NULL

    LOG.warning("User id is  : " + user.getId());    //<--- hence error here

    RequestDispatcher dispatcher = request.getRequestDispatcher 
    ("/anotherpage.jsp");
    dispatcher.forward(request, response);

}

проблема, потому что я использую -> window.location.href = result для отправки запроса в следующий сервлет.. и это идет, чтобы сделать Get ??

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

18.12.22

я не уверен ... но попробуйте

success: function(result) {
    // result = /nextservlet
    var form = document.createElement('form');
    form.action = result;
    form.method = 'GET'
    form.submit();
}

18.12.26

Javascript

$.ajax({
    type: 'POST',
    url: '/firstservlet',
    dataType: 'json',
    contentType: 'application/json',
    data: JSON.stringfy(quiz),
    success: function(result) {
        console.info(result);
        var form = document.createElement('form');
        form.action = result;
        form.method = 'GET';
        document.body.appendChild(form);
        form.submit();
    },
    error: function(data, status, err) {
        console.log("Error: ", err);
    }
});

Servlet

HttpSession session = request.getSession();
session.setAttribute("test", "test");

Gson gson = new Gson();
JsonElement jsonElement = gson.toJsonTree("/nextservlet");
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.print(gson.toJson(jsonElement));

Он может прочитать атрибут сессии в методе doGet, попробуйте.

0 голосов
/ 22 декабря 2018

Я не уверен, но вижу в Ajax

url: ‘firstservlet’, 
type: 'POST'

и управление переходит к методу doGet следующего сервлета.Это должен быть следующий сервлет метода post, поэтому используйте метод doPost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...