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

引用 皆我百晓生 小程序回复内容作答:
首先,请确保您的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获取到了输入框的值。

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

【以下回答由 GPT 生成】

问题的根本原因是在$.ajaxsuccess函数中,使用了location.replace("show.jsp")来跳转到show.jsp页面。这样做实际上是在跳转到一个新页面,而不是在当前页面接收到ajax传递的参数。因此,在show.jsp中接收到的参数始终是null

要解决这个问题,可以使用以下方法:

  1. 保留ajax的传参代码不变。
  2. show.jsp页面的头部添加如下代码,用于接收ajax传递的参数:
<%
String start = request.getParameter("start");
String destination = request.getParameter("destination");
String flag = request.getParameter("flag");
%>
  1. 然后,可以在show.jsp页面中使用上述定义的变量start,destinationflag来显示接收到的参数。
<div>
    Start: <%=start%>
</div>
<div>
    Destination: <%=destination%>
</div>
<div>
    Flag: <%=flag%>
</div>

这样就可以在show.jsp页面正确显示接收到的参数值。

请注意,这种方式只适用于在同一次请求中将参数从一个jsp页面传递到另一个jsp页面。如果需要在多个请求之间传递参数,可以考虑使用session、cookie或URL参数来传递数据。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

写个按钮 点击 执行你的jump方法。。。你jump都不是调用的