JavaWeb:(练习)九、Servlet数据交互、XMLHttpRequest、JSON、AJAX、AXIOS练习

JavaWeb:(练习)九、Servlet数据交互、XMLHttpRequest、JSON、AJAX、AXIOS练习

一、练习目标

​ 使用XMLHttpRequest、JSON、AJAX、AXIOS技术优化练习八。

练习八链接:JavaWeb:(练习)八、Servlet前端发送数据到后端练习

​ 目标:制作一个前端登录界面,制作一个简单的web服务器,连接数据库,验证从前端界面提交的表单数据。

二、使用XMLHttpRequest、JSON、AJAX优化代码

1、目的

​ 直接提交表单数据到后端,后端直接相应,把原网页覆盖掉,为同步请求方式。前后端分离下,使用异步方式请求,发送请求和页面操作不同步。为此使用浏览器提供的XMLHttpRequest对象,使用AJAX技术(无刷新状态更新页面,并且实现异步提交)

​ 由于前后端是不同的代码,他们之间的数据格式并不一致,在传输数据时,数据需要一个标准统一的数据格式。JSON是轻量级的数据交换格式。

2、修改

​ 在练习八的基础上,修改后端LoginServlet代码。将前端HTML、CSS、JavaScript代码合在一个HTML代码中,修改登陆成功后的跳转前端页面代码。

3、修改后端代码:Java-LoginServlet

package com.ffyc.webback.servlet;

import com.ffyc.webback.Dao.LoginDao;
import com.ffyc.webback.model.User;

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

public class LoginServlet_backups1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // System.out.println("doGet");
        resp.setContentType("text/html;charset=utf-8");
        // 得到表单数据
        String name = req.getParameter("account");
        String password = req.getParameter("password");
        User user = LoginDao.getUserObject(name, password);

        if (user == null) {
            resp.getWriter().println("账户或密码错误");
        } else {
            resp.getWriter().println("登陆成功");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // System.out.println("doPost");
        resp.setContentType("text/html;charset=utf-8");
        // 得到表单数据
        String name = req.getParameter("account");
        String password = req.getParameter("password");
        User user = LoginDao.getUserObject(name, password);

        if (user == null) {
            resp.getWriter().println("账户或密码错误");
        } else {
            resp.getWriter().println("登陆成功");
        }
    }
}

4、修改前端代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>登录</title>
		
		<style type="text/css">
		
			body{
				background-image: url(img/login_bg.jpg);
				background-size: 100%;
			}
			
			.box{
				background-color: whitesmoke;
				width: 400px;
				height: 300px;
				border-radius: 30px;
				
				margin: auto;
				margin-top: 200px;
				text-align: center;
			}
			
			span,input{
				float: left;
			}
			
			.account_label_class,.password_label_class{
				margin-top: 40px;
				margin-left: 40px;
			}
			
			.account_class,.password_class,.account_tips_class,.password_tips_class{
				margin-top: 40px;
				margin-left: 10px;
			}
			
			.submit_button_class{
				width: 80px;
				height: 40px;
				background-color: skyblue;
				border-radius: 10px;
				
				margin-left: 160px;
				margin-top: 40px;
			}
		</style>
		
		<script type="text/javascript">
		
			function login(){
				var account = document.getElementById("account_id").value;
				var password = document.getElementById("password_id").value;
				//表单验证
				
				//发送Ajax请求
				var httpObj = new XMLHttpRequest();
				httpObj.open("GET", "http://127.0.0.1:8080/WebBack/login?account=" + account + "&password=" + password, true);
				httpObj.send();
				httpObj.onreadystatechange = function(){
					// alert();
					if (httpObj.readyState == 4) {
						// 接收json对象
						var userObj = httpObj.responseText;
						if (userObj == 0) {
							document.getElementById("account_tips_id").innerHTML = "账户或密码错误";
						} else {
							// 在浏览器进程中存储 json 数据,关闭浏览器销毁
							sessionStorage.setItem("userInfo", userObj);
							location.assign("main.html");
						}
					}
				}
			}
			
		</script>
		
	</head>
	<body>
		<div class="box">
			<form action="http://127.0.0.1:8080/WebBack/login" method="get" >
				<span class="account_label_class">账户:</span>
				<input type="text" name="account_name" id="account_id" class="account_class" />
				<span class="account_tips_class" id="account_tips_id"></span>
				<div style="clear: left;"></div>
				<br />
				
				<span class="password_label_class">密码:</span>
				<input type="password" name="password_name" id="password_id" class="password_class" />
				<span class="password_tips_class"></span>
				<div style="clear: left;"></div>
				<br />
				
				<input type="button" value="登录" class="submit_button_class" onclick="login()" />
				<!-- <input type="submit" value="登录" class="submit_button_class" /> -->
			</form>
		</div>
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
		<script type="text/javascript">
			function show(){
				// 获取浏览器存储的 json 对象
				var s = sessionStorage.getItem("userInfo");
				if (s == null) {
					location.replace("login.html");
					return;
				} 
				// 把 json 对象转化为 html 支持的访问对象格式
				var userObj = eval("(" + s + ")");
				document.getElementById("name").innerHTML = userObj.name;
				document.getElementById("password").innerHTML = userObj.password;
			}
		</script>
		
	</head>
	<body onload="show()">
		<h1>登陆后页面</h1>
		账户:<span id="name"></span>	<br />
		密码:<span id="password"></span>
	</body>
