1.index.jsp 一个简单的表单
<form id="testform"> 姓名<input type="text" name="username"> 密码<input type="text" name="password"> <button οnclick="login()">序列化</button> </form>2.index.jsp中的ajax (1)ajax用< scritpt >标签包围,第一个script标签里必须有src属性,属性值是jQuery文件的路径(相对绝对都行,这里使用绝对路径,jQuery请自行百度如何下载)
(2)ajax中注意url怎么写,servlet的映射地址是/loginServlet,但是url中需要把/去掉
(3)ajax和form action提交数据给后台的不同之处在于,form的属性中有action和method,直接把权限交给后台,ajax的form不用这么写,form的属性只需要有class或id属性就行,实现了前后端的分离
<script src="<%=basePath%>/js/jQuery.js"></script> <script> function login() { var dataObj = $("#testform").serialize(); $.ajax({ url : "loginServlet",//发送请求的地址 处理请求的servlet的地址 没有前面的/ type : "post", dataType : "json",//预计返回的数值类型 data : dataObj,//发送到服务器的数据 cache : false, ifModified : true, error : function(request) { //失败的话 alert("Connection error"); }, success : function(json) {//请求成功后回调函数 alert("before"); if (json.flag == "success") alert("success!!"); else alert("not catch"); } }) } </script>3.servlet的doPost方法 (1)这里需要注意在第一个response.setContentType里面,必须是text/html或text/plain(text/plain我没有试过,但是text/html一定可以),不能写成text/json
(2)ajax传递到后台之后,servlet直接通过request.getParameter获取参数,就跟jsp的表单操作是一样的。
(3)这里需要import一些包: import net.sf.json.JSONObject; import net.sf.json.JSONArray;//这里的代码并没有用到JSONArray,所以不用import这个
(4)response.getWriter().print(jsonobj.toString)这句完成把json从后台传到前台的功能,前台的ajax接收,在success属性里对传过来的json加以处理
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("UTF-8"); try { String username = request.getParameter("username"); // System.out.println(username);//获取ajax传递的数据 成功 JSONObject jsonobj = new JSONObject(); jsonobj.put("flag", "success"); // System.out.println(jsonobj);//测试输出 成功 out.print(jsonobj.toString());// 返回数据到js中ajax } catch (Exception e) { e.printStackTrace(); } ; out.flush(); out.close(); }执行结果如下: