Avrei risolto in tal modo:
1 - la cartella Images è stata creata dentro WebContent ed è divenuta accessibile come indicato nella servlet .
2 - il procedimento con l'uso del Buffer è stato tolto e sostituito con un ArraList.
Ho lasciato nel file anche il collegamento al DB Mysql, visto che era già pronto e funzionante, in tal modo può essere un ulteriore riferimento per altri.
Attenzione che l'applicazione ha già avuto uno sviluppo che ha portato alla eliminazione dell'elaborazione dell'immagine all'interno della servlet stessa (fatto che impediva di riprendere il controllo dopo il display), a favore dell'uso di jsp per l'interfaccia web e l'uso delle servlet solo per elaborazioni prettamente interne al server, cosa presentata in un altro mio post:
https://www.iprogrammatori.it/forum-programmazione/java/riprendere-controllo-dopo-servlet-t26130.html
.
Colgo l'occasione per ringraziare nuovamente andbin per i consigli sia su questo post che per quello subito sopra linkato.
Ho variato il titolo del post, aggiungendo la parola -RISOLTO- in tal modo chi cerca consigli può subito vedere i post che hanno avuto una soluzione, certi di trovare all'interno qualcosa di funzionante e non post rimasti appesi senza soluzione.
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@WebServlet("/Xprogrammatori1")
public class Xprogrammatori1 extends HttpServlet {
private static final long serialVersionUID = 1L;
public Xprogrammatori1() { super(); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
String userName = request.getParameter("userField");
ArrayList<String> array = select(userName);
for(int i = 0; i<array.size(); i++){
String scelto =array.get(i) ;
response.setContentType("image/jpeg");
ServletOutputStream sos = response.getOutputStream();
if ( scelto !=null )
{
String relativeWebPath = "/Images";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File f = new File(absoluteDiskPath, scelto + ".jpg");
DataInputStream dis = new DataInputStream(new FileInputStream(f));
byte[] barray = new byte[(int) f.length()];
try
{
dis.readFully(barray);
}
catch (Exception e)
{ barray = null; }
finally
{ dis.close( ); }
sos.write(barray);
sos.close();
}
}
}
catch (Exception e) {
e.printStackTrace();
}
finally{};
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
public static ArrayList<String> select(String userName) throws Exception{
Connection con = conn();
PreparedStatement statement = con.prepareStatement("SELECT * FROM musica.anagra WHERE key_anagra = " + userName);
ResultSet result = statement.executeQuery();
ArrayList<String> array = new ArrayList<String>();
while (result.next()){
array.add(result.getString("anagra_cognome"));
}
return array;
}
public static Connection conn()throws ClassNotFoundException, SQLException{
try{
String url = "jdbc:mysql://localhost:3306/test";
String username = "user";
String password = "password";
Class.forName("com.mysql.jdbc.Driver");
Connection connect = DriverManager.getConnection(url, username, password);
return connect;
}
finally {}
}
}