我无法找到servlet在这里工作的原因。
所以,在html中,我有一个选择国家/地区字段,先清空。一旦我点击下拉菜单选择任何内容,然后点击其他任何地方,它应该显示该字段旁边的错误消息(请选择一个国家/地区)。
HTML:
<select id="select-country" name = "select-country/region" onblur="validateCountry()">
<option value = "" selected = "selected">Select One</option>
<option value ="AU">Australia</option>
<option value ="BA">Bahamas</option>
<option value ="CN">China</option>
<option value ="DK">Denmark</option>
<option value ="US">United States</option>
</select>
<span id = "countryError"></span>
的javascript:
var req;
var f;
var t;
function validateCountry()
{
t = document.getElementById("select-country");
f = document.getElementById("countryError");
alert ("start here" + t.value);
var url = "http://localhost:8080/ibmProject/servlet?select-country=" + t.value();
alert ("Hi,here is inside validateCountry");
req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}
function callback()
{
alert ("Hi,here is inside countryValidation");
if (req.readyState === 4 && req.status === 200)
{
var return_data = req.responseText;
alert("callback: " + return_data);
f.innerHTML = return_data;
f.style.color = "#FF0000";
t.focus();
}
}
的servlet:
在servlet中,如果我没有添加if(c!=null)
条件,它会给出空指针错误。我尝试在浏览器中键入http://localhost:8080/ibmProject/servlet来测试servlet是否正常工作。同样的,如果我不添加if(c!=null)
,它会提供HTTP状态500 - java.lang.NullPointerException。
但是,无论我在country字段中选择什么,servlet中的字符串c始终为null。
此外,即使字符串c为null,也应将out.print("*testing!*")
返回到var return_data = req.responseText
(在javascript中),但它没有。没有错误消息:&#34;测试&#34;在国家/地区旁边。
我检查了apache文件夹,
C:\ Apache的Tomcat的7.0.68 \工作\卡塔利娜\本地主机/ ibmProject
它是空的,它是否有一些文件?
我意识到alert ("Hi,here is inside validateCountry")
; (javascript)永远不会执行
所以,我猜问题是关于
var url = "http://localhost:8080/ibmProject/servlet?select-country=" + t.value();
(在javascript中)
这条线。
servlet.java位于此处。
的NetBeansProjects \ ibmProject \ SRC \ java的
html,javascript,css都在这里: \的NetBeansProjects \ ibmProject \网络
public class servlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/plain;charset=UTF-8");
//response.setHeader("Access-Control-Allow-Origin", "*");
PrintWriter out = response.getWriter();
String c = request.getParameter("select-country");
if(c!=null)
{
System.out.println("Finally!!!!!!!!!!!!!!!!!!!!------------------------------------"+c);
if (c.equals(""))
{
out.print("*Please select a country!*");
}
else
{
out.print("");
}
}
else
{
out.print("*testing...!*");
}
}
的web.xml:
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
有人可以帮忙吗? 万分感激。
答案 0 :(得分:0)
如果您的onblur
处理程序从未被调用过:您是否检查过它的可用性,例如:使用Firebug或您的浏览器的开发者工具?只需通过临时按钮执行它并保持控制台在视线中 - 这可能是一个简单的错字。另外,我不太明白你的validateCountry()
从未被调用过(或那里的警报),但是你仍然遇到了servlet的问题。
说到servlet:你是如何在processRequest()
中实现逻辑的?
按HttpServlet's
javadoc中的建议将其移至doGet()
或service()
。它会在适当的位置 - 如果参数存在于请求中,它将可用。如果您愿意,可以在那里使用断点并检查请求对象的参数,以便了解您实际获得的数据。