前后端交互(入门篇)

目录

▐ 前端准备工作

▐ 后端接收并响应

▐ dao层与数据库交互

▐ 后端过滤器拦截

▐ 测试


 前端准备工作

在html文件中创建一个简单的登陆表单,点击登录按钮向后端程序提交表单信息

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<form action="http://127.0.0.1:8088/stuServer/login" method="post">
			账号:<input type="text" name="account" value="" />
			<br />
			密码:<input type="password" name="password" value="" />
			<br />
			<input type="submit" value="登录" />
		</form>
	</body>
</html>

▐ 后端接收并响应

 

• 在后端创建对应的Servlet处理程序

让类继承HttpServlet并重写doPost方法,接收前端请求,与数据库交互,向前端做出响应。

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.io.PrintWriter;

public class LoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("post");
        String account =req.getParameter("account");
        String password =req.getParameter("password");
        System.out.println(account);
        System.out.println(password);

        //调用jdbc与数据库交互
        LoginDao loginDao = new LoginDao();
        boolean res = false;
        try {
            res = loginDao.login(account, password);
        } catch (Exception throwables) {
            //throwables.printStackTrace();
            System.out.println("稍后再试!");
        }

        //做出响应
        PrintWriter writer = resp.getWriter();
        if (res){
            writer.write("<b>登录成功</b>");
        }else {
            writer.write("<b>登录失败</b>");
        }

    }
}

• 在web.xml文件中配置Servlet访问地址 

    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>stuServer.web.LoginServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

▐ dao层与数据库交互

这里所用到的是之前JDBC的知识,不做过多解读,如图所示,所要注意的是数据库名是否正确。

📖JDBC代码: 

import  com.mysql.cj.jdbc.Driver;
import java.sql.*;

public class LoginDao {
    public boolean login(String account,String password) throws SQLException {
        DriverManager.registerDriver(new Driver());
        String url="jdbc:mysql://127.0.0.1:3306/chatdb?serverTimezone=Asia/Shanghai";
        String user ="root";
        String pwd="root";
        Connection connection =null;
        PreparedStatement ps =null;
        try {
            connection = DriverManager.getConnection(url, user, pwd);
            ps =connection.prepareStatement("Select account from user where account=? and password=?");
            ps.setObject(1, account);
            ps.setObject(2, password);
            ResultSet rs = ps.executeQuery();
            return rs.next();
        }finally {
            if (ps!=null){
                ps.close();
            }
            if (connection!=null){
                connection.close();
            }
        }
    }
}

 

▐ 后端过滤器拦截

这里引出了过滤器的概念,所以先给大家介绍下过滤器

➱ 过滤器是JavaEE规范中定义的一种技术,可以让请求达到目标Servlet之前,先进入到过滤器中,在过滤器中统一进行一些拦截处理,当处理完成后,可以继续向后执行到达目标Servlet,如果配置了多个过滤器,也可以进入到下一个过滤器。

➱ 一个过滤器可以配置给多个资源使用,一个资源也可以配置多个过滤器,按照配置顺序调用。

➱ 过滤器的作用:提高代码复用性,提高可维护性。

➱ 过滤器的使用场景:统一编码过滤、权限验证、跨域过滤。

今天的案例将会用到编码过滤,所以接下来让我们来搭建一个编码过滤器吧!

• 创建过滤器

import javax.servlet.*;
import java.io.IOException;

public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("编码过滤器");
        //设置请求编码集
        servletRequest.setCharacterEncoding("utf-8");
        //设置响应编码集
        servletResponse.setContentType("text/html;charset=utf-8");
        //让请求离开过滤器继续向下执行,下一个可能是过滤器或目标访问的servlet
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

• 在web.xml文件中配置过滤器

    <!--    注册编码过滤器-->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>stuServer.filter.EncodingFilter</filter-class>
    </filter>
    <!--    配置哪些地址可以进入到编码过滤器-->
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>  <!-- /* 表示所有向后端发送的请求,都进入到编码过滤器中-->
    </filter-mapping>

📖关于过滤器的创建更详细的介绍可参考:JavaEE:过滤器_javaee中的过滤器作用-CSDN博客 

▐ 测试

最终我们在浏览器中进行测试,点击登录按钮,若数据库中存在所输入的账号和密码,根据后端所写程序响应 "登录成功",反之数据库没有则显示 "登录失败"。

这里有个小问题:

如果按照这样的请求方式,当网页与后端交互时,前端不能再进行其他操作,服务器端响应回来的内容会把整个浏览器中的内容覆盖掉,所以这种请求方式在前后端交互时显得很不友好。

这里就涉及到同步请求和异步请求的问题了,下一篇会详细介绍~~



▐ 结语

本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

海漫浩浩,我亦苦作舟!大家一起学习,一起进步!    本人微信:g2279605572  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值