servlet中的java.lang.NullPointerException
当我运行servlet时,我在Tomcat控制台中得到了这个错误。我想我得看看我的SimpleDateformat,但有人能看出这里出了什么问题吗?我的代码编译得很好,所以我有点怀疑应该注意什么: 错误视频: 祝大家度过愉快的一天/晚上 朱莉 我的Servlet:servlet中的java.lang.NullPointerException,java,servlets,nullpointerexception,Java,Servlets,Nullpointerexception,当我运行servlet时,我在Tomcat控制台中得到了这个错误。我想我得看看我的SimpleDateformat,但有人能看出这里出了什么问题吗?我的代码编译得很好,所以我有点怀疑应该注意什么: 错误视频: 祝大家度过愉快的一天/晚上 朱莉 我的Servlet: package WorkPackage; import java.io.*; import java.sql.*; import java.text.SimpleDateFormat; import javax.servlet.*
package WorkPackage;
import java.io.*;
import java.sql.*;
import java.text.SimpleDateFormat;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/getHoursSQL")
public class getHoursSQL extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
String connectionURL = "jdbc:mysql://localhost/NekiWork";
Connection connection=null;
try {
//Load database driver
Class.forName("com.mysql.jdbc.Driver");
//Connection to the database
connection = DriverManager.getConnection(connectionURL, "root", "");
//Getting the data from database
String sql = "SELECT *, (Day_hours + (Day_minutes / 60)) AS Allday_hours FROM Workdata "
+ "WHERE startdate = ? AND endDate = ? ";
PreparedStatement pst = connection.prepareStatement(sql);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date util_StartDate = format.parse( req.getParameter("startDate") );
java.sql.Date sql_StartDate = new java.sql.Date( util_StartDate.getTime() );
java.util.Date util_EndDate = format.parse( req.getParameter("endDate") );
java.sql.Date sql_EndDate = new java.sql.Date( util_EndDate.getTime() );
pst.setDate( 1, sql_StartDate );
pst.setDate(2, sql_EndDate );
//Show the result from database
ResultSet rs = pst.executeQuery();
float Allday_hours_sum = 0;
while (rs.next()){
Allday_hours_sum += rs.getFloat("Allday_hours");
}
res.setContentType("text/html;charset=UTF-8");
res.getWriter().print(Allday_hours_sum);
pst.close();
}
catch(ClassNotFoundException e){
System.out.println("Couldn't load database driver: " + e.getMessage());
}
catch(SQLException e){
System.out.println("SQLException caught: " + e.getMessage());
}
catch (Exception e){
e.printStackTrace();
}
finally {
try {
if (connection != null) connection.close();
}
catch (SQLException ignored){
System.out.println(ignored);
}
}
}
}
Javascript:
<form id="myForm">
<input type="text" id="startDate"/>
<input type="text" id="endDate"/>
</form>
<div id="startresult"></div>
<div id="endresult"></div>
<script>
$(function(){
$("#startDate").datepicker({
dateFormat: 'yy-mm-dd',
onSelect: function(dateText,inst){
$('.selected-date').html(dateText);
var JSON = $('#myForm').serializeArray(); //you forgot to create JSON data
$.ajax({
url: "../getHoursSQL",
type: "post",
data: JSON,
success: function(data){
start: $("#startDate").val();
alert("success");
$("#startresult").html(data);
},
error:function(){
alert("failure");
$("#startresult").html('there is error while submit');
}
});
}
});
});
$(function(){
$("#endDate").datepicker({
dateFormat: 'yy-mm-dd',
onSelect: function(dateText,inst){
$('.selected-date').html(dateText);
var JSON = $('#myForm').serializeArray(); //you forgot to create JSON data
$.ajax({
url: "../getHoursSQL",
type: "post",
data: JSON,
success: function(data){
start: $("#endDate").val();
alert("success");
$("#startresult").html(data);
},
error:function(){
alert("failure");
$("#startresult").html('there is error while submit');
}
});
}
});
});
</script>
我认为没有带“startDate”(这使得req.getParameter(“startDate”)返回null)的参数会导致SimpleDataFormat抛出NullPointerException,如:
<form id="myForm">
<input type="text" id="startDate"/>
<input type="text" id="endDate"/>
</form>
测试的应用程序外观
req.getParameter(“startDate”)
可能为空,请在控制台中打印检查。添加服务器端验证,这样您就不需要处理null
情况您在哪里创建了JSON对象?您在AJAXdata:JSON,
Hello中进行了定义。谢谢你的快速回放。我试图从表单和javascript中获取的startDate和endDate。我刚刚编辑了我的答案。你现在能看到更多的东西吗?你好。非常感谢你的回答。startDate和endDate应该在my:中,在javascript中?它肯定应该是输入发送到Servlet的表单。我不知道你是怎么处理你的用户界面的,但是,将表单中的值提交到Servlet就需要Javascript。我将Javascript作为日历处理,如下所示:您确定日期的输入元素在表单中吗?它们应该:@Julie24 check updatedanswer@Julie24您尚未将表单id指定给序列化数组(“endDate”)endDate不是表单id。。检查我的更新答案有html表单与id@Julie24你的意思是仍然NullPointerException
进入控制台?我刚刚制作了一个简短的视频,介绍了我运行代码时发生的事情,如果这对我的问题有帮助的话。是的,我会尽力找出答案。我将在5分钟后再次在这里写:onSelect:function(dateText,inst){$('.selected date').html(dateText);var JSON=$('#myForm').serializeArray();Console.log(JSON);$.ajax({
<form id="myForm">
<input type="text" id="startDate"/>
<input type="text" id="endDate"/>
</form>
$(function(){
$("#startDate").datepicker({
dateFormat: 'yy-mm-dd',
onSelect: function(dateText,inst){
$('.selected-date').html(dateText);
var jsonStr = $('#myForm').serializeArray(); //you forgot to create JSON data
$.ajax({
url: "../getHoursSQL",
type: "post",
data: jsonStr,
success: function(data){
start: $("#startDate").val();
$("#startresult").html(data);
alert("success");
},
error:function(){
alert("failure");
$("#startresult").html('there is error while submit');
}
});
}
});
});