gpt4 book ai didi

java.lang.NumberFormatException : null java. lang.Integer.parseInt(来源未知)

转载 作者:行者123 更新时间:2023-11-29 23:30:33 25 4
gpt4 key购买 nike

我正在尝试从 jsp 页面获取值,并希望使用 java 将这些值存储在 mysql(xampp) 数据库中。连接已建立并成功登录,但当我尝试获取值时出现空指针异常

MainController.java

package classes;

import java.io.IOException;

import java.sql.Connection;

import java.sql.Date;

import java.sql.DriverManager;

//import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.sql.Time;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

* Servlet implementation class MainController

*/

@WebServlet("/MainController")

public class MainController extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/
public MainController() {
super();
// TODO Auto-generated constructor stub
}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse

* response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {




/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
}
//@SuppressWarnings("null")
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String url= "jdbc:mysql://localhost/meeting_planner";
System.out.println("start");
// boolean stfound = false;

try {
System.out.println("reached controller");
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, "admin", "admin");

Statement stmt = con.createStatement();
//System.out.println("connection");
String button=request.getParameter("button");
System.out.println(button + request.getParameter("AId"));




if(button.equals("login"))
{

System.out.println("inside if");

String AdminId= request.getParameter("AId");
String password= request.getParameter("Password");

System.out.println(AdminId+" sadia "+password);

if(!(AdminId=="" || password==""))
{

boolean stfound = false;

System.out.println(AdminId+" sadia "+password);

String query = "SELECT AId,Password FROM administrator";

ResultSet rs = stmt.executeQuery(query);
System.out.println(query);

while(rs.next())
{

String dbadminid = rs.getString(1);
String dbadminpwd = rs.getString(2);

if(AdminId.equals(dbadminid) && password.equals(dbadminpwd))
{
HttpSession session = request.getSession(true);
session.setAttribute("userid",dbadminid);
stfound = true;
break;
}
}




if(stfound){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher ( "/meeting_Id.jsp" ) ;

dispatcher.forward ( request, response ) ;

}
}
else{
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher ( "/index.jsp" ) ;

dispatcher.forward ( request, response ) ;

}
}
if(button.equals("Next"))
{

HttpSession session = request.getSession(true);
String AID =(String) session.getAttribute("aid");


int meetingid = Integer.parseInt(request.getParameter("meeting_id"));
/*String CNM= request.getParameter("CNM");
int CCD = Integer.parseInt(request.getParameter("CCD"));
int CCDD= Integer.parseInt(request.getParameter("CCDD"));
int PID= Integer.parseInt(request.getParameter("PID"));
int STFID=Integer.parseInt(AID);*/

meeting obj=new meeting();
obj.addmeeting(meetingid);

System.out.print("Sadia");

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher ( "/creat_date.jsp" ) ;

dispatcher.forward ( request, response ) ;
}
}catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

而 Meeting.java 是

package classes;

import java.sql.Connection;

import java.sql.Date;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Time;

import java.sql.Statement;

public class meeting {

private int meeting_id;
Connection con=null;
Statement smt = null;

public static void main(String[] args) {
// TODO Auto-generated method stub

}
public meeting()throws ClassNotFoundException//construtor
, SQLException{
// try{
String url = "jdbc:mysql://localhost/meeting_planner";
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url, "admin", "admin");

smt = con.createStatement();

//}catch(ClassNotFoundException e1){
//e1.printStackTrace();
}
public void addmeeting(int meeting_id1)throws ClassNotFoundException // from attribute web.xml
, SQLException{
System.out.println("------TRY INSERTION------");


String query = "SELECT meeting_Id FROM meeting";
ResultSet rs = smt.executeQuery(query);
int numCols = rs.getMetaData().getColumnCount()+1;
// STAFF_ID=numCols+1;

String query1 = "INSERT INTO Meeting VALUE ( "+meeting_id+")";
System.out.println(query1);
smt.executeUpdate(query1);

}
}

下一步按钮的名称是“下一步”当我在这一行打印 next 的值时 System.out.println("next"+next);它为下一个参数打印 null

