赞
踩
为什么要使用ajax
请求,而不用jsp
的el
表达式和jstl
方便的得到数据呢?
jsp
是一种早期的技术,它将前后端杂糅在一起,html
和java
代码交错;而现在前后端分离逐渐成为业界标准,将静态html
和后端java
代码分开的思想有利于前后端专注于自己的工作,提高工作效率,降低维护成本。jsp
的本质是servlet
,因此浏览器在第一次访问jsp
时,需要将jsp
编译成servlet
,这将耗费很多时间,而静态html
就没有这样的问题。jsp
是servlet
,那么无论是编译还是访问,都需要占用服务器资源,前后端分离可以有效缓解问题。在web
/webapp
(具体目录名根据项目类型判断)目录下新建一个js
目录,导入jQuery-x.x.x.js
文件,脚本下载地址:jQuery下载
编写一个index.html
文件,导入jQuery
脚本,提供一个按钮和空表格(只有表头),为按钮和表格指定id
以便脚本调用:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello Maven</title> <link rel="stylesheet" type="text/css" href="css/style.css"> <script type="text/javascript" src="js/jquery-3.5.0.js"></script> </head> <body> <button id="view">View Mysql By Ajax + MyBatis</button> <table id="data"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> </table> </body>
网页效果:
笔者在dao
层用MyBatis + MyBatis Generator
实现了一个读取数据库这种users
数据表的方法,这个方法会访问users
数据表,并返回一个存有数据的List
列表(此处不是本文重点,如果不会用MyBatis
,也可以使用JDBC
实现):
package dao; import mapper.UsersMapper; import org.apache.ibatis.session.SqlSession; import pojo.Users; import pojo.UsersExample; import java.util.List; public class UsersUtil { public static List<Users> getAllUsers() { InputStream stream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream); SqlSession session = factory.openSession(); UsersExample example = new UsersExample(); example.createCriteria().andIdIsNotNull(); UsersMapper mapper = myBatisSession.getMapper(UsersMapper.class); return mapper.selectByExample(example); } }
接着在service
层实现一个servlet
。
此处使用alibaba
的fastjson.jar
(没有jar
包的请自行下载,笔者此处使用Maven
配置)实现列表与json
的快速转换,最后通过resp.getWriter().append()
把json
字符串传出:
package service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import dao.UsersUtil; import pojo.Users; import org.apache.ibatis.io.Resources; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class UsersServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List<Users> usersList = UsersUtil.getAllUsers(); //JSON转字符串写入resp resp.getWriter().append(JSON.toJSONString(jsonArray)); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
在js目录中创建loadDataAjax.js
脚本,该脚本会在网页加载完成后为view
按钮分配click
方法,点击后会发送ajax
请求,得到数据并加入表格。
$(function(){ pass })
: 网页加载完成时会自动调用函数体$("#id").click(function(){ pass })
: 监听对应id的按钮,提供click
方法$.ajax()
: ajax
请求关于ajax
请求的参数:
url
: 请求地址type
: 指定请求类型(get/post)
dataType
: 指定返回的数据类型.done
: 访问成功调用的方法,其中参数msg
是resp
返回的数据.fail
: 访问失败调用的方法//网页加载完成时调用 $(function () { //为id=view的按钮提供click方法 $("#view").click(function () { //发送ajax请求 $.ajax({ url: encodeURI("sql"), type: "get", dataType: "json" }) //访问成功 .done(function (msg) { //清空id=data的表格第一行(表头)以外的数据 $("#data tr:not(:first)").empty(); //遍历返回的json数组 $.each(msg, function (index, user) { //向表格中添加json数组每个元素的内容 $("#data").append("<tr>" + "<td>" + user.id + "</td>" + "<td>" + user.name + "</td>" + "<td>" + user.age + "</td>" + "</tr>") }) }) //访问失败 .fail(function () { alert("ERROR!") }) }) })
最后在index.html
中导入脚本:
<script type="text/javascript" src="js/loadDataAjax.js"></script>
网页成功返回数据并写入列表:
Maven
中的css
、js
文件都会被过滤器过滤,要使文件可以正常使用,我们需要在WEB-INF/web.xml
中加入以下配置:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。