servlet无法正常工作(也有空指针错误),servlet无法从javascript

时间:2016-04-09 06:10:35

标签: javascript html tomcat servlets

我无法找到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>                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <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...!*");
        }
    }

pic1

的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>

有人可以帮忙吗? 万分感激。

1 个答案:

答案 0 :(得分:0)

如果您的onblur处理程序从未被调用过:您是否检查过它的可用性,例如:使用Firebug或您的浏览器的开发者工具?只需通过临时按钮执行它并保持控制台在视线中 - 这可能是一个简单的错字。另外,我不太明白你的validateCountry()从未被调用过(或那里的警报),但是你仍然遇到了servlet的问题。

说到servlet:你是如何在processRequest()中实现逻辑的?

HttpServlet's javadoc中的建议将其移至doGet()service()。它会在适当的位置 - 如果参数存在于请求中,它将可用。如果您愿意,可以在那里使用断点并检查请求对象的参数,以便了解您实际获得的数据。