如何在 javascript 中从 servlet 传递值

Posted

技术标签:

【中文标题】如何在 javascript 中从 servlet 传递值【英文标题】:how to pass a value from servlet in javascript 【发布时间】:2013-11-22 19:14:31 【问题描述】:

我是 servlet 和所有这些主题的新手,如果有点混乱,非常抱歉! 我正在尝试将值从 servlet 发送到 javascript 或在 java 脚本中获取 servlet 方法的值。 我不确定doGet!我做对了吗?获取字段值并将结果发送到javascript

Servlet:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    try 
        String passengerCount = request.getParameter("passengerCount");
        String departureSchedule = request.getParameter("schedule");
        String arrivalSchedule = request.getParameter("returnschedule");
        HttpSession session = request.getSession(true);
        int departureSID = 0;
        int passengerCountInt = 0;
        userID = 0;
        int arrivalSID = 0;

        try 
            departureSID = Integer.parseInt(departureSchedule);
            passengerCountInt = Integer.parseInt(passengerCount);
            userID = Integer.parseInt(session.getAttribute("userID").toString());
            arrivalSID = Integer.parseInt(arrivalSchedule);
         catch (Exception e) 
        

        if (departureSID != 0) 
            ScheduleBean departureSb = new ScheduleBean();
            departureSb.selectSchedule(departureSID);
            int departureRoute = departureSb.getRouteID();
            RouteBean routeB1 = new RouteBean();
            routeB1.selectRoute(departureRoute);
            double routeCharge = routeB1.getCharge();
            double totalDCharge = routeCharge * passengerCountInt;
            ReservationBean rb = new ReservationBean();
            UserBean us = new UserBean();

            if (arrivalSchedule == null) 
                rb.saveOneWayReservation(departureSID, userID, totalDCharge, passengerCountInt, "TICKET");
             else 
                departureSb.selectSchedule(arrivalSID);
                int arrivalRoute = departureSb.getRouteID();
                routeB1.selectRoute(arrivalRoute);
                double arrivalRouteCharge = routeB1.getCharge();
                totalDCharge += arrivalRouteCharge * passengerCountInt;
                rb.saveRoundReservation(departureSID, arrivalSID, userID, totalDCharge, passengerCountInt, "TICKET");
            

            ScheduleBean sbb = new ScheduleBean();
            sbb.selectSchedule(rb.scheduleID);
            AirBean bbb = new AirBean();
            bbb.selectAir(sbb.getAirID());
            String AirCode = bbb.getAirCode();
            String username = session.getAttribute("username").toString();
            int referenceNumber = rb.reservationID + 100;

            rb.updateTicketNumber(AirCode + "-" + username + "-" + String.valueOf(referenceNumber));
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Make payment</title>");
            out.println("<script type='text/javascript' src='js/jquery-1.5.2.min.js'></script>");
            out.println("<script type='text/javascript' src='js/payment.js'></script>");
            out.println("<script src='http://code.jquery.com/jquery-latest.min.js'></script>");
            out.println("<link type='text/css' href='css/style.css' rel='Stylesheet' />");
            out.println("</head>");
            out.println("<body>");
            out.println("<div class='bg-light' style='width: 200px; height: 200px; position: absolute; left:50%; top:50%;  margin:-100px 0 0 -100px; padding-top: 40px; padding-left: 10px;'>");
            out.println("<input id='reservationID' style='display: none' value='" + rb.reservationID + "' />");
            out.println("<div>Credit Card Number : </div>");
            out.println("<div><input id='creditcard' onKeyPress='return checkIt(event);' type='text' name='creditcard' maxlength='16' /></div>");
            out.println("<div>ExpirationDate : </div>");
            out.println("<div><input id='expirationDate' type='text' onKeyPress='return checkIt(event);' name='expirationDate' maxlength='4' /></div>");
            out.println("<input type='hidden' id='FormName' name='FormName' value='" + HiddenValue + "'>");
            out.println("<div><input id='somebutton' type='button'  name='buttonsave' value='Make Payment' onclick='makePayment(" + rb.reservationID + ");' /></div>");
            out.println("<div><input type='button'  name='buttoncancel' value='Cancel Payment' onclick='cancelPayment(" + rb.reservationID + ");' /></div>");
            out.println("</div>");
            out.println("</body>");
            out.println("</html>");
        
     finally 
        out.close();
    

