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());
}
引用 皆我百晓生 小程序回复内容作答:
首先,请确保您的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 生成】
问题的根本原因是在$.ajax
的success
函数中,使用了location.replace("show.jsp")
来跳转到show.jsp
页面。这样做实际上是在跳转到一个新页面,而不是在当前页面接收到ajax传递的参数。因此,在show.jsp
中接收到的参数始终是null
。
要解决这个问题,可以使用以下方法:
show.jsp
页面的头部添加如下代码,用于接收ajax传递的参数:<%
String start = request.getParameter("start");
String destination = request.getParameter("destination");
String flag = request.getParameter("flag");
%>
show.jsp
页面中使用上述定义的变量start
,destination
和flag
来显示接收到的参数。<div>
Start: <%=start%>
</div>
<div>
Destination: <%=destination%>
</div>
<div>
Flag: <%=flag%>
</div>
这样就可以在show.jsp
页面正确显示接收到的参数值。
请注意,这种方式只适用于在同一次请求中将参数从一个jsp页面传递到另一个jsp页面。如果需要在多个请求之间传递参数,可以考虑使用session、cookie或URL参数来传递数据。
写个按钮 点击 执行你的jump方法。。。你jump都不是调用的