Index.html的加载

   html的加载:

         静态加载:直接请求xxx.html,xxx.html文件是提前写好的

         动态加载:

         load("xxx.html");//执行此语句的时候,才加载xxx.html

   js的加载:

        静态加载:<script src="xxx.js"></script>

        前提:加载html的时候,script脚本也加载,html加载完毕后才开始执行xxx.js

     

    动态加载:

         

load("xxx.html",function(){
                    $.getScript("xxx.js");//必须xxx.html加载完毕后才加载xxx.js
            });
            $.getScript("xxx.js");//加载xxx.js

 

写业务流:

1.确认js文件是否正确加载并执行

$(function(){

  alert("login.js");

  console.log("login.js");

});

 

2.确认js的方法是否执行

alert("test");

   console.log("test");

 

   因为,js方法中的代码有任何错误,可能会导致整个js方法不执行

   把整个方法中的代码全部剪切出去放在某个文本文件中,再确认方法是否

   执行,剩下的是逐行排错

   js的排错三种方法

         alert("test");

         console.log("test");

      js的debug,先阶段所有的浏览器都支持js的debug

      只能debug静态加载的js,动态的js无法debug

 

 3.确认js方法中的ajax提交是否能请求到controller的方法

    在controller的某个方法中写System.out.println("test");

 

 4.确认在controller方法中获取页面提交过来的数据

System.out.println(loginName+"   "+password);

 

  5.根据页面提交过来的数据调用具体的业务操作(建议最后做)

      a.controller的方法调用业务方法

      b.业务方法调用dao(mybatis,springjdbc,jdbc)

      c.dao访问数据库

      d.业务方法得到dao的返回结果

      e.controller的方法得到业务的返回结果

 

  6.把业务的返回结果,通过jackson转换成json发送给js端

 

  7.js端获取到服务端返回的json结果,解析json

 

  8.根据json的数据,做响应的dom编程

 

登录部分:

login.html

<!DOCTYPE html>

<html lang="zh-CN">

  <head>

    <meta charset="utf-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->

    <meta name="author" content="Robin Liu">

 

    <title>TES Login From</title>

 

    <link rel="icon" href="favicon.ico">

    <!-- Bootstrap core CSS -->

    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- 登录界面的CSS -->

    <link href="css/login.css" rel="stylesheet">

    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->

    <script src="js/common/jquery-1.11.3.min.js"></script>

    <!-- 最新的 Bootstrap 核心 JavaScript -->

    <script src="js/common/bootstrap.min.js"></script>

   

    <!-- 自定义的js -->

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

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

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

 

  </head>

 

  <body>

    <nav class="navbar navbar-inverse navbar-fixed-top">

      <div class="container-fluid">

        <div class="navbar-header">

          <a class="navbar-brand" href="#"><img src="images/logo.png"></a>

          <a class="navbar-brand" href="#"><strong>易学系统</strong></a> 

        </div>

        <div id="navbar" class="navbar-collapse collapse">

        </div>

      </div>

    </nav>

    <div class="container">

      <form class="form-signin">

        <h2 class="form-signin-heading">请登录</h2>

        <label for="inputName" class="sr-only">账号</label>

        <input type="text" id="inputName" class="form-control" placeholder="账号" required autofocus>

        <label for="inputPassword" class="sr-only">Password</label>

        <input type="password" id="inputPassword" class="form-control" placeholder="密码" required>

        <div class="checkbox">

          <label>

            <input id="rememberId" type="checkbox" value="记住账号"> 记住账号

          </label>

        </div>

        <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>

      </form>

    </div> <!-- /container -->

  </body>

</html>

 

login.js

//window.onload=function(){}

$(function(){

  //alert("login.js");

  // 从cookie中寻找有key为loginName的cookie的值,

  //如果有,就放在用户名的文本框中,没有就给框中放一个空字符串

  $("form input[type=text]").val(getCookie("loginName"));

  console.log("login.js");

  $("form").submit(function(){

    return login_form();//return false,不让页面的form表单提交

  });

});

