Erro JSP passar parametro e salvar Banco de Dados

Boa tarde a todos. Estou tentando criar uma aplicação simples que vai receber valores numa página chamada “login.jsp” e nela o usuário vai selecionar em dois campos select´s uma classe e um bimestre, como mostrado abaixo:
login.jsp

//aqui em cima a conexão com o banco esta OK.
<!-- colocar o select aqui e pegar valor dele e listar as classes pelo Listar -->
<div class="container">
	<div class="col-xs-4 col-sm-4 col-lg-4 p-1 mb-2 bg-white border border-1 border-secondary rounded float-start">
	<h2>Selecione abaixo a classe para lançamentos das notas e faltas</h2>
	<br>
	</div>
	<div class="col-xs-4 col-sm-4 col-lg-4 p-1 mb-2 bg-white border border-1 border-secondary rounded float-start">
	<form method="post" action="abrirClasse.jsp">
	
	<select class="form-select form-select-sm" name="classe">
		<option value="" enabled>Selecione a classe</option>
		<option value="1º ANO A" >1º ANO A</option>
		<option value="1º ANO B" >1º ANO B</option>
		<option value="2º ANO A" >2º ANO A</option>
		<option value="2º ANO B" >2º ANO B</option>
		<option value="3º ANO A" >3º ANO A</option>
		<option value="3º ANO B" >3º ANO B</option>
		<option value="3º ANO C" >3º ANO C</option>
		<option value="4º ANO A" >4º ANO A</option>
		<option value="4º ANO B" >4º ANO B</option>
		<option value="5º ANO A" >5º ANO A</option>
		<option value="5º ANO B" >5º ANO B</option>
	</select>
	<br><br>
		<select class="form-select form-select-sm" name="bimestre">
		<option value="" enabled>Selecione o Bimestre</option>
		<option value="1º BIMESTRE">1º BIMESTRE</option>
		<option value="2º BIMESTRE">2º BIMESTRE</option>
		<option value="3º BIMESTRE">3º BIMESTRE</option>
		<option value="4º BIMESTRE">4º BIMESTRE</option>
		<option value="5º CONCEITO">5º CONCEITO</option>
	</select>
		<br><br>
	        <div class="text-center">
				<input class="btn btn-success w-100" name ="listar" id="listar" type="submit" value="Listar Alunos">
            </div>
	</form>
	<br>
   </div>
</div>

Depois disso vai para a outra página chamada “abrirClasse.jsp” que recebe a classe selecionada acima e o bimestre pelos select´s. E com essas informações ele pega do banco alunos e cria uma TABELA HTML com inputs em cada disciplina, como esta no abaixo:

abrirClasse.jsp

