Вернуть JSON из сервлета

Это очень простой тест запрос-ответ. Браузер отправляет "привет из браузера" сервлету, используя API-интерфейс jQuery $.ajax, и сервлет получает это сообщение, затем создает объект JSON с помощью библиотеки org.json.simple и отправляет обратно в браузер ответ JSON с сообщением "привет от сервера".

Я запускаю это на локальном хосте и просто предполагаю, что мой IP-адрес - 123.123.12.123, платформа - Ubuntu, сервер - Tomcat 6.0, работающий в Eclipse IDE.

Тест 1. Я запускаю сервер из Eclipse, открываю Firefox, вводю http://localhost:8080/myproject/test.jsp, я вижу, как сервлет получает сообщение, а браузер получает ответ, тест пройден.

Тест 2. Сервер все еще работает на Eclipse в Ubuntu, я запускаю гостевую машину Windows 7 из VirtualBox и браузер Firefox в Windows 7, введите http://123.123.12.123:8080/myproject/test.jsp, работает как я Ожидается, тест пройден.

Тест 3. Сервер все еще работает на Eclipse в Ubuntu, откройте браузер Internet Explorer 9, дайте ему адрес http://123.123.12.123:8080/myproject/test.jsp, ничего не происходит. Отладка дает мне

Ответ HTTP/1.1 200 ОК

Тело ответа {"message":"привет с сервера"}

Test.jsp есть

<% @ page language = "java" contentType = "text / html; charset = UTF-8"
    pageEncoding = "UTF-8" %><Голова>Введите название здесь</ title></ HEAD><script src = "// ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type = "text / javascript"></ script><script type = "text / javascript" src = "release / js / libs / json2.js"></ script><Скрипт>$ (Документ).ready (функция (){
    var request = ({"message":'Hello from browser'});
    var jsonobj=JSON.stringify(запрос);
    $.Ajax({
        данные: {para:jsonobj},
        dataType: 'json',
        URL: './TestServlet',
        тип: 'POST',
        success: function(jsonObj){
            оповещения (jsonObj.message);     
        },
        ошибка: функция () {
            alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.status + ' ' + err);
        }
    });
});</ Скрипт><Тело></ Body></ Html></pre><p>Код сервлета</p><pre>импорт java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

/**
 * Класс реализации сервлета TestServlet
 */
открытый класс TestServlet расширяет HttpServlet {
    приватный статический финал long serialVersionUID = 1L;

    /**
     * @ смотри HttpServlet#HttpServlet()
     */
    public TestServlet() {
        супер();
    }

    /**
     * @see HttpServlet#doGet(запрос HttpServletRequest, ответ HttpServletResponse)
     */
    Защищенный void doGet(запрос HttpServletRequest, ответ HttpServletResponse) создает исключение ServletException, IOException {
        // TODO Автоматически генерируемый метод заглушки
    }

    /**
     * @see HttpServlet#doPost(запрос HttpServletRequest, ответ HttpServletResponse)
     */
    Защищенный void doPost(запрос HttpServletRequest, ответ HttpServletResponse) создает исключение ServletException, IOException {

        request.setCharacterEncoding("utf8");
        response.setCharacterEncoding("utf8");
        response.setContentType("применение / JSON"); 
        PrintWriter out = response.getWriter(); 
        JSONObject jsonObj = (JSONObject) JSONValue.parse(request.getParameter("para"));
        System.out.println(jsonObj.get("сообщение"));         
        JSONObject obj = new JSONObject();
        obj.put("message", "hello from server");
        out.print(OBJ);

    }

}</pre><p>Обновить:</p><p>После более пристального взгляда на изменения</p><pre> ошибка: функция () {
            alert ('Ajax readyState:' + xhr.readyState + '\ nstatus:' + xhr.status + '' + err);
}</pre><p>в</p><pre>error: function(xhr,err) {
            alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.status + ' ' + err);
        }</pre><p>Я получил предупреждение readyState:0 и статус:0. Но я вижу {"message":"привет от сервера"} в теле ответа, а заголовок ответа</p><pre>Значение ключа
