当前位置: 代码迷 >> JavaScript >> Struts 2+Jquery+JSON 登陆印证
  详细解决方案

Struts 2+Jquery+JSON 登陆印证

热度:726   发布时间:2012-11-23 00:03:43.0
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);

??? }

???

}

?

  相关解决方案