<%
	try
	{//inicio try
		
	if(rs.next() == false){//inicio if
		
		response.sendRedirect("erro2.html");
		
	}//fim if
	else				//VER COMO SALVAR TUDO AO MESMO TEMPO NO BANCO DEPOIS DE CLICAR NO SALVAR
	{//inicio else
		out.println("<h2 class='text-center'>Classe: <strong>"+classe+"</strong> &nbsp&nbsp<strong>"+bimestre+".</strong></h2>");
		out.println("<br>");
		%>
		<!-- AQUI TEM DE CRIAR UMA TABELA, CABEÇALHO ANTES E COLOCAR ESSA PARTE DO BANCO LOGO EM SEGUIDA -->
		<form method="post" class="form-control" action="salvarNotas.jsp">
		<!--<input type="hidden" name="id" size="30" required value="<% //rs.getInt(1); %>"/>-->
		<table id="notas" name="notas" class="border border-dark table text-nowrap table-bordered table-sm table-success table-striped">
		<tr><th></th><th></th><th>Disciplinas</th><th id="Português">Português</th><th id="História">História</th><th id="Geografia">Geografia</th><th id="Ciências">Ciências</th>
		<th id="Matemática">Matemática</th><th id="Ed. Física">Ed. Física</th><th id="Ed. Artística">Ed. Artística</th><th id="Inglês">Inglês</th><th id="Prod. Textual">Prod. Textual</th>
		<th id="Exp. Matemática">Exp. Matemática</th><th></th></tr>
		<tr><th>Id Aluno</th><th>Nº Cl.</th><th>Nomes</th><th>Conceito</th><th>Conceito</th>
		<th>Conceito</th><th>Conceito</th><th>Conceito</th><th>Conceito</th>
		<th>Conceito</th><th>Conceito</th><th>Conceito</th><th>Conceito</th><th>Faltas</th></tr><% 
		do
		{ //inicio do %>	
			<tr><td  id="idAluno" name="idAluno" class="text-center"><%= rs.getInt(1) %></td>
			<td id="quant" class="text-center"><%= i+=1 %></td>
			<td><%= rs.getString(2) %></td>
			<td><input class="form-control" type="text" id="notaPort" name="notaPort" /></td>
			<td><input class="form-control" type="text" id="notaHist" name="notaHist" /></td>
			<td><input class="form-control" type="text" id="notaGeo" name="notaGeo" /></td>
			<td><input class="form-control" type="text" id="notaCien" name="notaCien" /></td>
			<td><input class="form-control" type="text" id="notaMat" name="notaMat" /></td>
			<td><input class="form-control" type="text" id="notaEdFis" name="notaEdFis" /></td>
			<td><input class="form-control" type="text" id="notaEdArt" name="notaEdArt" /></td>
			<td><input class="form-control" type="text" id="notaIng" name="notaIng" /></td>
			<td><input class="form-control" type="text" id="notaProdT" name="notaProdT" /></td>
			<td><input class="form-control" type="text" id="notaExpM" name="notaExpM" /></td>
			<td><input class="form-control" type="text" id="faltas" name="faltas" /></td></tr>

		<%}/*fim do*/ while(rs.next());
	}//fim else %>

		</table>
		<div class="row">
		    <input class="btn btn-success w-100" type="submit" value="Salvar">
		</div>
        </form>
	<%}//fim try
	
	
		catch(Exception e)
							{
							e.getStackTrace();
							}
%>

E depois que o usuário terminar de lançar notas e clicar no botão “SALVAR” ele vai inserir no banco no arquivo “salvarNotas.jsp” que segue e onde vou falar quais as minhas dúvidas:

salvarNotas.jsp

String quant = request.getParameter("quant");
	int quantidade = Integer.parseInt("quant");
	out.println("<br>");
	out.println("<br>");
	out.println("<h3>Elementos em numero de alunos: " + quantidade + "</h2>");
	/*
	
	String bimestre = request.getParameter("bimestre");
	String port = request.getParameter("Português");
	String hist = request.getParameter("História");
	String geo = request.getParameter("Geografia");
	String cien = request.getParameter("Ciências");
	String mat = request.getParameter("Matemática");
	String edfis = request.getParameter("Ed. Física");
	String edart = request.getParameter("Ed. Artística");
	String ing = request.getParameter("Inglês");
	String prodT = request.getParameter("Prod. Textual");
	String expM = request.getParameter("Exp. Matemática");
	String[] idAluno = request.getParameterValues("idAluno");
	String[] notaPort = request.getParameterValues("notaPort");
	String[] notaHist = request.getParameterValues("notaHist");
	String[] notaGeo = request.getParameterValues("notaGeo");
	String[] notaCien = request.getParameterValues("notaCien");
	String[] notaMat = request.getParameterValues("notaMat");
	String[] notaEdFis = request.getParameterValues("notaEdFis");
	String[] notaEdArt = request.getParameterValues("notaEdArt");
	String[] notaIng = request.getParameterValues("notaIng");
	String[] notaProdT = request.getParameterValues("notaProdT");
	String[] notaExpM = request.getParameterValues("notaExpM");
	String[] faltas = request.getParameterValues("faltas");
	
	try{
		Connection con = null;	
		Class.forName("com.mysql.cj.jdbc.Driver");
		con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projetoescola?useTimezone=true&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false", "root", "root");//?useTimezone=true&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
		String sql = "INSERT INTO 'notas' ('conceitos', 'faltas', 'bimestre', 'disciplina', 'FK_idAluno') VALUES (?, ?, ?, ?, ?);";
		PreparedStatement pst = con.prepareStatement(sql);

			for(int i = 0; i < quantidade; i++){
				pst.setString(1, notaPort[i]);
				pst.setString(4, port);
				pst.setString(1, notaHist[i]);
				pst.setString(4, hist);
				pst.setString(1, notaGeo[i]);
				pst.setString(4, geo);
				pst.setString(1, notaCien[i]);
				pst.setString(4, cien);
				pst.setString(1, notaMat[i]);
				pst.setString(4, mat);
				pst.setString(1, notaEdFis[i]);
				pst.setString(4, edfis);
				pst.setString(1, notaIng[i]);
				pst.setString(4, ing);
				pst.setString(1, notaEdArt[i]);
				pst.setString(4, edart);
				pst.setString(1, notaProdT[i]);
				pst.setString(4, prodT);
				pst.setString(1, notaExpM[i]);
				pst.setString(4, expM);
				pst.setString(2, faltas[i]);
				pst.setString(3, bimestre);
				pst.setString(5, idAluno[i]);
				
				pst.addBatch();
		
			}
			
			pst.executeBatch();
	
}  catch (Exception e) {
	 
	
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);
    e.printStackTrace(pw);
    String erro = sw.toString(); //Aqui obtenho a String
    out.println("Erro ao cadastrar" + erro);
	//e.printStackTrace();
	//response.sendRedirect( "erro.html?excecao=" + URLEncoder.  encode(e, "ISO-8859-1"));
} */
%>