Ответ HTTP/1.1 200 ОК</pre>
                                    
                                
                            </div>
                        </div>
                    </div>
                    <div class="q-info">
                        <div class="row">
                            <div class="col-sm-2">
                                <a class="like-button"  title="Чтобы оценить вопрос необходимо войти под своим логином." >
                                    <div class="btn btn-my btn-block q-like" style="background:  #bdc3c7 ">
                                        <span itemprop="upvoteCount">15</span>
                                        <i class="far fa-thumbs-up"></i>
                                    </div>
                                </a>
                            </div>                        
                            <div class="col-md-10 q-tags">
                                


    <a href="/questions/tagged/jquery" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'jquery'">jquery</a>

    <a href="/questions/tagged/json" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'json'">json</a>

    <a href="/questions/tagged/internet-explorer" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'internet-explorer'">internet-explorer</a>

    <a href="/questions/tagged/servlets" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'servlets'">servlets</a>

    <a href="/questions/tagged/jakarta-ee" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'jakarta-ee'">jakarta-ee</a>

    <a href="/questions/tagged/java-ee" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'java-ee'">java-ee</a>

                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-4">
                                
                                    <a class="q-source" href="https://stackoverflow.com/questions/9645647/return-json-from-servlet" target="_blank">Источник</a>
                                
                                <a class="q-share" href="https://stackru.com/questions/9711547/vernut-json-iz-servleta" itemprop="url">Поделиться</a>
                            </div>
                            <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
                                <span itemprop="name">
                                    
                                        <a href="https://stackoverflow.com/users/200340/user200340" class="q-user" rel="noopener" target="_blank">user200340</a>
                                                                            
                                </span>
                                <span class="q-date" title="2012-03-10 10:21"> 10 мар '12 в 10:21</span>
                                <span class="hidden" itemprop="dateCreated" datetime="2012-03-10 10:21">2012-03-10 10:21</span>
                            </div>
                        </div>
                    </div>
                    <span class="hidden" itemprop="dateCreated" datetime="2012-03-10 10:21">2012-03-10 10:21</span>
                </div>

                

                <div id="Answers">
                    <h2 class="answers-title">
                        <span class="a-count" itemprop="answerCount">2</span>
                         
                        ответа
                    </h2>
                    
                    
                    
                    
                        
                            <div class="accepted-answer">Решение</div>
                        
                        <div id="9711554" class="answer accepted-answer-vertical" itemscope itemtype="http://schema.org/Answer" itemprop="acceptedAnswer">                 
                            <div class="a-body">
                                <div class="a-text" itemprop="text">
                                    
                                        
                                            
                                            <p>IE агрессивно кеширует AJAX-запросы (во всяком случае, больше, чем Firefox, Chrome и Safari). Иногда вам нужно установить контроллер заголовка кэша при запросе. подобно <code>cache:false</code>, Я пытался исправить ваш код, как это</p><pre><code>request.setCharacterEncoding("utf8");
        //response.setCharacterEncoding("utf8");
        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        JSONObject jsonObj = (JSONObject) JSONValue.parse(request.getParameter("para"));
        System.out.println(jsonObj.get("message"));
        JSONObject obj = new JSONObject();
        obj.put("message", "hello from server");
        out.print(obj);