</html>

三、使用AXIOS框架优化代码

1、修改

​ 修改前端登录页面代码,修改前端登陆成功后的页面代码。

2、修改前端代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>登录</title>
		
		<style type="text/css">
		
			body{
				background-image: url(img/login_bg.jpg);
				background-size: 100%;
			}
			
			.box{
				background-color: whitesmoke;
				width: 400px;
				height: 300px;
				border-radius: 30px;
				
				margin: auto;
				margin-top: 200px;
				text-align: center;
			}
			
			span,input{
				float: left;
			}
			
			.account_label_class,.password_label_class{
				margin-top: 40px;
				margin-left: 40px;
			}
			
			.account_class,.password_class,.account_tips_class,.password_tips_class{
				margin-top: 40px;
				margin-left: 10px;
			}
			
			.submit_button_class{
				width: 80px;
				height: 40px;
				background-color: skyblue;
				border-radius: 10px;
				
				margin-left: 160px;
				margin-top: 40px;
			}
		</style>
		
		<script src="js/axios.min.js" type="text/javascript" charset="UTF-8"></script>
		
		<script type="text/javascript">
		
			function login(){
				var account = document.getElementById("account_id").value;
				var password = document.getElementById("password_id").value;
				//表单验证
				
				// 使用 axios 技术
				axios.get("http://127.0.0.1:8080/WebBack/login?account=" + account + "&password=" + password)
				.then( function(resp) {
					if (resp.data == 0) {
						document.getElementById("account_tips_id").innerHTML = "不正确";
					} else {
						sessionStorage.setItem("name",resp.data.name);
						sessionStorage.setItem("password",resp.data.password);
						location.assign("main.html");
					}
				})
			}
			
		</script>
		
	</head>
	<body>
		<div class="box">
			<form action="http://127.0.0.1:8080/WebBack/login" method="get" >
				<span class="account_label_class">账户:</span>
				<input type="text" name="account_name" id="account_id" class="account_class" />
				<span class="account_tips_class" id="account_tips_id"></span>
				<div style="clear: left;"></div>
				<br />
				
				<span class="password_label_class">密码:</span>
				<input type="password" name="password_name" id="password_id" class="password_class" />
				<span class="password_tips_class"></span>
				<div style="clear: left;"></div>
				<br />
				
				<input type="button" value="登录" class="submit_button_class" onclick="login()" />
				<!-- <input type="submit" value="登录" class="submit_button_class" /> -->
			</form>
		</div>
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
		<script type="text/javascript">
			function show(){

				var name = sessionStorage.getItem("name");
				var password = sessionStorage.getItem("password");
				if (name == null ) {
					location.replace("login.html");
					return;
				} 
				document.getElementById("name").innerHTML = name;
				document.getElementById("password").innerHTML = password;
			}
		</script>
		
	</head>
	<body onload="show()">
		<h1>登陆后页面</h1>
		账户:<span id="name"></span>	<br />
		密码:<span id="password"></span>
	</body>
</html>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值