Получение исключения NullPointerException при выполнении отображения страницы JSP с помощью сервлетов

#java #html #jsp #servlets

Вопрос:

Я пытаюсь отобразить сведения о пользователе из базы данных. Получение исключения NullPointerException Ниже приведены мои страницы Jsp и сервлетов

Кроме того,я новичок в этом, так что, наверное, произошла какая-то глупая ошибка.

JSP Page

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" isELIgnored="false"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>View Profile</title>
</head>
<html>  
<body>  
<form action="ProfileServlet?ac=view">  
Enter your username:<input type=text name=username><br/>  
  
<input type=submit value=Submit>  
</form>  
</body>  
</html>
 

Servlet

 package com.Webhtml.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*; 
  
public class ProfileServlet extends HttpServlet {  
  
public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
    
String a=request.getParameter("ac");    
response.setContentType("text/html");  
PrintWriter out = response.getWriter();  
if(a.equals("view")) {
String username=request.getParameter("username");
          
try{  
Class.forName("com.mysql.jdbc.Driver");  
Connection con=DriverManager.getConnection("jdbc:mysql://75.20.205.173:3306/,"contact","root","root");  
              
PreparedStatement ps=con.prepareStatement("select * from user where username=?");  
ps.setString(13,username);  
              
out.print("<table width=50% border=1>");  
out.print("<caption>Result:</caption>");  
  
ResultSet rs=ps.executeQuery();  
              
/* Printing column names */  
ResultSetMetaData rsmd=rs.getMetaData();  
int total=rsmd.getColumnCount();  
out.print("<tr>");  
for(int i=1;i<=total;i  )  
{  
out.print("<th>" rsmd.getColumnName(i) "</th>");  
}  
  
out.print("</tr>");  
              
/* Printing result */  
  
while(rs.next())  
{  
out.print("<tr><td>" rs.getString(2)  "</td><td>" rs.getString(3) "</td><td>" rs.getLong(4) "</td><td>" rs.getString(5) "</td><td>" rs.getDate(6) "</td><td>" rs.getString(7) "</td><td>" rs.getString(8) "</td><td>" rs.getString(9) "</td><td>" rs.getString(10) "</td><td>" rs.getString(11) "</td></tr>");  
                  
}  
  
out.print("</table>");  
              
}catch (Exception e2) {e2.printStackTrace();}  
          
finally{out.close();}  

}
}  
}  
 

Error

 Sep 20, 2021 7:31:29 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [ProfileServlet] in context with path [/Webhtml] threw exception
java.lang.NullPointerException
    at com.Webhtml.controller.ProfileServlet.doGet(ProfileServlet.java:20)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:500)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
 

Ответ №1:

Вы не выполняете проверку на нуль в переменной «a». Эта переменная является параметром, может иметь значение null, поэтому ваш код завершается сбоем при :

 if(a.equals("view"))
 

Потому что a в данном случае равно нулю.

Почему «а» равно нулю? возможно, вам нужно указать параметры внутри типа ввода, скрытого внутри формы, вместо того, чтобы помещать их непосредственно в действие формы:

 <form action="ProfileServlet">  
   Enter your username:<input type=text name=username><br/>  
   <input type="hidden" id="ac" name="ac" value="view">
   <input type=submit value=Submit>  
</form>  
 

Комментарии:

1. Не могли бы вы, пожалуйста, сказать мне, куда именно поместить эту строку. «ProfileServlet», который я должен упомянуть в действии формы, верно?

2. Я отредактировал ответ, чтобы привести лучший пример. Вы можете попробовать изменить это на странице JSP и посмотреть, сработает ли это

3. Все готово ,спасибо