我正在尝试获取对它们进行处理的两个输入字段的值并将结果发送到 javascript

Servlet doGet:

    @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    processRequest(request, response);

    creditno = request.getParameter("creditcard");       //name of the input field, not id
    expiration = request.getParameter("expirationDate");     //name of the input field should be expirationDate
    UserBean us = new UserBean();
    boolean check = us.checkCC(userID, creditno, expiration); // process the fields 
    if (check == true) 
        CCA = "1";
     else 
        CCA = "0";
    

    response.setContentType("text/plain");  // Set content type of the response so that jQuery knows what it can expect.
    response.setCharacterEncoding("UTF-8"); // You want world domination, huh?
    response.getWriter().write(CCA);       // Write response body.


Servlet doPost:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    processRequest(request, response);

Javascript:

var tempresp;
$(document).ready(function()                         // When the HTML DOM is ready loading, then execute the following function...
    $('#somebutton').click(function()                // Locate HTML DOM element with ID "somebutton" and assign the following function to its "click" event...
        $.get('MakeReservation', function(responseText)  // Execute Ajax GET request on URL of "someservlet" and execute the following function with Ajax response text...
            alert(responseText);
            tempresp=responseText;
        );
    );
);

提前致谢!

【问题讨论】:

【参考方案1】:

您没有向 Servlet 发送任何参数。即使这样做,您也会遇到IllegalStateException。这是因为您正在使用out.println() 写入响应正文,然后设置标题。 声明

finally 
        out.close();
 

还会刷新输出流,防止您写入任何响应标头。

在写入响应正文之前设置任何标头并在$.get中传递所需的参数

$.get('MakeReservation', passengerCount: 2, arrivalSchedule: 123, function(responseText)  // Execute Ajax GET request on URL of "someservlet" and execute the following function with Ajax response text...
          alert(responseText);
);

【讨论】:

嗨!那么我该怎么做才能完成这项工作!我已经尝试了您建议的第二部分并将参数添加到 $.get 但我在 javascript 中接收到空字符串! 尝试使用$.ajax(url: 'MakeReservation', data: passengerCount: 2, arrivalSchedule: 123, success: function(responseText) alert(responseText); ,error: function(xhr) alert(xhr.status); ) 代替$.get。在错误处理程序中,您必须获得500(服务器错误)的状态代码。 我使用了这个$.ajax( url: 'MakeReservation', data: passengerCount: 2, arrivalSchedule: 123, success: function(responseText) console.log(responseText); , error: function(xhr) alert(xhr.status); ); );,结果控制台中的结果是一个空字符串!【参考方案2】:

你有你的 java 权利,它是 request.getParameter(...)。但是,您没有使用 javascript 发送任何数据。如果您想发送“GET”请求,请使用您拥有的代码,但进行以下更改:

$.get('MakeReservation?creditcard=12345&expirationDate=11%2F14', ....);

我会查找一些关于使用 get 和 post 方法的 JQuery 教程。此外,您可能想要注释掉您拥有的代码,并在直接进入 Java 方面之前测试发送一些变量以掌握事情的窍门。

【讨论】:

我在 FireBug 中检查了我的代码和您建议的代码,都返回一个空字符串!这是为什么 ?看起来它没有从 doGet 获得价值!

以上是关于如何在 javascript 中从 servlet 传递值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中从 html 引用 iframe

如何在 AngularJs 中从 HTML 转换 JavaScript 代码

如何在swift中从.js文件中调用javascript函数

如何在javascript中从json文件中读取数据

如何在 Python 中从 Javascript 中读取值

如何在 Firefox 中从 JavaScript 解析 HTML?