无法从servlet获取传递的数据

时间:2016-02-18 15:25:03

标签: java jquery ajax jsp servlets

我正在编写一个与常规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);转到另一个页面。在我的情况下,它的替代品是什么? 请让我知道我哪里出错了,我该怎么办呢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

您可以在控制台中找到整个 index1.jsp html内容 将 $ {name}替换为您输入的名称。
建议将 AJAX 调用用于保持同一页面并更新页面内容,而不会在调用后刷新页面。
在上面的AJAX代码中,即使在AJAX调用完成后,您也只能在 index.jsp 中。
您可以在AJAX调用后使用javascript window.location.href =&lt;您的文件名&gt; 切换到其他页面(在您的情况下为 index1.jsp )。但是在您的情况下,页面切换到 index1.jsp 但作为新请求。您可以在浏览器网址栏中观察相同内容。在请求范围中存储名称attibute 时。您不会在index1.jsp的name字段中看到您输入的值。