Oolongtea879 2024-05-21 14:52 采纳率: 16.7%
浏览 1

idea传参问题求解

DEBUG - ==> Preparing: insert into expense values(default,?,?,now(),?,?,?,?)
DEBUG - ==> Parameters: qinshui(String), 100.0(Double), 22(String), 12(String), 无(String), 待审核(String)

methodName=expenseAdd&type=%E9%80%9A%E4%BF%A1%E8%B4%B9%E7%94%A8&amount=100&itemdesc=11&mgrid=12&expdesc=22

idea java 代码出现这样的问题 传递参数总是失败

这个是Servlet 实现该功能的代码 
```java

  String mgrid = req.getParameter("mgrid");
        String expdesc = req.getParameter("expdesc");
        String empid=((Employee)req.getSession().getAttribute("emp")).getEmpid();
        //创建报销单对象存储报销单信息
        Expense expense=new Expense();
        expense.setEmpid(empid);
        expense.setExpdesc(expdesc);
        expense.setTotalamount(totalamount);
        expense.setNextauditor(mgrid);
        expense.setStatus("待审核");
        expense.setLastResult("无");

```

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-05-21 14:52
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是解决在使用IntelliJ IDEA进行Java开发时,Servlet接收参数失败的问题。

    【问题出现原因】:根据您提供的信息,问题可能出现在以下几个方面:

    1. 参数名不匹配:在您的SQL语句中使用的参数名(如qinshui22等)和您在Servlet代码中使用的参数名(如mgridexpdesc等)不一致。
    2. 类型不匹配:您在SQL语句中使用的是字符串类型,但在Servlet代码中totalamount变量的类型是Double,需要确保前端传递的参数类型与后端接收的类型一致。
    3. 前端传递参数问题:前端传递的参数格式可能不正确,或者请求的URL与后端期望的不匹配。
    4. 会话管理问题:从会话中获取Employee对象时可能存在问题,如果会话中没有正确设置或Employee对象未正确序列化,可能导致empid获取失败。

    【问题解决方案】:

    1. 确保参数名一致:检查前端传递的参数名是否与后端代码中的参数名一致。
    2. 检查类型匹配:确保前端传递的参数类型与后端期望接收的类型一致,必要时进行类型转换。
    3. 检查会话管理:确保会话中正确设置了Employee对象,并且getEmpid()方法能够正确返回值。
    4. 调试和日志:在Servlet代码中添加更多的日志输出,以帮助确定参数在哪个环节丢失或错误。

    【提供代码】: 以下是修改后的Servlet代码示例,用于确保参数正确接收并处理:

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        try {
            // 设置请求的字符编码
            req.setCharacterEncoding("UTF-8");
    
            // 获取参数
            String mgrid = req.getParameter("mgrid");
            String expdesc = req.getParameter("expdesc");
            double totalamount = Double.parseDouble(req.getParameter("amount")); // 确保类型转换正确
            String itemdesc = req.getParameter("itemdesc");
            String status = "待审核";
            String lastResult = "无";
    
            // 从会话中获取Employee对象
            Employee emp = (Employee) req.getSession().getAttribute("emp");
            if (emp != null) {
                String empid = emp.getEmpid();
                // 创建报销单对象存储报销单信息
                Expense expense = new Expense();
                expense.setEmpid(empid);
                expense.setExpdesc(expdesc);
                expense.setTotalamount(totalamount);
                expense.setNextauditor(mgrid);
                expense.setStatus(status);
                expense.setLastResult(lastResult);
    
                // TODO: 保存expense到数据库的逻辑
    
                // 响应结果
                resp.setContentType("text/html;charset=UTF-8");
                PrintWriter out = resp.getWriter();
                out.println("报销单创建成功!");
                out.flush();
                out.close();
            } else {
                // 处理会话中没有Employee对象的情况
                resp.sendError(HttpServletResponse.SC_UNAUTHORIZED, "未登录或会话失效");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    【代码运行方式】:

    1. 将上述代码替换到您的Servlet中。
    2. 确保您的Web服务器(如Tomcat)正在运行。
    3. 通过浏览器或Postman等工具发送正确的请求到Servlet。

    【代码预期运行结果】: 如果一切配置正确,您应该能够看到"报销单创建成功!"的消息。

    【推荐相关链接】:

    1. IntelliJ IDEA官方文档
    2. Java Servlet规范
    3. HTTP状态码说明
    4. Java类型转换
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月21日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画