Сервлет использует HTML-файл и XMLHttpRequest для отображения данных - PullRequest
0 голосов
/ 11 мая 2019

Я создал конечную точку AJAX, которая будет предоставлять внешний запрос AJAX с массивом статей JSON.Мне нужна помощь в отображении данных в файле HTML.Класс Article предназначен для объекта Article, который может представлять информацию из данных статьи.В классе ArticleListGenerator у меня есть один статический метод getArticleList (), который возвращает список статей.Метод getArticleList () обращается к файлу JSON, который используется для генерации JSON.В моем классе JSONResponse у меня есть один статический метод, который принимает объект ответа и объект, который реализует интерфейс JSONAware в качестве аргументов.И класс Endpoint - это мой метод doGet.Следующее, что я хочу сделать, это отобразить данные на странице HTML.

В файле Html у меня есть javascript, и я использую XMLHttpRequest для получения данных JSON из конечной точки, класс сервлета «Конечная точка»Я не уверен, что это правильный способ сделать это.

В моем HTML-файле я пробовал javascript

<script>
    var url="/endpoint";
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (!xhttp) {
            console.log('Unable to create XMLHTTP instance');
            return false;
        }else if(xhttp.readyState == 4 &&xhttp.status===200) {
            data = JSON.parse(xhttp.responseText);
            console.log(" test:"+data);
        }else{
            console.log("page not found")
        }
    };
    xhttp.open("GET", "url", true);
    xhttp.send();
</script>

В моем файле web.xml

<servlet>
        <servlet-name>Endpoint</servlet-name>
        <servlet-class>Test.web.Endpoint</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Endpoint</servlet-name>
        <url-pattern>/endpoint</url-pattern>
    </servlet-mapping>

public class Article implements Serializable {
    private int id;
    private String title;
    private String content;
    private int authorId;

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAuthorId() {
        return this.authorId;
    }

    public void setAuthorId(int authorId) {
        this.authorId = authorId;
    }

    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return this.content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public static JSONObject toJson(Article a) {
        JSONObject jObj = new JSONObject();

        if (a != null) {
            jObj.put("id", a.getId());
            jObj.put("title", JSONObject.escape(a.getTitle()));
            jObj.put("content", JSONObject.escape(a.getContent()));
            jObj.put("author_id", a.getAuthorId());
        }

        return jObj;
    }
}

public class ArticleListGenerator {

    public static List<Article> getArticleList(){

        List<Article> articles = new ArrayList<>();

        try (InputStreamReader inputStreamReader = new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("JSONArray.json"))) {

            Object obj = new JSONParser().parse(inputStreamReader);
            JSONArray jsonArray = (JSONArray) obj;

            for (int i = 0; i < jsonArray.size(); i++){
                JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                Article article = new Article();

                String title = (String) jsonObject.get("title");
                Long id = (Long) jsonObject.get("id");
                Long authorId = (Long) jsonObject.get("author_id");
                String content = (String) jsonObject.get("content");

                article.setTitle(title);
                article.setId(id.intValue());
                article.setAuthorId(authorId.intValue());
                article.setContent(content);

                articles.add(article);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return articles;
    }

}

public class JSONResponse {
    public static void send(HttpServletResponse response, JSONAware j) {
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");

        try {
            response.getWriter().print(j.toJSONString());
        } catch (IOException e) {
       
            e.printStackTrace();
        }
    }
}

public class Endpoint extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Article> article=ArticleListGenerator.getArticleList();
        JSONArray jArr = new JSONArray();
        for(int i=0; i<article.size();i++){
            jArr.add(Article.toJson(article.get(i)));
        }

        JSONResponse.send(resp, jArr);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...