Servlet 实现一个RESTful的用户注册API

什么是RESTful?

RESTful(Representational State Transfer)是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

具体实现逻辑

利用RESTful实现一个注册页面,他的逻辑很简单。前端从html页面中获取到用户的相关输入,然后通过AJAX向后台发送请求,后台解析请求,从中获取数据,并将其存储到数据库。等后台处理好请求信息之后,返回前端相关的信息,这就是整个API实现的逻辑。

项目结构

在这里插入图片描述
笔者所用的开发环境为IDEA,这里所展示的就是整个项目的目录结构。下面我就对整个项目目录做相关的介绍。

  • daos目录
    daos目录下存放的是的一些数据持久层访问的DAO模型,其中就有我们本次注册要用的而且实现了的UserDaoImpl类,它是JAVA对象和数据库的桥梁。
    在这里插入图片描述
  • models目录
    models目录中存放的是我们一些项目的数据模型,比如用户注册中的用户模型就被我们抽象为JAVA对象,其实现类便存放在这个目录下。
    在这里插入图片描述
  • servlet目录
    servlet目录中存放了一些处理Http请求的JAVA Servlet Class,这些类帮助我们完成请求的处理,是整个项目的核心。
    在这里插入图片描述
  • utils目录
    utils目录中存放了一些我们自定义的工具类,这些类的实例化对象是帮助我们完成请求的处理的工具,例如我们这个项目中的MysqlSington,他就是一个帮助我们连接Mysql的工具类。
    在这里插入图片描述

前端页面源码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        #regbox{
            margin: auto;
            margin-top: 30px;
            text-align: center;
            align-items: center;
        }
    </style>
    <script type="text/javascript">
        //入口函数
        window.onload = function(){
            var usernameDocument = document.getElementById("username");
            var passwordDocument = document.getElementById("password");
            var btnSubmit = document.getElementById("submit");

            btnSubmit.onclick = function () {
                var username = usernameDocument.value;
                var password = passwordDocument.value;
                if(!(username && password)){
                    alert("请填写完整的信息");
                    return;
                }

                //生成post url
                var postFormUrl = "username="+username + "&" + "password=" + password;

                //向后台发送AJAX请求
                var AJAX = new XMLHttpRequest();

                AJAX.open("POST", "http://localhost:8080/api-test/register",true);
                //设置请求格式为post url形式
                AJAX.setRequestHeader("content-type","application/x-www-form-urlencoded");
                //向后台发送AJAX请求
                AJAX.send(postFormUrl);
                //监听AJAX的异步返回
                AJAX.onreadystatechange = function () {
                    //判断返回状态码是否正确
                    if(AJAX.status == 200 && AJAX.readyState == 4){
                        var resMessage = AJAX.responseText;
                        alert(resMessage);
                    }
                }

            }
        }
    </script>
</head>
<body>
    <div id="regbox">
        <span>username</span>
        <br><br>
        <input type="text" id="username">
        <br><br>
        <span>password</span>
        <br><br>
        <input type="password" id="password">
        <br><br>
        <button id="submit">注册</button>
    </div>
</body>
</html>

注册API的Servlet源码

package com.atomlink.api.test.servlet;

import com.atomlink.api.test.daos.UserDaoImpl;
import com.atomlink.api.test.models.User;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;


public class RegisterServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8"); //设置请求中内容的编码格式,防止中文乱码
        resp.setContentType("text/html;charset=UTF-8"); //设置相应MIME及编码格式

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        UserDaoImpl tmp = new UserDaoImpl();

        try {
            tmp.addNew(new User(username,password,1,1));
            resp.getWriter().write("注册成功");
        } catch (SQLException e) {
            e.printStackTrace();
            resp.getWriter().write("注册失败");
        }

    }
}

总结

通过设计API来实现RESTful的设计模式,这样我们设计出来的web程序可以有良好的适应性。因为在我们整个项目中,我们的后端根本就不在乎前端页面是怎么样的,后端完全的转移到数据的管理中。而我们的前端也不要了解后台的逻辑是什么,只需要在乎后台传给我们什么的数据,进而去管理我们的前端UI界面。这样只要我们接口的规范性得到了同一,那么我们就可以完成完完整整的前后端分离的开发模式。
除此之外,我们的web程序将不仅仅使用适用于PC或者Mobile端的网页。只要是符合我们后台API设计的任何应用,都可以通过我们的API获取到想要的数据,进而完成前端的数据持久。

猜你喜欢

转载自blog.csdn.net/hbn13343302533/article/details/96983185