** 编辑:NullPointerException 的问题已解决,但现在抛出 NumberFormatException **

控制台是这样的

start

reached controller

inside if

111 sadia sadia

111 sadia sadia

SELECT AId,Password FROM administrator

start

reached controller

Oct 29, 2014 6:44:57 PM org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet [classes.MainController] in context with path [/Meeting1] threw

exception

java.lang.NumberFormatException: null

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at classes.MainController.doPost(MainController.java:141)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

at

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)

at

org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

index.jsp 是

<form method = "post" name="create" action="MainController">

<label for="author">Enter id: </label> <input type="text"
id="AId" name="AId" required="required" />
<div class="cleaner_h10"></div>
<label for="author">Enter_password: </label><input
type="password" name="Password" required="required" />
<div class="cleaner_h10"></div>
<br> <input type="submit"
name="button" " value="login"
style="height: 30px; width: 70px"></a>
</input>

</form>

meeting_Id.jsp 是

<form method="post" name="create" action="MainController">

<label for="author">Enter Meeting Id:</label> <input type="text" id="meeting_id" name="mid" required="required" />
<div class="cleaner_h10"></div>


<div class="cleaner_h10"></div><br>

<input type="submit" name="cancelbutton" value="Cancel" style="height:30px; width:70px">
</input>
<input type="submit" name="button" value="Next" style="height:30px; width:70px">
</input>
</form>

最佳答案

原NullPointerException问题的解决方案

问题出在这里:

    //System.out.println("connection");
String button=request.getParameter("button");
System.out.println(button + request.getParameter("AId"));




if(button.equals("login"))

从您自己的调试打印中可以看到,您打印的 button 和参数 AId 均为空。

因此,当您尝试调用 button.equals("login") 时,您会收到 NullPointerException。那是因为您无法在 null 上调用方法。

在使用参数之前,您应该始终检查参数是否为null。即使您认为它们永远不应该为 null - 因为黑客可以尝试在不受表单控制的情况下向您的 servlet 发送内容。

这是一步一步发生的事情。

  1. 您显示index.jsp。您点击按钮。
  2. MainController 运行。由于有一个来自 index.jspbutton 参数,所以一切正常,并且它到达最后的代码,将其转发到 meeting_Id.jsp 现在显示在您的浏览器上。
  3. 现在单击按钮并将 meeting_Id.jsp 中的表单发送回 MainController
  4. 现在,在此调用中,没有参数 button。因此你会得到 NullPointerException。

您正在 MVC 环境中工作。每个表单都发送到同一个 Controller MainContoller,并且 MainController 应该足够聪明,能够知道哪个表单向其发送了请求,并相应地处理它。但你的假定只有 index.jsp 正在调用它。但它不是这样工作的。当您单击 meeting_Id.jspa 上的 next 按钮时,您将创建一个新请求,该请求将发送至同一个 MainController servlet,并导致错误。

您应该确保您的表单发送某种 ID,告诉 MainController 目前哪个表单正在使用它,然后 Controller 可以发送请求以由适当的模型处理。您使用它的输入应该具有相同的名称,并且应该存在于您发送的所有表单中。

NumberFormatException的解决方案

现在您由于不同的原因遇到了类似的问题。在这一行中:

 int meetingid = Integer.parseInt(request.getParameter("meeting_id"));

您正在尝试解析名为 meeting_id 的参数。问题是,您没有检查空值。您实际上没有这样的参数。

为什么?因为这就是您的 HTML(在 meeting_Id.jsp 中)的内容:

<input type="text" id="meeting_id" name="mid" required="required" />

如您所见,“meeting_id”是它的 id,而不是它的名称,并且 getParameter() 始终与输入的 名称

除此之外,修复此问题后,您必须(使用正则表达式)确保参数中仅包含数字,或者必须使用 try-catch block 捕获 NumberFormatException parseInt 行。

始终、始终检查从用户处获得的参数。永远不要假设它们存在,它们不为空,或者它们具有您期望它们具有的值。

关于java.lang.NumberFormatException : null java. lang.Integer.parseInt(来源未知),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com