【问题标题】:unable to get the passed data from servlet [duplicate]无法从 servlet 获取传递的数据 [重复]
【发布时间】:2016-05-30 20:36:56
【问题描述】:

我正在编写一个与常规 jsp-servlet 交互正常工作的程序。但是当我使用 ajasx 提交相同的内容时,它无法正常工作。下面是我的代码。

JSP-Servlet(无 Ajax)

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form name="f1" id="f1" method="post" action="Controller">
        <input type="text" name="name1" id="name1" /> <input type="submit" />
    </form>
</body>
</html>

控制器

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String nsme = request.getParameter("name1");
        request.setAttribute("name", nsme);
        request.getRequestDispatcher("index1.jsp").forward(request, response);
    }

index1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <input type="text" value="${name}" />
</body>
</html>

使用 Ajax

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript"
    src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
</head>
<body>
    <form name="f1" id="f1">
        <input type="text" name="name1" id="name1" /> <input type="submit"
            name="x" id="x" />
    </form>
    <script type="text/javascript" src="SampleJS.js"></script>
</body>
</html>

SampleJS.js

$('#x').click(function() {
    $.ajax({
        type : 'POST',
        url : 'Controller',
        success : function(data) {
            console.log(data)
        },
    });
});

控制器

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String nsme = request.getParameter("name1");
        request.setAttribute("name", nsme);
        request.getRequestDispatcher("index1.jsp").forward(request, response);
    }

index1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <input type="text" value="${name}" />
</body>
</html>

这里当我使用第一种方法时,名称打印正确。当我将它与 AJAX 一起使用时,令我惊讶的是,文本框中没有打印任何内容。

基本上,我们使用request.getRequestDispatcher("GetCaseData.jsp").forward(request, response); 转到另一个页面。在我的情况下,它的替代方案是什么? 请让我知道我哪里出错了,我该如何解决这个问题。

【问题讨论】:

    标签: java jquery ajax jsp servlets


    【解决方案1】:

    在你的js文件中添加formData之后
    检查您的浏览器控制台

    您可以在控制台中找到打印的整个 index1.jsp html 内容 ${name} 替换为您输入的名称。
    AJAX 调用建议用于保持在同一页面并更新页面内容,调用后不刷新页面。
    在上面带有 AJAX 的代码中,即使在 AJAX 调用完成之后,您也只能在 index.jsp 中。
    您可以在 AJAX 调用后使用 javascript window.location.href= 切换到其他页面(在您的情况下为 index1.jsp)。但是,在您的情况下,页面切换到 index1.jsp 但作为新请求。您可以在 browserURL bar 中观察到相同的情况。当您将 name 属性 存储在请求范围内时。您不会看到在 index1.jsp 的名称字段中输入的值。

    【讨论】:

    • 嗨,这就是我目前正在发生的情况,数据在控制台中打印出值。我说的是我的实际文件。我该如何解决这个问题?
    【解决方案2】:

    在 Ajax 情况下,您不发送任何表单数据。使用$.serialize将表单数据序列化并发送到服务器:

    $('#x').click(function() {
        var formData = $("#f1").serialize();
        $.ajax({
            type : 'POST',
            url  : 'Controller',
            data : formData,
            success : function(data) {
                console.log(data)
            },
        });
    });
    

    【讨论】:

    • 嗨@wero,感谢您的快速回复。我创建了一个示例供参考,如果我不想发送任何参数,例如触发查询“select * from table”并在“index1.jsp”中打印结果,该怎么办
    • @user3872094 不需要发送任何数据,请求正文可以为空。但是如果你希望request.getParameter() 在服务器上返回一些值,你应该发送一些数据。
    • 否则我会在某人之后发布原件。再次感谢:-)
    • @user3872094 关于你关于SQL注入的问题,无论你是否通过AJAX发布数据,漏洞都是一样的。无论哪种方式,您都需要在服务器端防御 SQL 注入。
    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 2014-01-12
    • 2016-03-05
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多