如何在 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 代码