</code></pre><p>Я изменил ваш тип контента ответа с <code>application/json; charset=utf8</code> чтобы просто <code>application/json</code> и это сработало.</p>
                                        
                                    
                                </div>
                                <div class="a-info">
                                    <div class="row">
                                        <div class="col-sm-2">
                                            <a class="like-button"  title="Чтобы оценить ответ необходимо войти под своим логином." >
                                                <div class="btn btn-my btn-block" style="background:  #bdc3c7 ">
                                                    <span itemprop="upvoteCount">15</span>
                                                    <i class="far fa-thumbs-up"></i>
                                                </div>
                                            </a>
                                        </div>
                                        
                                    </div>
                                    <div class="row">
                                        <div class="col-sm-4">
                                            
                                                <a class="a-source" href="https://stackoverflow.com/questions/9645647/return-json-from-servlet/9647574#9647574" target="_blank">Источник</a>
                                                                                        
                                            <a class="a-share" href="https://stackru.com/questions/9711547/vernut-json-iz-servleta/9711554#9711554" itemprop="url">Поделиться</a>
                                        </div>
                                        <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
                                            <span itemprop="name">
                                                
                                                    <a href="https://stackoverflow.com/users/939909/user939909" class="q-user" rel="noopener" target="_blank">user939909</a>
                                                                                                    
                                            </span>
                                            <span class="q-date" title="2012-03-10 15:24"> 10 мар '12 в 15:24</span>
                                            <span class="hidden" itemprop="dateCreated" datetime="2012-03-10 15:24">2012-03-10 15:24</span>
                                        </div>
                                    </div>
                                </div>
                                <span class="hidden" itemprop="dateCreated" datetime="2012-03-10 15:24">2012-03-10 15:24</span>
                            </div>
                        </div>
                    
                        
                        <div id="9711555" class="answer " itemscope itemtype="http://schema.org/Answer" itemprop="suggestedAnswer">                 
                            <div class="a-body">
                                <div class="a-text" itemprop="text">
                                    
                                        
                                            <p>У меня была такая же проблема. Это работало хорошо на Firefox, но не на IE... Я узнал, читая этот пост, что моя проблема была связана с 'Content-Type'. Кажется, проблема в том, что IE имеет проблему с 'charset=UTF8'. Однако, если вы используете 'charset=UTF-8' (с тире), это работает! Ваш Content-Type должен быть следующим: application/json;charset=UTF-8</p>
                                        
                                    
                                </div>
                                <div class="a-info">
                                    <div class="row">
                                        <div class="col-sm-2">
                                            <a class="like-button"  title="Чтобы оценить ответ необходимо войти под своим логином." >
                                                <div class="btn btn-my btn-block" style="background:  #bdc3c7 ">
                                                    <span itemprop="upvoteCount">3</span>
                                                    <i class="far fa-thumbs-up"></i>
                                                </div>
                                            </a>
                                        </div>
                                        
                                    </div>
                                    <div class="row">
                                        <div class="col-sm-4">
                                            
                                                <a class="a-source" href="https://stackoverflow.com/questions/9645647/return-json-from-servlet/15520989#15520989" target="_blank">Источник</a>
                                                                                        
                                            <a class="a-share" href="https://stackru.com/questions/9711547/vernut-json-iz-servleta/9711555#9711555" itemprop="url">Поделиться</a>
                                        </div>
                                        <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
                                            <span itemprop="name">
                                                
                                                    <a href="https://stackoverflow.com/users/2190382/user2190382" class="q-user" rel="noopener" target="_blank">user2190382</a>
                                                                                                    
                                            </span>
                                            <span class="q-date" title="2013-03-20 10:28"> 20 мар '13 в 10:28</span>
                                            <span class="hidden" itemprop="dateCreated" datetime="2013-03-20 10:28">2013-03-20 10:28</span>
                                        </div>
                                    </div>
                                </div>
                                <span class="hidden" itemprop="dateCreated" datetime="2013-03-20 10:28">2013-03-20 10:28</span>
                            </div>
                        </div>
                    
                        
                        <div id="55035269" class="answer " itemscope itemtype="http://schema.org/Answer" itemprop="suggestedAnswer">                 
                            <div class="a-body">
                                <div class="a-text" itemprop="text">
                                    
                                        
                                            <pre><code><% 
     Gson gs = new Gson();
     BeanHelpBH bh = new BeanHelpBH();
     List<Baihatmoi> lst = bh.getTenbaihatbyName("Ao moi ca mau");
    String bha = gs.toJson(lst);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    out.print(bha);
    out.flush();


%>

  script : 
        <script>
             $(document).ready(function(){
               $.get('jsontest.jsp',function(data){
            [enter image description here][1] console.log(data);

              });

           });
        </script>
</code></pre>
                                        
                                    
                                </div>
                                <div class="a-info">
                                    <div class="row">
                                        <div class="col-sm-2">
                                            <a class="like-button"  title="Чтобы оценить ответ необходимо войти под своим логином." >
                                                <div class="btn btn-my btn-block" style="background:  #bdc3c7 ">
                                                    <span itemprop="upvoteCount">0</span>
                                                    <i class="far fa-thumbs-up"></i>
                                                </div>
                                            </a>
                                        </div>
                                        
                                    </div>
                                    <div class="row">
                                        <div class="col-sm-4">
                                            
                                                <a class="a-source" href="https://stackoverflow.com/questions/9645647/return-json-from-servlet/60924991#60924991" target="_blank">Источник</a>
                                                                                        
                                            <a class="a-share" href="https://stackru.com/questions/9711547/vernut-json-iz-servleta/55035269#55035269" itemprop="url">Поделиться</a>
                                        </div>
                                        <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
                                            <span itemprop="name">
                                                
                                                    <a href="https://stackoverflow.com/users/4192685/user4192685" class="q-user" rel="noopener" target="_blank">user4192685</a>
                                                                                                    
                                            </span>
                                            <span class="q-date" title="2020-03-30 09:14"> 30 мар '20 в 09:14</span>
                                            <span class="hidden" itemprop="dateCreated" datetime="2020-03-30 09:14">2020-03-30 09:14</span>
                                        </div>
                                    </div>
                                </div>
                                <span class="hidden" itemprop="dateCreated" datetime="2020-03-30 09:14">2020-03-30 09:14</span>
                            </div>
                        </div>
                    
                        
                        <div id="55035267" class="answer " itemscope itemtype="http://schema.org/Answer" itemprop="suggestedAnswer">                 
                            <div class="a-body">
                                <div class="a-text" itemprop="text">
                                    
                                        
                                            <p>Используя Gson, вы можете отправить ответ json</p><pre><code>@WebServlet(urlPatterns = {"/jsonResponse"})
