Spring MVC 框架学习(七)---- 后端接口小练习(计算器与登陆拦截)

文章目录

  • Spring MVC 框架学习(七)---- 后端接口小练习(计算器与登陆拦截)
  • 一、计算器
  • 二、前后端交互的登陆与拦截

Spring MVC 框架学习(七)---- 后端接口小练习(计算器与登陆拦截)

一、计算器

前端代码

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<form action="http://localhost:8080/a/calc" >
数字1:<input type="number" name="num1" >
数字2:<input type="number" name="num2" >

<input type="submit" value="计算数字之和">

</form>

</body>
</html>

form表单 action 提交到 calc的接口下,进行处理

通过 进行传参,name作为key值,后端根据name进行接收参数

代码语言:javascript
复制
    @RequestMapping("/calc")
@ResponseBody
public String getResult(Integer num1,Integer num2){
return "<h1>两数之和为:"+(num1+num2)+"<h1>";
}

最终效果

在这里插入图片描述

点击计算按钮,form表单将输入的值作为参数进行传参

在这里插入图片描述

二、前后端交互的登陆与拦截

  这里参时不涉及到数据库的操作,只要输入的用户账号以及密码为 admin即可显示登陆成功,进入一个主页“hello word”

/static/login.html , 显示登录页并发送ajax请求,传递输入的 username、password

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登录</title>
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/login.css">
</head>
<body>
<!-- 导航栏 -->
<div class="nav">
<!-- logo -->
<img src="image/logo2.jpg" alt="">
<!-- 标题 -->
<span class="title">我的系统</span>
<!-- 空白的占位符 -->
<span class="spacer"></span>
<!-- 右侧的几个链接 -->
<a href="index.html">主页</a>
</div>

&lt;!-- 登录页面的页面容器, 为了和其他页面样式区分开, 使用不同的类名 --&gt;
&lt;div class=&#34;login-container&#34;&gt;
    &lt;div class=&#34;login-dialog&#34;&gt;
        &lt;!-- 标题 --&gt;
        &lt;h3&gt;登录&lt;/h3&gt;
        &lt;!-- 输入用户名 --&gt;
        &lt;div class=&#34;row&#34;&gt;
            &lt;span&gt;用户名&lt;/span&gt;
            &lt;input type=&#34;text&#34; id=&#34;username&#34;&gt;
        &lt;/div&gt;
        &lt;!-- 输入密码 --&gt;
        &lt;div class=&#34;row&#34;&gt;
            &lt;span&gt;密码&lt;/span&gt;
            &lt;input type=&#34;password&#34; id=&#34;password&#34;&gt;
        &lt;/div&gt;
        &lt;!-- 提交按钮 --&gt;
        &lt;div class=&#34;row submit-row&#34;&gt;
            &lt;button id=&#34;submit&#34; onclick=&#34;myfunc()&#34;&gt;提 交&lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

</body>

<script>
function myfunc(){
//1.拿到输入的用户名和密码控件
var username=jQuery("#username");
var password=jQuery("#password");

     //2.进行非空校验
     if(username.val()===&#34;&#34;){
         alert(&#34;请先输入用户名!&#34;);
         username.focus();  // 光标归位
         return;
     }

     if(password.val()===&#34;&#34;){
         alert(&#34;请输入密码!&#34;);
         password.focus();
         return;
     }

    //3.发起ajax请求,与后端进行交互

    $.ajax({
            url : &#39;/a/login&#39;,
            method : &#39;GET&#39;,
            data : {&#34;username&#34;: username.val(), &#34;password&#34;: password.val()},
            success : function (data) {

                if (data == null) {
                    alert(&#34;访问接口失败!&#34;)
                }

                if (data.succ === -1) {
                    alert(data.msg);
                }

                if (data.succ === 1) {
                    alert(&#34;登陆成功!&#34;);
                    location.href = &#39;http://localhost:8080/a/index&#39;;
                }

            }
        }
    )
}

</script>

<script src="js/jquery.min.js"></script>

</html>

  登陆成功显示的主页 index.html,只是作为一个展示页,要通过/index接口才能重定向到这个页面,重定向之前要获取session查看是否登陆

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是首页</title>
</head>
<body>

<h1> Hello Spring MVC!</h1>

</body>
</html>

  /login 登陆处理的接口,返回 status (响应状态码)、succ(登陆状态码)、msg(响应的信息),同时对username、password进行校验以及匹配,如果匹配成功 设置session

代码语言:javascript
复制
   @GetMapping("/login")
@ResponseBody
public Object getLogin(HttpServletRequest request,String username,String password){
System.out.println("进入接口!");
HttpSession session = request.getSession(true);

   String msg=&#34;&#34;;
   int status=200;  // 响应码 如果为200说明访问后端接口成功
   int succ=-1;  // 登陆状态码 ,如果为-1说明登陆失败

    HashMap&lt;String ,Object&gt; map = new HashMap&lt;&gt;();

   if(username!=null &amp;&amp; password!=null &amp;&amp; username.equals(&#34;admin&#34;) &amp;&amp; password.equals(&#34;admin&#34;)){
       System.out.println(&#34;执行了用户名密码匹配的判断!&#34;);
       succ=1;
       msg=&#34;登陆成功!&#34;;

       User user = new User();
       user.setUsername(username);
       user.setPassword(password);
       session.setAttribute(&#34;user&#34;,user);

   }else{
       msg=&#34;用户名或者密码错误&#34;;
   }

   map.put(&#34;status&#34;,status);
   map.put(&#34;succ&#34;,succ);
   map.put(&#34;msg&#34;,msg);

   return map;
}</code></pre></div></div><p>  如果登陆正常,前端接收到data.success==1,那么跳转到 /index 接口,判断session是否存在,如果存在那么重定向到 首页、如果不存在 重定向到 login 登录页</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0"> @RequestMapping(&#34;/index&#34;)
public String  index(@SessionAttribute(value = &#34;user&#34;,required=false) User user){
    if(user==null){
        // 说明未登录状态
        return &#34;redirect:/static/login.html&#34;;
    }else{
        return &#34;redirect:/static/index.html&#34;;
    }
}</code></pre></div></div><p>效果演示:</p><p>进入登陆界面</p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723354311219542281.png" /></div><div class="figure-desc">在这里插入图片描述</div></div></div></figure><p>前端的非空提示:未输入用户名</p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723354311868019910.png" /></div><div class="figure-desc">在这里插入图片描述</div></div></div></figure><p>未输入密码</p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:89.42%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723354312184257704.png" /></div><div class="figure-desc">在这里插入图片描述</div></div></div></figure><p>用户名和密码都输入了,匹配是否成功</p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723354312525814995.png" /></div><div class="figure-desc">在这里插入图片描述</div></div></div></figure><p>匹配成功,进入/index,经过session校验后进入 首页</p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1723354312899004851.png" /></div><div class="figure-desc">在这里插入图片描述</div></div></div></figure><p>如果没有登陆,获取不到session,直接点击主页,是会重定向到 登陆界面的。</p>