1.前端代码(Login.jsp)
注意== 之间的代码
$(function(){
//如果当前窗口不是最顶级窗口,就表示当前窗口被嵌套了
if(window.top != window){
window.top.location.href = "/s/login";
}
//===================================================================
//id选择器,选择btn-login对象,为此对象添加点击事件
$("#btn-login").click(function () {
//$("#loginFrom")[0].submit();//使用js代码来同步请求提交表单
//发送请求, 将此表单转成json格式 从后台得到数据
$.post("/singin/login",$("#loginFrom").toJSON(),function (data) {
if(data.status == 500){
//为标签的内容填值
$("#errorMsg").text(data.msg);
}else{
//JS代码跳转页面
location.href = "/singin/index.jsp";
}
},"json");
});
//===================================================================
//回车键登录,添加按键监听,document对象是页面对象,全局按键效果
$(document).keypress(function (event) {
if(event.keyCode == 13){//13是enter键
//触发一下btn-login按钮的点击事件
$("#btn-login").click();//生效标签一次点击事件
//$("#btn-login").trigger("click");
}
});
});
2.后台代码(Controller)
接收后台代码进行判断,返回ResulJson对象数据,将此数据转成json数据(@ResponseBody)传到前端
@ResponseBody//得到json数据,再传到前台
/*点击提交是使用的是post请求,运行下面代码*/
@RequestMapping(value="/login",method = RequestMethod.POST)
public ResultJson login2(String username, String password, ModelMap modelMap){
try {
Subject subject = SecurityUtils.getSubject();//得到用户对象,此对象拥有数据对象
if(!subject.isAuthenticated()){//如果没有登录就登录
//传入从前端传过来的数据(username、password),创建数据对象
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
//验证登录,将数据对象传入用户对象的登录方法
subject.login(token);//传入后,用户对象的登录状态可能变化
//如果成功就跳转到首页
if(subject.isAuthenticated()){
return new ResultJson(200,"ok");//ResultJson类待会看看
}
}
}catch (UnknownAccountException e){//Unknown未知的 Account账户
e.printStackTrace();
return new ResultJson(500,"this account is unknown");
}catch (IncorrectCredentialsException e){
e.printStackTrace();
return new ResultJson(500,"this password is error");
}catch (AuthenticationException e) {
e.printStackTrace();
}
//登录失败再回到登录页面
return new ResultJson(500,"something has wrong");
}
3.ResultJson.java(utils类)
两个字段
package com.capcom.utils;
public class ResultJson {
private Integer status;
private String msg;
public ResultJson() {
}
public ResultJson(Integer status, String msg) {
this.status = status;
this.msg = msg;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
4.再回来看看前台代码
上面说了,后台传一个json数据到前台,这里使用“data”接收
此时的data就拥有两个字段,这两个字段就是在Controller里面设置的
data的msg可以是“账号错误”等等的值
data的status是设置的状态码,根据这个值判断是否跳转到页面
$("#btn-login").click(function () {
//$("#loginFrom")[0].submit();//使用js代码来同步请求提交表单
$.post("/s/login",$("#loginFrom").toJSON(),function (data) {
if(data.status == 500){
$("#errorMsg").text(data.msg);
}else{
//JS代码跳转页面
location.href = "/s/index.jsp";
}
},"json");
});
5.在java代码中写json代码传到 页面直接显示
void writer(){
response.setContextType("text/html;charset:utf-8");
response.getWriter().write("<script type=""> top.localtion.href=' 请求路径 '; </script>");
}