利用Ajax实现新闻列表
创建一个Java类,包含4个属性:title标题、date时间、source来源、content内容。
方法:Get和Set方法、带参和无参构造函数
News.java
package com.imooc.ajax; public class News { private String title; private String date; private String source; private String content; public News() { } public News(String title, String date, String source, String content) { super(); this.title = title; this.date = date; this.source = source; this.content = content; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
创建一个Servlet类—NewsListServlet.java
1.创建一个News集合,用于存储News类
2.导入阿里巴巴的FastJSON,然后通过toJSONString()方法将,list转换为json字符串。(通过JSON将对象进行序列化,便于传输)
3.因为json中包含了中文,所以在响应输出要设置字符编码,防止乱码
package com.imooc.ajax; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON; /** * Servlet implementation class NewsListServlet */ @WebServlet("/NewsListServlet") public class NewsListServlet extends HttpServlet { private static final long serialVersionUID = 1L; public NewsListServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List list = new ArrayList(); list.add(new News("PYPL:2019年2月份编程排行榜","2019-02","PYPL","TOP1.Python1,TOP2.Java1,TOP3.JavaScript1")); list.add(new News("PYPL:2019年3月份编程排行榜","2019-03","PYPL","TOP1.Python2,TOP2.Java2,TOP3.JavaScript2")); list.add(new News("PYPL:2019年4月份编程排行榜","2019-04","PYPL","TOP1.Python3,TOP2.Java3,TOP3.JavaScript3")); list.add(new News("PYPL:2019年5月份编程排行榜","2019-05","PYPL","TOP1.Python4,TOP2.Java4,TOP3.JavaScript4")); list.add(new News("PYPL:2019年6月份编程排行榜","2019-06","PYPL","TOP1.Python5,TOP2.Java5,TOP3.JavaScript5")); String json = JSON.toJSONString(list); response.setContentType("text/html;charset=UTF-8"); response.getWriter().println(json); } }
从浏览器中可以看出list中的News信息都被JSON序列化为JSON字符串。
接下来将通过Ajax访问”http://localhost:8080/ajaxDemo/NewsListServlet”这个地址,接收这个服务器响应的字符串,最后对字符串进行解析展示页面上。
new.html
用于展示服务器返回的数据
scrpit的作用:动态获取服务器返回的字符串,并将写入到div中
Ajax三步骤:
1. 创建XMLHttpRequest对象
2.发送Ajax请求
3.处理服务器响应
xmlhttp.onreadystatechange = function()利用事件捕捉Ajax在执行过程中的变化
xmlhttp.readyState==4表示接收响应,xmlhttp.status==200代表服务器处理成功
xmlhttp.responseText表示获得响应体的文本
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>新闻</title> </head> <body> <div id="container"></div> <script type="text/javascript"> // 1.创建XMLHttpRequest对象 var xmlhttp; if(window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); }else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } // 2.发送Ajax xmlhttp.open("GET","/ajaxDemo/NewsListServlet",true); xmlhttp.send(); // 3.处理服务器 xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState==4 && xmlhttp.status==200){ var text = xmlhttp.responseText; console.log(text); var json = JSON.parse(text); console.log(json); var html = ""; for(var i=0; i<json.length; i++){ var news = json[i]; html = html + "<h1>"+news.title+"</h1>"; html = html + "<h2>"+news.content+"</h2>"; html = html + "<h2>"+news.date + " "+news.source+"</h2>"; html = html + "<hr>"; } document.getElementById("container").innerHTML = html; } } </script> </body> </html>
注意:在控制台中的数据只是一段长的像JSON的字符串,并不能被JavaScript直接解析,需要转换为JSON才能被调用。在JavaScript中使用JSON.parse()将字符串转换为JSON对象