//登录方法

function login_form(){

  console.log("login_form");

  //获取登录的用户名和密码

  var lName=$("form input[type=text]").val();

  var lpwd=$("form input[type=password]").val();

  var remember=$("#rememberId").get(0).checked;

  //console.log(lName+"   "+lpwd+"   "+remember);

  alert(lName+"   "+lpwd+"   "+remember);

  //发送异步ajax请求去服务器

  $.ajax({

    url:basePath+"user/login",

    type:"get",

    data:{"loginName":lName,"password":lpwd},

    dataType:"json",

    success:function(result){
    
      //得到服务器返回的json数据result

      //根据json数据做dom编程

      if(result.status==1){

        if(remember){

          //要求记录账号,记录在cookie中

          //添加cookie  loginName=wt_zss@126.com 存活5个小时

          addCookie("loginName",lName,5)

        }

      window.location.href="index.html";

      }else if(result.status==0){

        alert(result.message)

      }

 

    },

    error:function(){

    alert("请求失败!");

    }

  });

 

 

  return false;
  
}

 

UserController.java

package com.tarena.controller;

 

import javax.annotation.Resource;

import javax.servlet.http.HttpSession;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

 

import com.tarena.entity.User;

import com.tarena.service.UserService;

import com.tarena.vo.Result;

 

@Controller

@RequestMapping("user/")

public class UserController {

@Resource(name="userService")

private UserService userService;

 

@RequestMapping(value="login",method=RequestMethod.GET)

@ResponseBody

public Result login(String loginName,

            String password,

            HttpSession session) {

System.out.println(loginName+"   "+password);

Result result=new Result();

User user=new User();

user.setLoginName(loginName);

user.setPassword(password);

//调用具体的登录业务

result=this.userService.login(user);

if(result.getStatus()==1) {

session.setAttribute("loginName", loginName);

}

 

return result;

}

}

 

 

UserServiceImpl.java

package com.tarena.service.impl;

 

import javax.annotation.Resource;

 

import org.springframework.stereotype.Service;

 

import com.tarena.dao.UserMapper;

import com.tarena.entity.User;

import com.tarena.service.UserService;

import com.tarena.util.PageUtil;

import com.tarena.vo.Page;

import com.tarena.vo.Result;

@Service("userService")

public class UserServiceImpl implements UserService {

    @Resource(name="userMapper")//从容器中取出的是代理对象

private UserMapper userMapper;

    @Resource(name="pageUtil")

    private PageUtil pageUtil;

   

 

@Override

public Result login(User user) {

Result result=new Result();

 

String id=this.userMapper.login(user);

if(id!=null) {

result.setStatus(1);

result.setMessage("登录成功!");

}else {

result.setStatus(0);

result.setMessage("登录失败!");

}                

return result;

}

 

@Override

public Result findRolesByPage(Page page) {

Result result=new Result();

//处理roleKeyWord的模糊关键字的的通配符

page.setRoleKeyWord(

"undefined".equals(page.getRoleKeyWord())? "%%" : "%"+page.getRoleKeyWord()+"%");

page.setPageSize(pageUtil.getPageSize());

 

 

return result;

}

 

}

 

UserMapper.java

package com.tarena.dao;

 

import com.tarena.entity.User;

 

public interface UserMapper {

/**

 * 登录的操作数据库的方法

 * @param user 传入的数据

 * @return 数据的id

 *         id!=null  记录存在 登录成功

 *         id=null   记录不存在 登录失败

 */

public String login(User user);

}

 

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.UserMapper">

 

<!-- 登录 -->

<select id="login"

        parameterType="User"

        resultType="java.lang.String">

select

     user_id

from t_user

where

     user_loginname=#{loginName} and

     user_password=#{password}

</select>

 

 

</mapper>

 

登出功能:

header.html

