2013-12-12 3 views
0

Jsp/servlets кажется намного более утомительным, чем я ожидал. Я пытаюсь вызвать функцию сервлета через ajax и на самом деле попросить его вернуть некоторые данные обратно в мой интерфейс, который является файлом jsp.Получение данных из сервлета в ajax?

Этот код возвращает мой ответ как null.

Это часть моего сервлета. Я пытаюсь (отчаянно, как это видно из кода), чтобы он что-то послал - что-то обратно в ajax.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String action = (String) request.getParameter("action"); 
if (action.equalsIgnoreCase("selectedhotel")) 
    { 

     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8"); 
     System.out.println("test"); 
     String attribute = (String) request.getParameter("hotel_id"); 
     System.out.println(attribute); 
     List<Room> aRooms; 
     aRooms = model.getRoomByHotel(Integer.valueOf(attribute)); 
     request.setAttribute("aRooms", aRooms); 
     request.setAttribute("list", list); 
     PrintWriter outPrintWriter = response.getWriter(); 
     outPrintWriter.write("ASDSADA"); 
      outPrintWriter.println("test"); 
    } 

И Аякса из моего JSP:

$(function(){ 
$("#hotelSelector li").click(function(){   
    var hid = $(this).attr('id'); 

    $.ajax({ type: "GET", 
     url: "AppController?action=selectedhotel&hotel_id=1", 
     success : function(text) 
     { 
      alert(text); 
      // This will show the values. Change "alert" for $('div#mydiv').html(value) or so 
     } 
    }); 
}); 
});</script> 

Riiight ... так, пожалуйста, исправить?

+3

думать о АЯКС запроса, как ничем не отличаются, чем обычный запрос HTTP, как если бы вы перешли на службу в вашем браузере, потому что все это действительно так. –

+0

Oook? На самом деле это не решает мою проблему. –

+1

Моей целью является создание вашего сервлета, как если бы это была простая веб-страница приветствия, а затем оттуда. Если вы просто пытаетесь сделать что-то выходным, удалите все, кроме кода, который выводит что-то. Как только вы выясните, как это работает, начните добавлять назад по частям, пока не найдете то, что не удалось. Есть ли журналы ошибок, которые вы могли бы посмотреть на ошибки сервера? Я не слишком хорошо знаком с java, поэтому я не могу сильно помочь с возможными синтаксисами кода. –

ответ

1

Как уже упоминалось, вам действительно нужно начинать с малого и работать. Получите простой «привет мир» ajax response work, а затем займитесь более сложными ответами. Для более сложного ответа данных я бы рекомендовал посмотреть в json (см. gson), чтобы сериализовать java-объекты, чтобы отправить их обратно в автоответчик.

Первое, что вам следует учитывать, это использование сообщения jQuery и получение оберток для облегчения вашей жизни.

Например, ваш HTML будет иметь следующий вид:

<h1>Hello: <span style="color:red" id="showMyName"></span></h1> 
<form method="post" action="AjaxServlet" id="myForm"> 
    <input type="text" name="myName" />    
</form> 
<button id="ajaxSubmit" type="submit">SEND</button> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#ajaxSubmit').on('click', function() { 
     // To simplify things, wrap what you can in a form and serialize      
     // it to send to the server. 
      var myForm = $('#myForm'); 
      $.get(myForm.attr('action'), myForm.serialize(), function(data) { 
       $('#showMyName').text(data); 
      }); 
     }); 
    }); 
</script> 

На стороне сервлета, вы должны начать с простой-джейн сервлета и как только вы уверены, что это работает, начните добавлять дополнительные возможности. Базовый сервлет должен быть Somthing так:

// For this example, get and post will use the same base procedures. 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    processRequest(request, response); 
} 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    processRequest(request, response); 
} 

protected void processRequest(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    try { 
     /* TODO output your response here.*/ 
     out.println(request.getParameter("myName")); 
    } finally { 
     out.close(); 
    } 
} 

Один из способов отправить сложный ответ, чтобы впихнуть все свои данные в коллекции своего рода и использовать gson или какой-либо другой JsonObjectMapper, чтобы преобразовать его в строку. Затем вы можете поместить эту строку в автоответчик и отправить ее обратно для разбора jQuery.

EDIT:

Я забыл упомянуть, что вам нужно, чтобы убедиться, что ваш сервлет распознаваться в вашем контейнере сервлетов, а также. Если вы не добавили дескриптор к web.xml, он должен иметь запись вроде следующего:

<servlet> 
    <servlet-name>AjaxServlet</servlet-name> 
    <servlet-class>org.test.AjaxServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>AjaxServlet</servlet-name> 
    <url-pattern>/AjaxServlet</url-pattern> 
</servlet-mapping> 
+0

Я понял это в то же время, но спасибо в любом случае. :) –

0

xmlhttp.responseText используется в javascript для получения ответа от сервлета. как вы получаете ответ в jquery. Я думаю, что проблема заключается в получении ответа

+0

Я не отправляю нулевой параметр, так как в URL-адресе кода ajax я даю ему фактический параметр. Если это в основном compairing if (action = "selectedhotel"), и это так. Я также пытался добавить к нему еще что-то еще. –

+0

Я понял, что вы сказали. Вместо действия используйте любую другую переменную – vikasramireddy

Смежные вопросы