简单用户登录功能数据在网页和服务器之间的传输,处理
简单用户登录功能数据在网页和服务器之间的传输,处理
目录
一、用什么来实现用户登录功能
用户的登录功能,界面使用html的form表单即可完成一个简单的账号密码输入,和数据传输到服务器,然后我们可以在数据库中寻找是否有响应的数据,有就登录成功,否则,可以重新引导回页面,当然,这里我们只是在服务器servlet内部内置了一个账号密码进行判断。
关于form表单,我简单举一个例子,下面这段代码是在网页创建一个账号密码输入的表单
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
建议用f12看一下整个请求到响应的过程<br>
<form action="login" method="get">
用户名:<input type="text" name="username"> <br>
密 码:<input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>
就是我们要输入的数据,type=“***”就是定义我们输入数据的类型,password就是表明这是一个密码字段,随后会对该段数据进行掩盖,不会以明文的形式展现,name则是定义这个字段的属性名。方便我们提取从请求中提取数据。
在网页上的显示则是下图:
二、数据怎么传到服务器?
我们在网页上输入了数据,那么数据又是怎样从网页进入到服务器的呢?这里就要先说一下web浏览器和web服务器之间的工作了。
这里先看一张图
我们可以看见,客户端是通过请求将数据送入到服务器的,那么这个请求又是怎么一回儿事呢?
我们在第一个点已经提到了,我们可以用form表单来代替浏览器发送请求,form表单中,action=“login”,这里就是数据要交给服务器的login来进行处理。method就是请求的方式,一般来说就是get请求和post请求。那么get请求和post请求又有什么区别呢?
如果我们使用post请求,那么参数就会以form data的形式传递,如果是用get请求,那么参数就会以url string 的形式进行传递,不会显示在请求url中,如图所示
这是post请求
这是get请求
如上述,我们可以清晰的看到,get请求在传入参数时,也会将参数在url中显示出来
我们在浏览器网址部分也可以发现。
既然如此,那我们是用get请求进行参数传入呢,还是用post请求进行参数传入呢?
这里看场景需求吧,我们可以列举一下get请求和post请求的区别,来进行参考(此处区别参考 )
1)GET请求一般用去请求获取数据,POST一般作为发送数据到后台时使用
2)GET请求也可传参到后台,但是其参数在浏览器的地址栏的url中可见,所以隐私性安全性较差,且参数长度也是有限制的, POST请求传递参数放在Request body中,不会在url中显示,比GET要安全,且参数长度无限制
3)GET请求刷新浏览器或回退时没有影响,POST回退时会重新提交数据请求
4)GET 请求可被缓存,POST 请求不会被缓存
5)GET 请求保留在浏览器历史记录, POST 请求不会保留在浏览器历史记录中
6)GET 请求可被收藏为书签,POST 不能被收藏为书签
7)GET请求只能进行url编码(application/x-www-form-urlencoded), POST支持多种编码方式(application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。)
8)GET请求比较常见的方式是通过url地址栏请求,POST最常见是通过form表单发送数据请求
小结一下,就是web浏览器通过form表单发送get请求或者post请求到web服务器,web服务器将请求送到web容器里面进行解析,然后调用servlet,最后返回响应到web浏览器。
三、服务器收到数据以后会进行怎么的处理?
服务器收到数据以后会进行怎么的处理呢?这里我们先看一张图片
客户端在发送请求到服务器之后,服务器就会把请求丢到web容器里面去,这个容器里面呢就是我们写的servlet之类的服务,然后servlet服务就会解析请求,根据我们的代码,创建servlet服务,然后进行初始化,调用service(),,最后将响应返回web服务器,销毁servlet,再由web服务器返回到客户端。
这是服务器收到数据以后的通用操作,那么具体到我们这个简单的用户登录功能,又是怎样的情况呢,这里先给大家看一下代码
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.omg.CORBA.PRIVATE_MEMBER;
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//从请求中获取相应的参数
//得到网页打印权限
PrintWriter out = response.getWriter();
String name = "majie";//内置用户
String pass = "mj666666";//内置密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 思考,在真实的项目中,接收到参数后要做什么动作?
// 真实的业务操作可能会有哪些动作呢?
if(username.equals(name)&&password.equals(pass)) {
//在控制台输出相应的参数
System.out.println("username = " + username );
System.out.println("password = " + password );
//给出响应
response.getWriter().println("Login Success!");
}
else {
if(!username.equals(name)) {
System.out.println("账号输入不正确");
response.getWriter().println("账号输入不正确");
}
else {
System.out.println("密码输入不正确");
response.getWriter().println("密码输入不正确");
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
之所以说这个是简单的用户登录,是因为我们这里没有涉及数据库之类的操作,只是在服务器内部设置了一个账号密码。
通过代码,我们可以看见,我们调用了request.getParameter(“属性名”)的方法,拿到了我们设置的form表单中的账号和密码,然后就是将账号密码与我们内置的账号密码进行比对,根据结果,有不同的响应。
四、如果是真实的业务操作,在收到数据以后,服务器可能会有哪些操作?
这里我们深入思考一下,如果是真实业务操作,那么服务器在收到数据之后,一个是要操作数据库,看看数据库里面是否有对应的账号和密码,如果有那么我们进行登录,如果没有,要么显示账号错误或密码错误,然后重新导回到登录页面,要么引导用户进入注册页面,同时,我们还要生成对应的日志,记录下我们操作数据库的时间和步骤,以便数据的恢复。
这次分享就到这里了,学习路上,诸君共勉,我们下次见。