果然又报错了 2023-08-28 23:14 采纳率: 50%
浏览 9

jsp用ajax传参,接收值为null,tomcat服务器接收不到参数

jsp传参,接受值为null
jsp中用ajax想另一个jsp传参,运行时接收的地方执行了两次,第一次接收到参数,第二次为null

传参的Ajax


<script>
    function jump1(){
        var start=document.getElementById("start").value;
        var destination=document.getElementById("destination").value;
        var flag="2";
        $.ajax({
            type:"POST",
            dataType:"text",
            url:"show.jsp",
            async:false,
            data: {
                "start":start,"destination":destination,"flag":flag
            },
            success:function (){
                let flag="2";
                location.replace("show.jsp");
                window.sessionStorage.setItem('flag', flag);
            },
            error:function (){
            },
        })
    }
</script>

接收的jsp的部分代码


<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.Objects" %>

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="show.css">
</head>

<div class="container">
    <script>
        var flag = window.sessionStorage.getItem('flag');
        console.log(flag);
    </script>
    <%
        String start=request.getParameter("start");
        String destination=request.getParameter("destination");
        String flag=request.getParameter("flag");

        System.out.println(start);
        System.out.println(destination);
        System.out.println(flag);

        Connection conn= null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ticket","root","root");
        } catch (SQLException ignored) {
        }

        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("驱动添加成功,可以进行数据库连接了");
        }catch (Exception e){
            System.out.println("驱动加载失败,错误原因是:"+e.getMessage());
        }


img


执行结果
最终执行还是查询失败,应该是最终获取的参数为null
在网上看到执行两次是因为idea执行一次,tomcat服务器执行了一次,所以猜测是服务器没有拿到参数,不知道怎么解决
运行配置:idea,tomcat9,mysql

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-08-29 07:21
    关注

    引用 皆我百晓生 小程序回复内容作答:
    首先,请确保您的Ajax请求已经成功发送到服务器,并且URL正确。

    您可以尝试使用Chrome浏览器的开发者工具,通过查看网络请求来验证是否已经发送Ajax请求,并且请求的URL和参数是否正确。

    如果确保请求已经发送成功,但是服务器仍然无法接收到参数,可能是由于缺少请求体解析器。

    在Tomcat中,默认情况下,如果使用的是POST方法并且请求的Content-Type是application/x-www-form-urlencoded或multipart/form-data,Tomcat会使用默认的请求体解析器(org.apache.catalina.connector.Request.parseParameters)来解析请求参数。

    但是,如果您的请求内容类型为text/plain或application/json等,默认的请求体解析器将无法解析参数。

    在这种情况下,您可以尝试将请求体解析器配置为适用于您的请求的解析器。可以通过修改Tomcat的配置文件(例如web.xml)来进行配置。

    例如,对于Tomcat 8或更高版本,可以在web.xml中添加以下配置:

    <web-app>
      ...
      <multipart-config>
        <location>/tmp</location>
        <max-file-size>20848820</max-file-size>
        <max-request-size>418018841</max-request-size>
        <file-size-threshold>1048576</file-size-threshold>
      </multipart-config>
    </web-app>
    

    其中,location设置为解析上传文件的临时存储位置,其他三个配置用于限制文件大小。您可以根据实际情况进行调整。

    如果您的请求内容类型是text/plain或application/json,则需要使用自定义的请求体解析器进行解析。您可以编写一个实现Servlet的类,并在web.xml中进行配置。

    此外,请确保您的JSP页面已经正确引入了jQuery库,以便使用$.ajax方法。

    再次检查您的代码,确保在发送Ajax请求之前,确实通过getElementById获取到了输入框的值。

    希望这些信息对您有所帮助。如果问题仍然存在,请提供更多的信息,以便我能够更好地帮助您解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月28日

悬赏问题

  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误