前端无法获取在servlet后台传回的数据

本文分享了一次前后端数据交互失败的排查经历,详细介绍了从登录页面表单提交到后端数据验证的过程,最终发现数据库查询语句遗漏了密码字段,通过修正SQL语句,实现了前后端数据的正确交互。

前端获取后台数据失败解决方法


在写完登录页面测试的时候,发现前端已经获取了表单内容,但后台总是无法传回正确的数据,焦灼了3天,最后终于在别人的帮忙找到了问题,代码如下:
js代码:
// An highlighted block
layui.use(['form','jquery','layer'],function(){
    var form  = layui.form,
        $ = layui.$,
        layer = layui.layer;
    form.on('submit(submitBtn)',function(obj){
        $.ajax({
            url:getContextPath()+'/MemberServlet/login',
            type:'POST',
            data:$(".layui-form").serialize(), // 取得表单的所有数据内容
            success:function(data){
                alert(data);
                if(data =="success"){
                    layer.msg('用户登录成功',{time:2000,icon:1,end:function(){
                        location.href=getContextPath()+"/pages/back/index.jsp";
                        }})
                }else{
                    layer.msg('用户登录失败',{time:2000,icon:2})
                }
            }
        });
    });
})

servlet代码:

public class MemberServlet extends DispatcherServlet {
    public void login() {
        // 接收表单参数
        String mid = super.request.getParameter("mid");
        String password = super.request.getParameter("password");
        // 数据验证
        if (ValidateUtils.validateEmpty(mid) && ValidateUtils.validateEmpty(password)) {  //判断true
            // 将数据保存在对象之中
            Member vo = new Member();
            vo.setMid(mid);
            vo.setPassword(new MD5Code().getMD5ofStr("{[" + password + "]}")); // 加盐处理
            System.out.println(vo.getPassword()+"***");
            try {
                Map<String, Object> map = ServiceFactory.getIMemberServiceInstance().login(vo);
                Member member = (Member) map.get("member");
                if (member.getMid() != null) {
                    super.request.getSession().setAttribute("member", map.get("member")); //保存对象数据
                    super.response.getWriter().print("success");
                }else {
                    super.response.getWriter().print("error");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            try {
                super.response.getWriter().print("error");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在艰苦奋斗3天后发现这两个文件都没有错,而是在定义接口实现类的数据库查询信息里面没有写password,导致后台只能比对mid而无法比对password


修改前:

 public Member findLogin(Member vo) throws SQLException {
        Member member = new Member();
        String sql = "SELECT mid,name,phone,flag FROM member WHERE mid=? AND status=7";
        super.pstmt = super.conn.prepareStatement(sql);
        super.pstmt.setString(1,vo.getMid());
        super.pstmt.setString(2,vo.getPassword());
        ResultSet rs = super.pstmt.executeQuery();
        if (rs.next()){
            member.setMid(rs.getString(1));
            member.setName(rs.getString(2));
            member.setPhone(rs.getString(3));
            member.setFlag(rs.getInt(4));
        }
        return member;
    }

错误在第三行,应该加上password


修改后:

 String sql = "SELECT mid,name,phone,flag FROM member WHERE mid=? AND password=? AND status=7";

这样就能完美运行了。

### 实现后端生成Excel文件并提供在线预览 #### 使用Java实现在线生成和预览Excel文件 为了实现在后端生成Excel文件并提供在线预览的功能,可以采用多种技术和库来完成这一目标。以下是基于Java的一个解决方案。 通过`Apache POI`库可以在服务器端创建Excel文档,并将其发送到客户端浏览器进行展示或下载。此方法允许动态生成工作表内容,并确保兼容性良好[^3]。 ```java import org.apache.poi.ss.usermodel.*; import javax.servlet.ServletOutputStream; import java.io.IOException; public class ExcelGenerator { public void exportExcel(ServletOutputStream outputStream, String sheetName) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(sheetName); // 创建一些示例数据行 Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello"); // 将Workbook写入输出流 workbook.write(outputStream); workbook.close(); } } ``` 当调用上述函数时,会触发Servlet响应对象中的`getOutputStream()`方法获取输出流实例,进而把新建立的工作簿对象序列化成二进制形式传送给用户的HTTP请求中去显示出来。 对于Web应用程序而言,在线查看Excel通常不是直接渲染`.xlsx`格式的内容而是转换为其他易于解析的形式如HTML表格结构或者利用第三方服务API来进行可视化呈现[^1]。 一种常见的做法是在Vue.js前端框架里接收到来自后台传递过来的数据之后再借助于像`xlsx`这样的JavaScript库来做进一步处理以便能够在页面上直观地展现给最终用户看[^2]。 另一种方式则是让后端负责整个流程——不仅限于生产电子表格本身而且还要能够即时转化为适合网页环境下的表现样式,比如PDF、图片甚至纯文本链接指向临时存储位置上的资源文件[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值