会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133689个问题

问题:

①在客户端输入数据提交之后,不会有数据显示在span标签里

②在客户端输入的userid是1  服务器端显示出来的是0


jsonDataDemo.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$.ajax()中提交json格式数据</title>
    <script src="js/jquery.js"></script>
    <script>
        function but(){
            var userid = $("#userid").val();
            var username = $("#username").val();
            $.ajax({
                type:"post",
                url:"jsonData.do",
                data:JSON.stringify({
                    userid:userid,
                    username:username
                }),
                success:function (result){
                    $("#span").html(result);
                }
            })
        }
    </script>

</head>
<body>
    用户ID:<input type="text" id="userid"/><br/>
    用户名:<input type="text" id="username"/><br/>
    <span id="span"></span>
    <input type="button" value="OK" onclick="but()"/>
</body>
</html>



JsonDataServlt

/**
 * $.ajax()提交json格式数据
 */
@WebServlet(urlPatterns = "/jsonData.do")
public class JsonDataServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");

        //通过字符输入流从请求体中获取提交的JSON格式的字符串
        String string = req.getReader().readLine();
        //使用jackson将json格式字符串转为Java对象
        ObjectMapper objectMapper = new ObjectMapper();
        Users users = objectMapper.readValue(string, Users.class);
        System.out.println(users.getUserid()+" "+users.getUsername());

        resp.setContentType("application/json;charset=utf-8");
        PrintWriter pw = resp.getWriter();
        pw.print(string);
        pw.flush();
        pw.close();
    }
}




image.png



image.png

JAVA 全系列/第六阶段:JavaWeb开发/Ajax技术详解(旧) 1097楼
JAVA 全系列/第六阶段:JavaWeb开发/Web实战案例 1098楼
JAVA 全系列/第六阶段:JavaWeb开发/JSP技术详解(旧) 1099楼
JAVA 全系列/第六阶段:JavaWeb开发/JSP技术详解(旧) 1102楼
JAVA 全系列/第六阶段:JavaWeb开发/JSP技术详解(旧) 1103楼
JAVA 全系列/第六阶段:JavaWeb开发/Servlet技术详解(旧) 1105楼

老师在讲不同步的情况下Chrome浏览器先刷新,IE浏览器后刷新,IE浏览器能输出结果,

我在这里说一下我的理解

            首先:chrome浏览器和IE浏览器发送的是两个不同的请求,因此,他们的request对象,和response对象是不同的

                    那么你谷歌浏览器先请求,然后休眠了,因为是多线程,并且是用成员变量作为输出流的载体,那么过程是这样,        谷歌浏览器请求: pw=谷歌的response  → 谷歌线程休眠 → IE线程开始 pw=IE的response  

                                        → 谷歌线程唤醒,往下执行 → 谷歌线程拿着已经被覆盖的pw(IE的响应字符输出流)                                            做输出,这就导致了,谷歌页面是空白,并且IE浏览器不仅没有在5秒休眠结束才显示,                                            而是在谷歌浏览器的响应代码执行完毕就显示了。

                            所以:这和老师解释是不同的,老师说,是因为close方法执行了,导致拿不到pw对象,

                            我觉得这说法不对误导同学了。为此回去重新学习了一轮多线程

                                                         你看我这理解对还是老师的说法对?

JAVA 全系列/第六阶段:JavaWeb开发/Servlet技术详解(旧) 1106楼
JAVA 全系列/第六阶段:JavaWeb开发/Web实战案例 1108楼
JAVA 全系列/第六阶段:JavaWeb开发/JSP技术详解(旧) 1110楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637