<div class="container-fluid">

<div class="navbar-header">

  <a class="navbar-brand" href="#"><img src="images/logo.png"></a>

  <a class="navbar-brand" href="#"><strong>易学</strong></a>

</div>

<div id="navbar" class="navbar-collapse collapse">

  <ul class="nav navbar-nav navbar-right">

    <li><a href="index.html"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> 首页</a></li>

    <li><a href="#" data-toggle="modal" data-target="#message_dialog"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> 消息 <span class="badge">5</span></a></li>

    <li><a href="#" data-toggle="modal" data-target="#editPasswd"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span> 修改密码</a></li>

    <!-- <li><a href="#"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> 帮助</a></li> -->

    <li><a id="logoutId" href="#"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> 退出</a></li>

  </ul>

</div>

</div>

 

Main.js

//@ sourceURL=main.js

 

$(function(){

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

//logout();

//logout1();

logout2();

});

});

//登出的方法

function logout(){

$.ajax({

url:basePath+"main/logout",

type:"get",

dataType:"json",

success:function(result){

if(result.status==1){

window.location.href="login.html";

}

},

error:function(){

alert("请求失败!");

}

});

}

function logout1(){

$.ajax({

url:basePath+"main/logout1",

type:"get",

dataType:"json",

success:function(result){

alert(result.flag);

if(result.flag=="success"){

window.location.href="login.html";

}

},

error:function(){

alert("请求失败!");

}

});

}

function logout2(){

$.ajax({

url:basePath+"main/logout2",

type:"get",

dataType:"json",

success:function(result){

alert(result.flag+"  "+result.key1+"    "+result.key2);

if(result.flag=="success"){

window.location.href="login.html";

}

},

error:function(){

alert("请求失败!");

}

});

}

 

}

 

MainController.java

package com.tarena.controller;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.util.HashMap;

import java.util.Map;

 

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

 

import com.alibaba.fastjson.JSON;

import com.tarena.vo.Result;

 

@Controller

@RequestMapping("main/")

public class MainController {

@RequestMapping(value="logout",method=RequestMethod.GET)

@ResponseBody//依赖的是jackson 

public Result logout(HttpSession session) {

System.out.println("logout");

Result result=new Result();

 

session.invalidate();//清空session中的所有的数据

result.setStatus(1);

return result;

}

@RequestMapping(value="logout1",method=RequestMethod.GET)

public void logout1(HttpSession session,

              HttpServletResponse response) {

try {

System.out.println("logout1");

Result result=new Result();

 

session.invalidate();//清空session中的所有的数据

response.setContentType("text/html;charset=utf-8");

 

String json="{\"flag\":\"success\"}";

PrintWriter out=response.getWriter();

out.print(json);

out.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

@RequestMapping(value="logout2",method=RequestMethod.GET)

public void logout2(HttpSession session,

              HttpServletResponse response) {

try {

System.out.println("logout2");

Result result=new Result();

 

session.invalidate();//清空session中的所有的数据

 

Map<String,String> map=new HashMap<String,String>();

map.put("flag", "success");

map.put("key1","value1");

map.put("key2","value2");

 

//借助fastjson工具把map集合对象转换成json字符串

String json=JSON.toJSONString(map);

 

System.out.println(json);

 

 

PrintWriter out=response.getWriter();

out.print(json);

out.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

}

 

Pom.xml

<!-- 阿里巴巴的fastjson工具  对象和json互转的工具 -->

<dependency>

  <groupId>com.alibaba</groupId>

  <artifactId>fastjson</artifactId>

  <version>1.2.17</version>

</dependency>

 

 

补充内容 :

escape(字符串);把字符串数据统一成一种码制
比如 escape("aa w3c bb!");  //结果:aa20%w3c20%bb21%

       unescape("aa20%w3c20%bb21%");//aa w3c bb!

 

Js中的null或"",这样的数据不能提交给服务器,服务器不接收null和""