public class JsonResponse extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("utf-8");
    Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
    Subject subject1 = new Subject(1, "Computer Fundamentals");
    Subject subject2 = new Subject(2, "Computer Graphics");
    Subject subject3 = new Subject(3, "Data Structures");
    Set subjects = new HashSet();
    subjects.add(subject1);
    subjects.add(subject2);
    subjects.add(subject3);
    student.setSubjects(subjects);
    Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
    student.setAddress(address);
    Gson gson = new Gson();
    String jsonData = gson.toJson(student);
    PrintWriter out = response.getWriter();
    try {
        out.println(jsonData);
    } finally {
        out.close();
    }

}
</code></pre><p>}</p><p>для получения дополнительных <a href="https://www.ebhor.com/servlet-json-response/" rel="noopener nofollow noreferrer" target="_blank">ответов json от сервлета в java</a></p>
                                        
                                    
                                </div>
                                <div class="a-info">
                                    <div class="row">
                                        <div class="col-sm-2">
                                            <a class="like-button"  title="Чтобы оценить ответ необходимо войти под своим логином." >
                                                <div class="btn btn-my btn-block" style="background:  #bdc3c7 ">
                                                    <span itemprop="upvoteCount">-1</span>
                                                    <i class="far fa-thumbs-up"></i>
                                                </div>
                                            </a>
                                        </div>
                                        
                                    </div>
                                    <div class="row">
                                        <div class="col-sm-4">
                                            
                                                <a class="a-source" href="https://stackoverflow.com/questions/9645647/return-json-from-servlet/56714914#56714914" target="_blank">Источник</a>
                                                                                        
                                            <a class="a-share" href="https://stackru.com/questions/9711547/vernut-json-iz-servleta/55035267#55035267" itemprop="url">Поделиться</a>
                                        </div>
                                        <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
                                            <span itemprop="name">
                                                
                                                    <a href="https://stackoverflow.com/users/876739/user876739" class="q-user" rel="noopener" target="_blank">user876739</a>
                                                                                                    
                                            </span>
                                            <span class="q-date" title="2019-06-22 14:02"> 22 июн '19 в 14:02</span>
                                            <span class="hidden" itemprop="dateCreated" datetime="2019-06-22 14:02">2019-06-22 14:02</span>
                                        </div>
                                    </div>
                                </div>
                                <span class="hidden" itemprop="dateCreated" datetime="2019-06-22 14:02">2019-06-22 14:02</span>
                            </div>
                        </div>
                                 

                    <div class="text-center">
    
        
        
    
</div>

                    
                    

                    <div class="text-center">
    
                
    
</div>
                    
                    <div class="another-questions">
                        <div class="row">
                            <div class="col-md-12 q-tags">
                                <b>Другие вопросы по тегам</b>
                                


    <a href="/questions/tagged/jquery" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'jquery'">jquery</a>

    <a href="/questions/tagged/json" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'json'">json</a>

    <a href="/questions/tagged/internet-explorer" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'internet-explorer'">internet-explorer</a>

    <a href="/questions/tagged/servlets" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'servlets'">servlets</a>

    <a href="/questions/tagged/jakarta-ee" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'jakarta-ee'">jakarta-ee</a>

    <a href="/questions/tagged/java-ee" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'java-ee'">java-ee</a>

                            </div>
                        </div>
                    </div>
                    
                </div>
                
            </div>
            
            
            <div class="col-lg-3 AD">
    
    <div id="allFlyout3-0" style="position: sticky; top: 0;">
        
            
            
            
        
    </div>
</div>


        </div>
    </div>
</section>
</main>
    
    <div class="padding"></div>
</div>

<footer>
    <div class="container">
        <div class="row">
            <div class="col-sm-6">
                <a href="/">
                    <img src="/static/img/logo.png" alt="stackru.com - Поиск вопросов и ответов по программированию" />
                </a>
            </div>
            <div class="col-sm-6 text-right">
                <span class="pull-right"><a href="mailto:info@stackru.com">info@stackru.com</a></span>
                <br />
                <span class="license pull-left">licensed under <a href="https://creativecommons.org/licenses/by-sa/3.0/" rel="nofollow license" target="_blank">cc by-sa 3.0</a> with attribution</span>
            </div>
        </div>
    </div>
</footer>


    
  
  
    
        <!-- Yandex.Metrika counter -->
<script type="text/javascript" >
   (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
   m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
   (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

   ym(53936023, "init", {
        clickmap:true,
        trackLinks:true,
        accurateTrackBounce:true,
        webvisor:true
   });
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/53936023" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
    
    
    
        <!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-141489240-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-141489240-1');
</script>
    
  

  
    


  
</body>

</html>