在servlet和jsp页面之间通过json数据格式传递数据

来源:互联网 发布:巴基斯坦工作知乎 编辑:程序博客网 时间:2024/06/14 22:11

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。

在JSON中,有两种结构:对象和数组。

  1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

   var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};

   2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。例如:

  var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}];

在了解json基本格式的基础上,接下来通过一个实例来说明应用:一个验证我们输入的字符是否和随机产生的验证码是否一样。用到了jquery中封装好的ajax异步请求方法。

首先通过图片来说明实例

请求的初始页面:

验证码输入不一致:


验证码一致:



servlet:

产生随机数的servlet网上很容易找到,这里就不贴代码了。

另一个判断输入的验证码是否和图片上的验证码时候相同,并且将判断的结果封装成json的数据格式。

package com.web.servlet.verificationCode;


import 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 javax.servlet.http.HttpSession;
import net.sf.json.JSONObject;

/**
 * Servlet implementation class ResultServlet
 */
public class ResultServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ResultServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        JSONObject object =new JSONObject();//定义一个json对象
        HttpSession session = request.getSession();
        String code=request.getParameter("veryCode");//获取页面中用户输入的验证码
        System.out.println(code);
        String sysCode=(String)session.getAttribute("validateCode");//获取随机产生验证码servlet中的验证码
        if(sysCode.equals(code)){//判断连个是否一致
            object.put("rightOrNot", "right");
        }else{
            object.put("rightOrNot", "error");
        }
        out.write(object.toString());//将数据以json的格式输出到ajax的回调函数。
    }
}


jsp:提供一个输入text框,并且给出提示比较结果

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="<%=basePath%>">
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <script type="text/javascript" src="js/verifyCode.js"></script>
        <script type="text/javascript" src="js/jquery-1.8.2.js"></script>
        
        <script type="text/javascript" src="js/login.js"></script>
    </head>
    <body>
        <INPUT size="7" id=veryCode onkeyup="checkVeryCode();" type=text name=veryCode>
        <span style="color:red" id="msg"></span><br>
        <p></p>
        <img id="imgObj"  src="VerifyCodeServlet" onclick="changeImg()">
    </body>
</html>

js:脚本:verifyCode.js如下:

function checkVeryCode() {
    var veryCode = $.trim($('#veryCode').attr('value'));
    //alert(veryCode);  
     if(veryCode.length == 4)  
        {  
            $.ajax({  
                type : 'post',
                dataType:'json',
                url : 'ResultServlet?veryCode=' + veryCode,  
                success : function(msg){
                    if('right' == msg.rightOrNot){  
                        $('#msg').html("congratulation!");  
                    }else{  
                        $('#msg').html(msg.rightOrNot);  
                    }  
                },
                error:function (msg){
                    alert("The server occur an exception!");
                }
            });  
        }
     if(veryCode.length != 4){
         $('#msg').html("");
     }
}

这里面需要注意的就是在verifyCode.js脚本中,那个jquery的ajax方法,刚开始一直没有加dataType:‘json’,导致在火狐浏览器一直无法解析msg参数。


原创粉丝点击