Struts 2+Jquery+JSON 登陆验证

要Struts2支持JSON,需要加进一个叫jsonplugin的插件,配置文件里让Struts2的package继承一个叫“json-default”的package。配置完毕之后,服务端与客户端之间的数据传递就可以使用同一的json格式,显得比较人性化。

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>登录页</title>

<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript">

    $(function(){

        $("#submit").click(function(){

            var loginName1 = $("input[name='loginName']").val();    //获取账号

            var password1 = $("input[name='password']").val();        //获取密码

 

            var jsonUser = {loginName:loginName1, password:password1};    //JSON对象

            //jsonUser.toString()这种方法错误,javaScript中的toString是用于布尔型变的,

            var strUser = JSON.stringify(jsonUser);    //JSON对象转变成JSON格式的字符串,

           

            $.post("user/login.action", {json: strUser}, callback, "json");

        });

 

        function callback(json){

            alert(json.msg);    //显示反馈信息

            if(json.success == 1){    //如果返回"登录成功"

                window.location.href = "admin/index.action";    //跳转到后台主页

            }

        }

       

    });

</script>

</head>

<body>

 

<form action="user/login.action" method="post">

    账号<input type="text" name="loginName"/><br/>

    密码<input type="password" name="password"><br/>

    <input type="button" id="submit" value="登录"/>

</form>

 

</body>

</html>

var jsonUser = {loginName:loginName1, password:password1};    (1)
var strUser = JSON.stringify(jsonUser);                                         (2)

第(1)句是组装JSON对象,关于JSON对象的格式,建议大家到http://www.json.org/网站上学习一下,要验证你写的JSON对象是否正确,可在http://json.bloople.net/网站上验证。上面写的JSON对象其实是非常简单的一种,jsonUser对象里有两个属性,分别是loginName和password,而表示这两个属性,用key-value的形式,loginName1和password1分别是接收表单中的账号、密码的值。

第(2)句,相当重要,通过JavaScript内置对象JSON的stringify方法,将JSON对象转换成字符串。因为,我们传送给服务器端的要是JSON格式的字符串。

$.post("login!valid.action", {json: strUser}, callback, "json");

这一句,Jquery用POST方法向服务器端发送数据,login!valid.action是我们要发送到的目的URI,也即直达loginAction的valid方法。而{…}是我们要发送的数据(data),{json:strUser},其实也是一个JSON对象,Key:value的形式。在Action那里接收时,要接收“json”这个变量,这个变量的值就是我们发送的strUser字符串。

回调函数(callback)是指服务器端成功发回时,在JS端执行的函数。最后一个参数“json”是返回数据类型的一种,另外,还有”text”、“xml”等。

 

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import org.json.JSONObject;

import cn.simple.pojo.User;

import com.opensymphony.xwork2.ActionSupport;

 

//@Results({ 注解的配制方式

//    @Result(name="success", location="admin/index.action", type="redirect"),

//    @Result(name="input", location="loginform.jsp", type="dispatcher")

//})

public class LoginAction extends ActionSupport {

 

    private String json;    //JSON字符串,JSAction传递数据的载体

    public String getJson() {

        return json;

    }

    public void setJson(String json) {

        this.json = json;

    }

 

    /** 

     * 登录验证

       * 这里是void类型,不会发生调整,直接像servlet那样输出html代码,最终由客户端解析

      * 调用原生Servlet的response来向浏览器端发送数据

     * @throws Exception

     */

    public void valid() throws Exception {

        JSONObject jsonObj = new JSONObject(json);    //JSON格式的字符串构造成JSON对象

        String loginName = jsonObj.getString("loginName"); //获取JSON对象中的loginName属性的值

        String password = jsonObj.getString("password");    //获取JSON对象中的password属性的值

       

        if(loginName=="admin"){

            //此时的JSON对象,有两个属性successmsg,其中suc表示是否登录成功的状态

            json = "{success:0, msg:'用户名不存在'}";    //构造JSON格式的字符串

        } else if( ! password.equals("123")){

            json = "{success:0, msg:'密码不正确!'}";

        } else {

            json = "{success:1, msg:'登录成功!'}";

        }

        sendMsg(json);    //发送JSON格式的字符串回JS

    }

   

    /** *//**

     * 向客户端的JS发送字符串

     * @param content 发送的内容

     * @throws IOException

     */

    public void sendMsg(String content) throws IOException{

        HttpServletResponse response = ServletActionContext.getResponse();

        response.setCharacterEncoding("UTF-8");

        response.getWriter().write(content);

    }

   

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值