package servlet; import java.io.*; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.http.*; import java.net.URLEncoder; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.maxmind.geoip2.DatabaseReader; import com.maxmind.geoip2.exception.GeoIp2Exception; import com.maxmind.geoip2.model.CityResponse; import user.Login; import java.awt.event.FocusListener; import java.io.File; import java.io.IOException; import java.net.InetAddress; import java.util.*; import java.util.regex.*; /** * Servlet implementation class AppSetup */ @WebServlet("/AppSetup") public class AppSetup extends HttpServlet { private static final long serialVersionUID = 1L; private Set supportedLanguages; private String defaultLanguage; private DatabaseReader geoReader; private int selectForma = 0; private double newShape=90.0; private DatabaseReader dbReader; private double packaging=0.20; private int statobomcaricato =20; private int statobominproduzione =21; private int statobomconsegnato =22; private int statobomcancellato =66; private int statobomnonpagato =0; private int statobompagato =1; private int statoLavorazioni_non_gestito =20; private int statoLavorazioni_verificaFile =21; private int statoLavorazioni_stampa =22; private int statoLavorazioni_taglio =23; private int statoLavorazioni_elastico =24; private int statoLavorazioni_imbibizione =25; private int statoLavorazioni_imbustamento =26; private int statoLavorazioni_confezionamento=27; private int statoLavorazioni_spedizione =28; private int aziendaDiRiferimento =4; private int adhoc=1; private int userEliminatoAdmin=6666; /** * @see HttpServlet#HttpServlet() */ public AppSetup() { super(); // TODO Auto-generated constructor stub } @Override public void init(ServletConfig config) throws ServletException { super.init(config); // inizializza la configurazione (prova prima a leggere context-param esterno, altrimenti classpath) Properties props = new Properties(); try (InputStream in = getClass().getClassLoader().getResourceAsStream("languages.properties")) { if (in == null) throw new FileNotFoundException("languages.properties non trovato!"); props.load(in); supportedLanguages = new HashSet<>(); for (String lang : props.getProperty("supported.languages", "").split(",")) { supportedLanguages.add(lang.trim()); } defaultLanguage = props.getProperty("default.language", "en").trim(); } catch (IOException e) { throw new ServletException("Errore caricamento languages.properties", e); } // Carica il database GeoLite2-City.mmdb da /geolite2 try { String dbPath = getServletContext().getRealPath("/geolite2/GeoLite2-City.mmdb"); File dbFile = new File(dbPath); geoReader = new DatabaseReader.Builder(dbFile).build(); } catch (IOException e) { throw new ServletException("Errore caricamento GeoLite2-City.mmdb", e); } } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); String hostHeader = request.getHeader("Host"); // es: "www.miosito.com:8080" String domain = (hostHeader != null) ? hostHeader : request.getServerName(); String uric = request.getRequestURI(); // Ad esempio: /en/ String contextc = request.getContextPath(); // Di solito "" (vuoto, root) oppure "/sentorette" // Seleziona la lingua come primo segmento (es: "en" da "/en/") String[] segmentsc = uric.split("/"); if (segmentsc.length >= 2) { String lang = segmentsc[1]; // Assicurati che sia la lingua: es "en" // Se la lingua esiste nella lista, e l’uri termina con la lingua + / if (supportedLanguages.contains(lang) && uric.endsWith("/" + lang + "/")) { // Costruisci URI assoluto per redirect String redirectUrl = "/index.htm"; // Fai redirect che aggiorna la barra degli indirizzi response.sendRedirect(redirectUrl); return; } } int colonIndex = domain.indexOf(':'); if (colonIndex >= 0) { domain = domain.substring(0, colonIndex); } if (domain.toLowerCase().startsWith("www.")) { domain = domain.substring(4); } String acceptHeader = request.getHeader("Accept-Language"); Locale locale = null; String forwardTo="/index.jsp"; String contextPath = request.getContextPath(); // es: /sito oppure "" String originalUri = request.getRequestURI(); // es: /sito/it/page.htm, /sito/page.htm, /index.htm String pathAfterContext = originalUri.substring(contextPath.length()); String reqUri = pathAfterContext.replaceAll("/{2,}", "/"); if (!request.getRequestURI().equals(reqUri)) { String loc = request.getScheme() + "://" + request.getHeader("Host") + reqUri; String qs = request.getQueryString(); if (qs != null && !qs.isEmpty()) loc += "?" + qs; response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); response.setHeader("Location", loc); return; } // Analizza lingua browser String browserLang = getLanguageFromBrowser(request); // Analizza IP e gestisci caso localhost String clientIp = getClientIp(request); boolean isLocalhost = isLocalhostIp(clientIp); String countryCode = isLocalhost ? "it" : getCountryCodeFromIp(clientIp); String bestLang = isLocalhost ? "en" : chooseLanguage(browserLang, countryCode); // Path dopo il contextPath (niente servletPath!), mai vuoto perché almeno "/" String uri = reqUri.substring(contextPath.length()); uri = java.net.URLDecoder.decode(uri, "UTF-8"); if (uri.startsWith("/")) uri = uri.substring(1); if (uri.endsWith(".html")) { String newPath = uri.substring(0, uri.length() - 5) + ".htm"; String redirectUri = contextPath + "/" + newPath; response.sendRedirect(redirectUri.replaceAll("//+", "/")); return; } List segments = uri.isEmpty() ? new ArrayList<>() : Arrays.asList(uri.split("/")); String firstLang = (segments.size() > 0 && supportedLanguages.contains(segments.get(0))) ? segments.get(0) : ""; if (!segments.isEmpty() && ( "sitemap.xml".equalsIgnoreCase(segments.get(0)) || (supportedLanguages.contains(segments.get(0)) && segments.size() > 1 && ("sitemap.xml".equalsIgnoreCase(segments.get(1)))))) { bean.Sito bst = new bean.Sito(); bean.User but = new bean.User(); user.GestioneUtente ugt = new user.GestioneUtente(); but = (bean.User) ugt.nologin(); but.setPrezzonewshape(newShape); nav.CreaSito ncs = new nav.CreaSito(); bst = (bean.Sito) ncs.generaSito(domain, but, "it", countryCode,"it"); serveSitemap(response, contextPath, bst); return; } if (!segments.isEmpty() && ( "robots.txt".equalsIgnoreCase(segments.get(0)) || (supportedLanguages.contains(segments.get(0)) && segments.size() > 1 && ("robots.txt".equalsIgnoreCase(segments.get(1)))))) { serveRobots(response, contextPath); return; } // --- Eliminazione lingue duplicate --- if (!firstLang.isEmpty() && segments.size() > 1) { int idx = 1; // Rimuovi tutte le ripetizioni consecutive while (idx < segments.size() && segments.get(idx).equals(firstLang)) { idx++; } if (idx > 1) { // Costruisci nuova URI normalizzata solo se c'erano duplicati StringBuilder normalized = new StringBuilder(contextPath).append("/").append(firstLang); if (idx < segments.size()) { normalized.append("/").append(String.join("/", segments.subList(idx, segments.size()))); } // Redirect alla versione corretta response.sendRedirect(normalized.toString().replaceAll("//+", "/")); return; } } String langInUri = (segments.size() > 0 && supportedLanguages.contains(segments.get(0))) ? segments.get(0) : ""; bestLang = langInUri; if (bestLang.isEmpty()) { bestLang = isLocalhost ? "en" : chooseLanguage(browserLang, countryCode); } if (uri.isEmpty() || (segments.size() == 0) || (segments.size() == 1 && segments.get(0).isEmpty())) { String redirectRoot = contextPath + "/" + bestLang + "/index.htm"; response.sendRedirect(redirectRoot.replaceAll("//+", "/")); return; } // REDIRECT: se manca la lingua tra i segmenti if (!bestLang.equals(langInUri)) { StringBuilder redirectUri = new StringBuilder(contextPath).append("/").append(bestLang); // Se c’è già una lingua in URI, metti solo la restante parte dopo la lingua trovata if (!uri.isEmpty() && !langInUri.isEmpty() && segments.size() > 1) { redirectUri.append("/").append(String.join("/", segments.subList(1, segments.size()))); } else if (!uri.isEmpty() && langInUri.isEmpty()) { redirectUri.append("/").append(uri); } // Se path è vuoto, uri sarà /sito/en response.sendRedirect(redirectUri.toString().replaceAll("//+", "/")); return; } HttpSession sessione = request.getSession(); bean.Sito bst = new bean.Sito(); bean.User but = new bean.User(); if(sessione.getAttribute("but")==null) { user.GestioneUtente ugt = new user.GestioneUtente(); but = (bean.User) ugt.nologin(); but.setPrezzonewshape(newShape); sessione.setAttribute("but", but); }else { but=(bean.User) sessione.getAttribute("but"); } if(sessione.getAttribute("bst")==null) { nav.CreaSito ncs = new nav.CreaSito(); bst = (bean.Sito) ncs.generaSito(domain, but, langInUri, countryCode,langInUri); sessione.setAttribute("bst", bst); LinkedList listaFlags = new LinkedList(); util.GestioneFlagsLingue ugf = new util.GestioneFlagsLingue(); listaFlags =(LinkedList) ugf.ricercaLingueFlags(bst); sessione.setAttribute("listaFlags", listaFlags); LinkedList listaGalleryHome = new LinkedList(); ordini.Ordine oord = new ordini.Ordine(); listaGalleryHome = (LinkedList) oord.homeListaGallery(bst,8); sessione.setAttribute("listaGalleryHome", listaGalleryHome); LinkedList ricercaQntForme = new LinkedList(); util.Forme ufr = new util.Forme(); ricercaQntForme = (LinkedList) ufr.ricercaTotForme(bst); sessione.setAttribute("ricercaQntForme", ricercaQntForme); bean.ContenutiPagine menuHeader = new bean.ContenutiPagine(); nav.GestioneUri nsm = new nav.GestioneUri(); menuHeader =(bean.ContenutiPagine) nsm.ricercaTesti(35, 0, 0, bst, 35); sessione.setAttribute("menuHeader", menuHeader); bean.ContenutiPagine gdpr = new bean.ContenutiPagine(); gdpr =(bean.ContenutiPagine) nsm.ricercaTesti(86, 0, 0, bst, 86); sessione.setAttribute("gdpr", gdpr); }else { bst=(bean.Sito)sessione.getAttribute("bst"); bean.ContenutiPagine gdpr = new bean.ContenutiPagine(); gdpr=(bean.ContenutiPagine) sessione.getAttribute("gdpr"); sessione.setAttribute("gdprPrimo", gdpr); } if(request.getServletPath().split("/")[1].matches(".*\\.(xml)$")||request.getServletPath().toLowerCase().endsWith(".txt")) { // System.out.println("trovato txt"); }else { bean.Menu menuSelezionato = new bean.Menu(); nav.GestioneUri ngt = new nav.GestioneUri(); System.out.println(uri); String[] parts = uri.split("/"); String result; // Se il primo segmento è una lingua supportata, rimuovilo if (parts.length > 1 && supportedLanguages.contains(parts[0])) { uri = String.join("/", Arrays.copyOfRange(parts, 1, parts.length)); } menuSelezionato =(bean.Menu) ngt.ricercaMenu(bst, uri); String oldUri=""; if(menuSelezionato.getJsp().equalsIgnoreCase("language.jsp")) { bean.Menu bmnOldUri = new bean.Menu(); if(sessione.getAttribute("bmnOldUri")!=null) { bmnOldUri=(bean.Menu) sessione.getAttribute("bmnOldUri"); bmnOldUri.getLnk().getSelezione(); oldUri = (String) bmnOldUri.getLnk().getSelezione(); }else { nav.GestioneUri ugt = new nav.GestioneUri(); bmnOldUri =(bean.Menu)ngt.ricercaMenuJsp(bst, "home.jsp"); sessione.setAttribute("bmnOldUri", bmnOldUri); } }else { oldUri = request.getRequestURI(); oldUri = java.net.URLDecoder.decode(oldUri, "UTF-8"); oldUri = (String) uri.replaceAll("/+", ""); if (uri.toLowerCase().endsWith(".html")) { oldUri = uri.substring(0, uri.length() - 5) + ".htm"; } bean.Menu bmnOldUri = new bean.Menu(); nav.GestioneUri ugt = new nav.GestioneUri(); bmnOldUri = (bean.Menu)ugt.ricercaOldUriCambioLingua(bst, oldUri); sessione.setAttribute("bmnOldUri", bmnOldUri); } if(menuSelezionato.getJsp().equalsIgnoreCase("language.jsp")) { sessione.removeAttribute("menuHeader"); sessione.removeAttribute("listaGalleryScent"); sessione.removeAttribute("listaGallery"); sessione.removeAttribute("listaForme"); sessione.removeAttribute("listaGalleryScent"); sessione.removeAttribute("gadgeteventi"); LinkedList listaFlg = new LinkedList(); listaFlg = (LinkedList) sessione.getAttribute("listaFlags"); String lng="idioma"; if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("it")) { lng="idioma"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("en")) { lng="language"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("fr")) { lng="langue"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("de")) { lng="sprache"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("es")) { lng="idioma"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("pt")) { lng="idioma"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("ru")) { lng="yazyk"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("ro")) { lng="limba"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("cs")) { lng="jazyk"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("hu")) { lng="nyelv"; } if(bst.getLinguaSelezioneUtente().equalsIgnoreCase("la")) { lng="idioma"; } bean.Menu bmnOldUri = new bean.Menu(); bmnOldUri=(bean.Menu)sessione.getAttribute("bmnOldUri"); String newLanguage = (String) request.getParameter(lng); bean.Menu newBmnOldUri = new bean.Menu(); nav.GestioneUri ngu = new nav.GestioneUri(); newBmnOldUri = (bean.Menu) ngu.cambiaLinguaOldUri(bmnOldUri, newLanguage); nav.CreaSito ncs = new nav.CreaSito(); bst = (bean.Sito) ncs.generaSito(domain, but, langInUri, countryCode,newLanguage); sessione.setAttribute("bst", bst); LinkedList listaFlags = new LinkedList(); util.GestioneFlagsLingue ugf = new util.GestioneFlagsLingue(); listaFlags =(LinkedList) ugf.ricercaLingueFlags(bst); sessione.setAttribute("listaFlags", listaFlags); bean.ContenutiPagine menuHeader = new bean.ContenutiPagine(); nav.GestioneUri nsm = new nav.GestioneUri(); menuHeader =(bean.ContenutiPagine) nsm.ricercaTesti(35, 0, 0, bst, 35); sessione.setAttribute("menuHeader", menuHeader); LinkedList listaGalleryHome = new LinkedList(); ordini.Ordine oord = new ordini.Ordine(); listaGalleryHome = (LinkedList) oord.homeListaGallery(bst,8); sessione.setAttribute("listaGalleryHome", listaGalleryHome); LinkedList ricercaQntForme = new LinkedList(); util.Forme ufr = new util.Forme(); ricercaQntForme = (LinkedList) ufr.ricercaTotForme(bst); sessione.setAttribute("ricercaQntForme", ricercaQntForme); menuSelezionato =(bean.Menu) ngt.ricercaMenu(bst, newBmnOldUri.getLnk().getSelezione()); if(menuSelezionato.getJsp().equalsIgnoreCase("404.jsp")) { menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "home.jsp"); } String newuri = newLanguage + "/" + newBmnOldUri.getLnk().getSelezione(); String[] segmentsb = newuri.split("/"); StringBuilder encodedUri = new StringBuilder(); for (String seg : segmentsb) { encodedUri.append("/").append(URLEncoder.encode(seg, "UTF-8")); } // La stringa encodedUri contiene tutta la path già con lingua, es: /en/folder/page.htm // Non aggiungere newLanguage una seconda volta! String newUri = encodedUri.toString(); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); response.sendRedirect(newUri); } if(menuSelezionato.getJsp().equalsIgnoreCase("gallery.jsp")) { if(sessione.getAttribute("listaGallery")==null) { LinkedList listaGallery = new LinkedList(); util.Gallery ugl = new util.Gallery(); listaGallery = (LinkedList) ugl.ricercaGallery(bst); sessione.setAttribute("listaGallery", listaGallery); } } if(menuSelezionato.getJsp().equalsIgnoreCase("show-gallery.jsp")) { String id_tipoForme=(String) request.getParameter("id-tipoForme"); String id_forme=(String) request.getParameter("id-forme"); if(request.getParameter("id-tipoForme")==null||request.getParameter("id-forme")==null){ if(sessione.getAttribute("listaGallery")==null) { LinkedList listaGallery = new LinkedList(); util.Gallery ugl = new util.Gallery(); listaGallery = (LinkedList) ugl.ricercaGallery(bst); sessione.setAttribute("listaGallery", listaGallery); } menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "gallery.jsp"); }else { int iid_tipoForme =(int) Integer.parseInt(id_tipoForme); int iid_forme =(int) Integer.parseInt(id_forme); if(sessione.getAttribute("listaGallery")==null) { LinkedList listaGallery = new LinkedList(); util.Gallery ugl = new util.Gallery(); listaGallery = (LinkedList) ugl.ricercaGallery(bst); sessione.setAttribute("listaGallery", listaGallery); } LinkedList listaGallery = new LinkedList(); listaGallery=(LinkedList) sessione.getAttribute("listaGallery"); for(int i=0;ibto.getImponibilecontrasporto()) { menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "agente-nuovo-prezzo-ordine-concludi.jsp"); // System.out.println("caricato troppo"); }else { if((totaleCifrePagamenti+importoDaGestire)==bto.getImponibilecontrasporto()) { LinkedList listaOrdiniAgente = new LinkedList(); ordini.Ordini oor = new ordini.Ordini(); listaOrdiniAgente =(LinkedList)oor.ricercaOrdiniInCorsoAgente(but, statobomcaricato, statobominproduzione, bst, newShape,packaging); sessione.setAttribute("listaOrdiniAgente", listaOrdiniAgente); System.out.println("CASO 1"); if(importoDaGestire>totaleCifrePagamenti) {}else { listaPagamenti.add(btp); } menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "agente-ordine-concluso.jsp"); }else { System.out.println("CASO 2"); if(importoDaGestire>totaleCifrePagamenti) {}else { listaPagamenti.add(btp); } menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "agente-nuovo-prezzo-ordine-concludi.jsp"); } } } }else { // System.out.println("siamo nella merda"); // System.out.println(importoDaGestire); // System.out.println(bto.getImponibilecontrasporto()); if(importoDaGestire>bto.getImponibilecontrasporto()) { menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "agente-nuovo-prezzo-ordine-concludi.jsp"); // System.out.println("hai messo troppo carico1"); }else { if(bto.getImponibilecontrasporto()-importoDaGestire==0) { LinkedList listaOrdiniAgente = new LinkedList(); ordini.Ordini oor = new ordini.Ordini(); listaOrdiniAgente =(LinkedList)oor.ricercaOrdiniInCorsoAgente(but, statobomcaricato, statobominproduzione, bst, newShape,packaging); sessione.setAttribute("listaOrdiniAgente", listaOrdiniAgente); // System.out.println("CASO 3"); listaPagamenti.add(btp); menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "agente-ordine-concluso.jsp"); }else { // System.out.println("cazzocazzocazzo"); if(importoDaGestire>bto.getImponibilecontrasporto()) {}else { listaPagamenti.add(btp); } menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "agente-nuovo-prezzo-ordine-concludi.jsp"); } } } sessione.setAttribute("listaPagamenti", listaPagamenti); } if(menuSelezionato.getJsp().equalsIgnoreCase("agente-nuova-anagrafe.jsp")) { try { String ipAddress = request.getRemoteAddr(); // Ottieni l'indirizzo IP del client // Percorso al database GeoLite2-City // File database = new File("/usr/local/apache-tomcat-9.0.82//webapps/ROOT/geolite2/GeoLite2-City.mmdb"); File database = new File("/opt/tomcat9/webapps/ROOT/geolite2/GeoLite2-City.mmdb"); if(bst.getVal().equalsIgnoreCase("sentorette.home")) { database = new File("/usr/local/apache-tomcat-9.0.82//webapps/ROOT/geolite2/GeoLite2-City.mmdb"); } dbReader = new DatabaseReader.Builder(database).build(); if (ipAddress.equals("0:0:0:0:0:0:0:1") || ipAddress.equals("127.0.0.1")) { ipAddress = "8.8.8.8"; // Esempio di IP pubblico // System.out.println("Paese rilevato: localhost"); } try { InetAddress ip = InetAddress.getByName(ipAddress); CityResponse cityResponse = dbReader.city(ip); // Ottieni il paese String country = cityResponse.getCountry().getName(); // System.out.println("Paese rilevato: " + country); bean.Lingue blgCountry = new bean.Lingue(); blgCountry.setLingua(country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country, country,country,country,country, "it"); try { if (dbReader != null) { dbReader.close(); } } catch (IOException e) { e.printStackTrace(); } bean.Paese bps = new bean.Paese(); LinkedList listaPaesi = new LinkedList(); util.Paese ups = new util.Paese(); bps=(bean.Paese) ups.ricercaPaeseDaBrowser(blgCountry, bst); listaPaesi=(LinkedList)ups.listaPaesi(bst); sessione.setAttribute("registrazionebps", bps); sessione.setAttribute("listaPaesi", listaPaesi); } catch (GeoIp2Exception | IOException e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Errore nella geolocalizzazione"); } } catch (IOException e) { throw new ServletException("Errore nell'inizializzazione del database GeoLite2", e); } } if(menuSelezionato.getJsp().equalsIgnoreCase("gestione-utente.jsp")) { LinkedList listaOrdiniInCorso = new LinkedList(); ordini.Ordini ood = new ordini.Ordini(); listaOrdiniInCorso=(LinkedList)ood.ordiniInCorsoClienti(statobomcaricato, statobominproduzione, bst, but); sessione.setAttribute("listaOrdiniInCorso", listaOrdiniInCorso); } if(menuSelezionato.getJsp().equalsIgnoreCase("storico-ordini-utente.jsp")) { LinkedList listaOrdiniUtenteAnno = new LinkedList(); ordini.Ordini ood = new ordini.Ordini(); listaOrdiniUtenteAnno =(LinkedList) ood.ricercaOrdiniUserAnno(but,bst); sessione.setAttribute("listaOrdiniUtenteAnno", listaOrdiniUtenteAnno); } if(menuSelezionato.getJsp().equalsIgnoreCase("gestione-indirizzi-spedizione-utente.jsp")) { LinkedList listaIndirizzi = new LinkedList(); user.User uus = new user.User(); listaIndirizzi = (LinkedList) uus.ricercaIndirizziSpedizione(but, 3); sessione.setAttribute("listaIndirizzi", listaIndirizzi); bean.Paese bps = new bean.Paese(); LinkedList listaPaesi = new LinkedList(); util.Paese ups = new util.Paese(); listaPaesi=(LinkedList)ups.listaPaesi(bst); sessione.setAttribute("listaPaesi", listaPaesi); } if(menuSelezionato.getJsp().equalsIgnoreCase("agente-listino.jsp")) { LinkedList listino = new LinkedList(); listini.Listini llt = new listini.Listini(); listino=(LinkedList) llt.ricercaListinoAgente(but, but, 0); sessione.setAttribute("listino", listino); } if(menuSelezionato.getJsp().equalsIgnoreCase("custom-shop.jsp")) { if(but.getId()==0&&sessione.getAttribute("listiniOfferta")==null) { menuSelezionato =(bean.Menu)ngt.ricercaMenuJsp(bst, "login.jsp"); } } if(menuSelezionato.getJsp().equalsIgnoreCase("select-scent.jsp")) { String pricelist=(String)request.getParameter("pricelist"); String qnt=(String)request.getParameter("qnt"); int iqnt = (int)Integer.parseInt(qnt); String scent=(String)request.getParameter("scent"); String carta = (String) request.getParameter("carta"); int icarta = (int) Integer.parseInt(carta); String price = (String) request.getParameter("price"); double iprice =(double) Double.parseDouble(price); bean.Ordini bor = new bean.Ordini(); bor.setTipoordine(pricelist); bor.setQuantita(iqnt); bor.setProfumo(scent); bor.setCarta(icarta); bor.setPrezzoUnitario(iprice); bor.setStato(51); sessione.setAttribute("newOrder", bor); LinkedList listeScent = new LinkedList(); util.Scent usc = new util.Scent(); listeScent =(LinkedList) usc.ricercaScent(bst); sessione.setAttribute("listeScent", listeScent); } if(menuSelezionato.getJsp().equalsIgnoreCase("gestione-ordini-cancella.jsp")) { String id_remove_order= (String) request.getParameter("id"); LinkedList listaOrdini = new LinkedList(); listaOrdini = (LinkedList) sessione.getAttribute("carrello"); int intid_remove_order=(int) Integer.parseInt(id_remove_order); for(int i=0;i"); out.println(""); // Puoi aggiungere qui le tue pagine principali, anche per ogni lingua LinkedList lista = new LinkedList(); lista=(LinkedList) bst.getLista(); for(int i=0;i" + contextPath + "/it/"+bmn.getLnk().getIt()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/it/"+bmn2.getLnk().getIt()+""); } for(int t=0;t" + contextPath + "/it/"+bmn3.getLnk().getIt()+""); } } } }}} for(int i=0;i" + contextPath + "/en/"+bmn.getLnk().getEn()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/en/"+bmn2.getLnk().getEn()+""); } for(int t=0;t" + contextPath + "/en/"+bmn3.getLnk().getEn()+""); } } } }}} for(int i=0;i" + contextPath + "/fr/"+bmn.getLnk().getFr()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/fr/"+bmn2.getLnk().getFr()+""); } for(int t=0;t" + contextPath + "/fr/"+bmn3.getLnk().getFr()+""); } } } }}} for(int i=0;i" + contextPath + "/de/"+bmn.getLnk().getDe()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/de/"+bmn2.getLnk().getDe()+""); } for(int t=0;t" + contextPath + "/de/"+bmn3.getLnk().getDe()+""); } } } }}} for(int i=0;i" + contextPath + "/es/"+bmn.getLnk().getEs()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/es/"+bmn2.getLnk().getEs()+""); } for(int t=0;t" + contextPath + "/es/"+bmn3.getLnk().getEs()+""); } } } }}} for(int i=0;i" + contextPath + "/pt/"+bmn.getLnk().getPt()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/pt/"+bmn2.getLnk().getPt()+""); } for(int t=0;t" + contextPath + "/pt/"+bmn3.getLnk().getPt()+""); } } } }}} for(int i=0;i" + contextPath + "/ru/"+bmn.getLnk().getRu()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/ru/"+bmn2.getLnk().getRu()+""); } for(int t=0;t" + contextPath + "/ru/"+bmn3.getLnk().getRu()+""); } } } }}} for(int i=0;i" + contextPath + "/ro/"+bmn.getLnk().getRo()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/ro/"+bmn2.getLnk().getRo()+""); } for(int t=0;t" + contextPath + "/ro/"+bmn3.getLnk().getRo()+""); } } } }}} for(int i=0;i" + contextPath + "/cs/"+bmn.getLnk().getCs()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/cs/"+bmn2.getLnk().getCs()+""); } for(int t=0;t" + contextPath + "/cs/"+bmn3.getLnk().getCs()+""); } } } }}} for(int i=0;i" + contextPath + "/hu/"+bmn.getLnk().getHu()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/hu/"+bmn2.getLnk().getHu()+""); } for(int t=0;t" + contextPath + "/hu/"+bmn3.getLnk().getHu()+""); } } } }}} for(int i=0;i" + contextPath + "/va/"+bmn.getLnk().getLa()+""); } if(bmn.getMenuL2().size()!=0) { for(int e=0;e" + contextPath + "/va/"+bmn2.getLnk().getLa()+""); } for(int t=0;t" + contextPath + "/va/"+bmn3.getLnk().getLa()+""); } } } }}} // Aggiungi altre URL se necessario... out.println(""); } private void serveRobots(HttpServletResponse response, String contextPath) throws IOException { response.setContentType("text/plain; charset=UTF-8"); PrintWriter out = response.getWriter(); // Esempio semplice di robots.txt dinamico out.println("User-agent: *"); out.println("Disallow:"); out.println("Sitemap: " + contextPath + "/sitemap.xml"); } private String getLanguageFromBrowser(HttpServletRequest request) { String header = request.getHeader("Accept-Language"); if (header != null) { for (String part : header.split(",")) { String code = part.trim().split("-|;")[0].toLowerCase(); if (code.length() == 2) return code; } } return ""; } private String getClientIp(HttpServletRequest request) { String xf = request.getHeader("X-Forwarded-For"); if (xf != null && !xf.isEmpty()) return xf.split(",")[0].trim(); return request.getRemoteAddr(); } private boolean isLocalhostIp(String ip) { return "127.0.0.1".equals(ip) || "::1".equals(ip); } private String getCountryCodeFromIp(String ip) { try { InetAddress ipAddress = InetAddress.getByName(ip); CityResponse res = geoReader.city(ipAddress); if (res.getCountry() != null && res.getCountry().getIsoCode() != null) return res.getCountry().getIsoCode().toLowerCase(); } catch (Exception ignore) {} return null; } private String chooseLanguage(String browserLang, String countryCode) { if (supportedLanguages.contains(browserLang)) return browserLang; if (supportedLanguages.contains(countryCode)) return countryCode; return defaultLanguage; } }