Credo di aver sottovalutato la cosa, comunque ecco come ho fatto per generare la tabella che mostra i valori di cui poi fare una POST:

codice:
[ottengo i valori di username e password per il DB]

<form name="f" action="doupdate.jsp" method="POST">
	<table BORDER="1">
		<tr><th>Nr.</th><th>attributo1</th><th>attributo2</th></tr>
		<%
		try{	    
			String MY_URL = "jdbc:mysql://localhost/nomedatabase";
			Class.forName(MY_DRIVER);
			Connection c = DriverManager.getConnection(MY_URL,LOGIN, PASSWD);
			Statement s = c.createStatement();
			ResultSet rs = s.executeQuery("SELECT id, attr_1, attr_2 FROM nome_tabella");
			String attr_1="", attr_2="";
			int row=0;
			while(rs.next()){
				attr_1 = rs.getString("attr_1");
				attr_2 = rs.getString("attr_2");
				row = rs.getInt("id");
			%>
			<tr><td><input type="text" name="id<%=row %>" value="<%=row %>" size="2" READONLY/></td>
			<td><input type="text" name="attr_1<%=row %>" value="<%=attr_1 %>" size="50"/></td>
			<td><input type="text" name="attr_2<%=row %>" value="<%=attr_2 %>" style="text-transform:uppercase;" onkeyup="this.value=this.value.toUpperCase()"/></td></tr>
			
			<% 
			}
			session.setAttribute("username", LOGIN);
			session.setAttribute("password", PASSWD);
			
		}catch (SQLException s){
			// se cado qui, in genere era per username o password errate
			response.sendRedirect("loginfailed.jsp");
		}
	%>
	</table>
	

	<input type="submit" value="Aggiorna">
</form>
Poi alla pressione del tasto Aggiorna vengo reindirizzato ad un'altra JSP che effettua l'update e che poi mi rimanda a questa JSP che mostra i risultati.

Comunque problemi con caratteri speciali mi pare di non averne avuti. Non è previsto l'uso di doppi apici e lettere con la dieresi le prende senza problemi. Al limite potrei inserire un javascript che mi mostra un messaggio che impedisce l'uso di caratteri speciali.