Esta comentado o trecho que esta com problema.

Minhas dúvidas:
1º Eu preciso que o if do salvarNotas.jsp percorrra a tabela toda no seu tamanho para que p pst…addBatch possa ir fazendo sua parte. De cara da erro de nullpointer. Não estou conseguindo recuperar ali na tabela do arbriClasse.jsp (<td id="quant" class="text-center"><%= i+=1 %></td>) e conveter de String para inteiro (nem com Integer nem com int).

2º Depois que isso resolver, eu também tenho campos no banco que são inteiros e vem das páginas String. É possível resolver isso, antes de guardar no banco? Converter o que veio String para int e depois popular o banco?

3º A melhor maneira de salvar multiplas linhas da tabela no banco é como addBatch()? Teria um outro modo, sem precisar colocar no fim de cada linha da tabela, um salvar?

Se não fui claro, posso me explicar melhor depois. Obrigado desde já.

No início do arquivo abrirClasse.jsp, achei estranho esse if:

if(rs.next() == false){//inicio if
  response.sendRedirect("erro2.html");
}//fim if

O nullPointer talvez seja pq a variável rs esteja null nesse trecho do código.

Na verdade isso é apenas para ver se o banco esta ativo. Ali não dá erro algum. Vou postar em separado o erro que esta apresentando, que acho que isso faltou. Obrigado.

Um resumo: após o usuário efetuar login com sucesso, selecionar a classe e o bimestre nos dos select´s, ele vai para a página salvarNotas.jsp e nela lança notas (conceitos do tipo String e faltas - tipo inteiro) e ao fim quando clica no salvar, deveria popular o banco mas da esse erro:

org.apache.jasper.JasperException: An exception occurred processing [/salvarNotas.jsp] at line [6]

3: 
4: <%
5: 	String quant = request.getParameter("quant");
6: 	int quantidade = Integer.parseInt("quant");
7: 	out.println("<br>");
8: 	out.println("<br>");
9: 	out.println("<h3>Elementos em numero de alunos: " + quantidade + "</h2>");


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:610)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:499)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

java.lang.NumberFormatException: For input string: "quant"
	java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
	java.base/java.lang.Integer.parseInt(Integer.java:668)
	java.base/java.lang.Integer.parseInt(Integer.java:786)
	org.apache.jsp.salvarNotas_jsp._jspService(salvarNotas_jsp.java:129)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Note A pilha de erros completa da causa principal está disponível nos logs do servidor.

De fato no file salvarNotas.jsp tem um comentário grande pq eu estava tentando ver se pelo menos o valor do campo quant onde mostra quantos alunos tem eu consigo recuperar, mas dá o erro acima. E eu queria saber, depois de fazer o if do salvarNotas.jsp funcionar, se dessa forma vai cadastrar no banco correto, assim:

