servlet ajax nullpointerexception

servlet ajax nullpointerexception,ajax,servlets,nullpointerexception,Ajax,Servlets,Nullpointerexception,每当我试图读取servlet中的ajax参数时,我总是会收到一个空指针异常。 以下是ajax代码: <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="java.sql.*;" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/

每当我试图读取servlet中的ajax参数时,我总是会收到一个空指针异常。 以下是ajax代码:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.*;" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script>
        function findNext(id,label){
            alert(id);
            alert(label);
            var xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function(){
                if(xmlhttp.readyState===4 && xmlhttp.status===200)
                    {
                        var ret=xmlhttp.responseText;
                        var prob=ret.substring(0,ret.indexOf("///"));
                        var pdesc=ret.substring(3);
                        document.getElementById("prob").innerHTML=prob;
                        document.getElementById("pdesc").innerHTML=pdesc;                            
                    }                        
            };
            xmlhttp.open("POST","Servlet1",true);
            var sendstr="pid="+id+"&labelid="+label;
            xmlhttp.send(sendstr);
        }
    </script>
</head>
<body>
    <%
        Connection con;
        Statement s;
        ResultSet rs;
        String sql,pid=null,prob=null,pdesc=null,yesL=null,noL=null;


        try{
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection("jdbc:mysql://localhost:3306/cdt", "root", ".hack%//sign66");
            s=con.createStatement();

            sql="select * from cdt.problem where pid='1.01'";
            rs=s.executeQuery(sql);
            rs.next();

            pid=rs.getObject("pid").toString();
            prob=rs.getObject("problm").toString();
            pdesc=rs.getObject("pdesc").toString();
            yesL=rs.getObject("yesL").toString();
            noL=rs.getObject("noL").toString();

        }
        catch(Exception e){
            e.printStackTrace();
        }
    %>

    <!--STYLE THESE 2 <P> STATEMENTS-->
    <p id="prob"><%=prob%></p>
    <p id="pdesc"><%=pdesc%></p>
    <form>
           <input type="button" value="Yes" onclick="findNext(<%=pid%>,<%=yesL%>);"/>
           <input type="button" value="No" onclick="findNext(<%=pid%>,<%=noL%>);"/>
    </form>
</body>
</html>
null异常发生在java.lang.NullPointerException 位于cdt1.Servlet1.processRequest(Servlet1.java:66) 位于cdt1.Servlet1.doPost(Servlet1.java:124) 第一个出现在我尝试读取pid值时 调用processRequest时的第二个。
我在网上查阅了很多关于如何使用ajax和Servlet的资料,根据我所读到的内容,我没有做错什么。如果有人能给我指出正确的方向,那就太棒了。提前谢谢。我正在将netbeans 7.3与glassfish 3.1.2结合使用,如果这有什么不同的话

解决了这个问题。使用post发送数据时,需要设置内容类型http头。
在put请求期间也需要

在HTML页面中编写Java代码是非常糟糕的做法。您可以考虑使用JSTL,而实际上并没有发送<代码> PID 参数。也许是把
预先编到
发送str
?@orique我试过了。不起作用。还有其他想法吗?@BinoyDalal使用firebug调试
pid
参数是否正在发送。我不习惯普通的AJAX,也许其他人可以帮助我?有必要设置请求头吗?
package cdt1;

import cdt.FindNextLabelLocal;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ejb.EJB;

public class Servlet1 extends HttpServlet {

Connection con;
Statement s;
ResultSet rs;    
@EJB private FindNextLabelLocal obj;

@Override
public void init(ServletConfig config) throws ServletException{
    try{
        Class.forName("com.mysql.jdbc.Driver");
        con=DriverManager.getConnection("jdbc:mysql://localhost:3306/cdt", "root", ".hack%//sign66");
        s=con.createStatement();

    }
    catch(Exception e){
        e.printStackTrace();
    }            
}

@SuppressWarnings("UnusedAssignment")
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        String pid,label,res;
        @SuppressWarnings("UnusedAssignment")
        float current,next;

        current=next = 0;
        pid=request.getParameter("pid").toString(); // pid of the question
        label=request.getParameter("labelid").toString(); //label of the next question or solution based on button press
        current=Float.parseFloat(pid);
        next=Float.parseFloat(label);

        res=obj.findNext(current,next).toString();
        out.write(res);

    }
    catch(Exception e){
        e.printStackTrace();
    }
    finally {            
        out.close();
    }
}

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

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

@Override
public String getServletInfo() {
    return "Short description";
}
}