目录

简单用户登录功能数据在网页和服务器之间的传输,处理

简单用户登录功能数据在网页和服务器之间的传输,处理

目录


一、用什么来实现用户登录功能

用户的登录功能,界面使用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则是定义这个字段的属性名。方便我们提取从请求中提取数据。

在网页上的显示则是下图:

https://i-blog.csdnimg.cn/blog_migrate/4628dd19a872c02f2de3cb8936facd20.png

二、数据怎么传到服务器?

我们在网页上输入了数据,那么数据又是怎样从网页进入到服务器的呢?这里就要先说一下web浏览器和web服务器之间的工作了。

这里先看一张图

https://i-blog.csdnimg.cn/blog_migrate/aaf4e08caa628bf1aa2cde1a641417ba.png

我们可以看见,客户端是通过请求将数据送入到服务器的,那么这个请求又是怎么一回儿事呢?

我们在第一个点已经提到了,我们可以用form表单来代替浏览器发送请求,form表单中,action=“login”,这里就是数据要交给服务器的login来进行处理。method就是请求的方式,一般来说就是get请求和post请求。那么get请求和post请求又有什么区别呢?

如果我们使用post请求,那么参数就会以form data的形式传递,如果是用get请求,那么参数就会以url string 的形式进行传递,不会显示在请求url中,如图所示

这是post请求

https://i-blog.csdnimg.cn/blog_migrate/87c6bcf43928b33b860cadd80e7c302d.png

这是get请求

https://i-blog.csdnimg.cn/blog_migrate/4662012e700d245d36a932b842902538.png

如上述,我们可以清晰的看到,get请求在传入参数时,也会将参数在url中显示出来

https://i-blog.csdnimg.cn/blog_migrate/6b36fdb14e481678ce1be43f596b953c.png

我们在浏览器网址部分也可以发现。

既然如此,那我们是用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浏览器。

三、服务器收到数据以后会进行怎么的处理?

服务器收到数据以后会进行怎么的处理呢?这里我们先看一张图片

https://i-blog.csdnimg.cn/blog_migrate/cec9a1500ec5fb98fb9311a123ea540c.jpeg

客户端在发送请求到服务器之后,服务器就会把请求丢到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表单中的账号和密码,然后就是将账号密码与我们内置的账号密码进行比对,根据结果,有不同的响应。

https://i-blog.csdnimg.cn/blog_migrate/a4888d4bf399a7ccd304293d5907e615.png

https://i-blog.csdnimg.cn/blog_migrate/064a70de4a85879cbf9e1366a3d16bf4.png

https://i-blog.csdnimg.cn/blog_migrate/6d821e636aed50dc5b1c810ab8e7edd2.png

四、如果是真实的业务操作,在收到数据以后,服务器可能会有哪些操作?

这里我们深入思考一下,如果是真实业务操作,那么服务器在收到数据之后,一个是要操作数据库,看看数据库里面是否有对应的账号和密码,如果有那么我们进行登录,如果没有,要么显示账号错误或密码错误,然后重新导回到登录页面,要么引导用户进入注册页面,同时,我们还要生成对应的日志,记录下我们操作数据库的时间和步骤,以便数据的恢复。

这次分享就到这里了,学习路上,诸君共勉,我们下次见。