servlet不工作(也有空指针错误),servlet不能't从javascript中获取值

servlet is not working (also has null pointer error) , servlet couldn't get the value from javascript

本文关键字:servlet javascript 获取 工作 错误 空指针 不能      更新时间:2024-03-31

我找不到servlet不能在这里工作的原因。

因此,在html中,我有一个select country字段,首先为空。一旦我单击下拉菜单不选择任何内容,然后单击其他任何位置,它就会在字段旁边显示错误消息(请选择国家)。

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中),但它没有。没有错误消息:"测试"旁边的国家字段。

我检查了apache文件夹,

C: ''apache-tomcat-7.0.68''work''Catalina''localhost/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''web

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>

有人能帮忙吗?真的很感激。

如果您的onblur处理程序从未被调用:您是否检查过它的可用性,例如使用Firebug或浏览器的开发工具?只需通过一个临时按钮自愿执行它,并保持控制台在视线范围内——这可能是某个地方的一个简单打字错误。此外,我不太明白为什么validateCountry()从未被调用(或其中的警报),但servlet仍然会遇到问题。

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

按照HttpServlet'sjavadoc中的建议将其移动到doGet()service()。它将在适当的位置,如果请求中存在参数,它将可用。如果您愿意,可以在那里设置一个断点,并检查请求对象的参数,以了解实际得到的数据。