<%
	String quant = request.getParameter("quant");
	int quantidade = Integer.parseInt("quant");
	out.println("<br>");
	out.println("<br>");
	out.println("<h3>Elementos em numero de alunos: " + quantidade + "</h2>");
	//acima eu estou tentando pelo menos recuperar o valor da tabela, do último aluno listado para o if percorrer e começar a adcionar no addBatch() para então, salvar no banco. Isso que eu não sei também se vai dar certo.
	
	String bimestre = request.getParameter("bimestre");
	String port = request.getParameter("Português");
	String hist = request.getParameter("História");
	String geo = request.getParameter("Geografia");
	String cien = request.getParameter("Ciências");
	String mat = request.getParameter("Matemática");
	String edfis = request.getParameter("Ed. Física");
	String edart = request.getParameter("Ed. Artística");
	String ing = request.getParameter("Inglês");
	String prodT = request.getParameter("Prod. Textual");
	String expM = request.getParameter("Exp. Matemática");
	String[] idAluno = request.getParameterValues("idAluno");
	String[] notaPort = request.getParameterValues("notaPort");
	String[] notaHist = request.getParameterValues("notaHist");
	String[] notaGeo = request.getParameterValues("notaGeo");
	String[] notaCien = request.getParameterValues("notaCien");
	String[] notaMat = request.getParameterValues("notaMat");
	String[] notaEdFis = request.getParameterValues("notaEdFis");
	String[] notaEdArt = request.getParameterValues("notaEdArt");
	String[] notaIng = request.getParameterValues("notaIng");
	String[] notaProdT = request.getParameterValues("notaProdT");
	String[] notaExpM = request.getParameterValues("notaExpM");
	String[] faltas = request.getParameterValues("faltas");
	
	try{
		//Conexão com banco
String sql = "INSERT INTO 'notas' ('conceitos', 'faltas', 'bimestre', 'disciplina', 'FK_idAluno') VALUES (?, ?, ?, ?, ?);";
		PreparedStatement pst = con.prepareStatement(sql);

			for(int i = 0; i < quantidade; i++){
				pst.setString(1, notaPort[i]);
				pst.setString(4, port);
				pst.setString(1, notaHist[i]);
				pst.setString(4, hist);
				pst.setString(1, notaGeo[i]);
				pst.setString(4, geo);
				pst.setString(1, notaCien[i]);
				pst.setString(4, cien);
				pst.setString(1, notaMat[i]);
				pst.setString(4, mat);
				pst.setString(1, notaEdFis[i]);
				pst.setString(4, edfis);
				pst.setString(1, notaIng[i]);
				pst.setString(4, ing);
				pst.setString(1, notaEdArt[i]);
				pst.setString(4, edart);
				pst.setString(1, notaProdT[i]);
				pst.setString(4, prodT);
				pst.setString(1, notaExpM[i]);
				pst.setString(4, expM);
				pst.setString(2, faltas[i]);
				pst.setString(3, bimestre);
				pst.setString(5, idAluno[i]);
				
				pst.addBatch();
		
			}
			
			pst.executeBatch();
	
}  catch (Exception e) {
	 
	
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);
    e.printStackTrace(pw);
    String erro = sw.toString(); //Aqui obtenho a String
    out.println("Erro ao cadastrar" + erro);
	//e.printStackTrace();
	//response.sendRedirect( "erro.html?excecao=" + URLEncoder.  encode(e, "ISO-8859-1"));
} 
%>

Então é pegar a String na tabela na llinha de numeração dos alunos (o quant) converter em int, percorrer a tabela pegando os valores e colocando no INSERT. Obrigado a todos.

Em vez de:

int quantidade = Integer.parseInt("quant");

mude para:

int quantidade = Integer.parseInt(quant);

Provavelmente por falta de atenção, vc está tentando converter a string quant para número, em vez da variável quant.


Comentei sobre o possível nullPointer no IF, pq não vi nenhum código que estaria inicializando a variável rs.