coccolata
Messages postés86Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention26 mai 2010
-
15 mai 2010 à 00:19
coccolata
Messages postés86Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention26 mai 2010
-
18 mai 2010 à 16:06
bonsoir, je débute avec tomcat et les servlets..et voila la galère commence!!!
dans un autre post ils m'ont affirmé la faisabilté de ce que je compte faire mais en pratique, du coup je me bloque
un logiciel qui fait des captures ecran automatiquement chaque n secondes, sauvegarde ces captures dans un repertoire au choix en les attribuant comme nom date heure ou numero
ce que je veux réaliser est d'afficher ces captures dans mon navigateur au fur et a mesure de leurs création (une fois une caputre est faite -> elle s'affiche)
le problème réside:
comment détecter q'une nouvelle capture est ajouté dans le repertoire?
et dans la page jsp comment faire un appel périodique a ma servlet
j'ai trouvé plusieurs tutoriaux, mais tous ciblent des images bien définies qui n'est pas le cas pour moi
voila mon essai:
servlet:
package com.pfe.slide;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* The Image servlet for serving from absolute path.
* @author BalusC
* @link http://balusc.blogspot.com/2007/04/imageservlet.html
*/
public class SlideServlet extends HttpServlet {
// Constants ----------------------------------------------------------------------------------
private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
// Properties ---------------------------------------------------------------------------------
private String imagePath;
// Actions ------------------------------------------------------------------------------------
public void init() throws ServletException {
// Define base path somehow. You can define it as init-param of the servlet.
this.imagePath = "\images";
// In a Windows environment with the Applicationserver running on the
// c: volume, the above path is exactly the same as "c:\images".
// In UNIX, it is just straightforward "/images".
// If you have stored files in the WebContent of a WAR, for example in the
// "/WEB-INF/images" folder, then you can retrieve the absolute path by:
// this.imagePath = getServletContext().getRealPath("/WEB-INF/images");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// Get requested image by path info.
String requestedImage = request.getPathInfo();
// je pense que cette ligne est inutile puisque je n'ai pas une image précise à récupérer
// Check if file name is actually supplied to the request URI.
if (requestedImage == null) {
// Do your thing if the image is not supplied to the request URI.
// Throw an exception, or send 404, or show default/warning image, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}
// Decode the file name (might contain spaces and on) and prepare file object.
File image = new File(imagePath, URLDecoder.decode(requestedImage, "UTF-8"));
// Check if file actually exists in filesystem.
if (!image.exists()) {
// Do your thing if the file appears to be non-existing.
// Throw an exception, or send 404, or show default/warning image, or just ignore it.
//response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404
image = new File(imagePath, "default.gif");
return;
}
// Get content type by filename.
String contentType = getServletContext().getMimeType(image.getName());
// Check if file is actually an image (avoid download of other files by hackers!).
// For all content types, see: http://www.w3schools.com/media/media_mimeref.asp
if (contentType == null || !contentType.startsWith("image")) {
// Do your thing if the file appears not being a real image.
// Throw an exception, or send 404, or show default/warning image, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}
// Init servlet response.
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType(contentType);
response.setHeader("Content-Length", String.valueOf(image.length()));
response.setHeader("Content-Disposition", "inline; filename="" + image.getName() + """);
// Prepare streams.
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
// Open streams.
input = new BufferedInputStream(new FileInputStream(image), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
// Write file contents to response.
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
// Gently close streams.
close(output);
close(input);
}
}
// Helpers (can be refactored to public utility class) ----------------------------------------
private static void close(Closeable resource) {
if (resource != null) {
try {
resource.close();
} catch (IOException e) {
// Do your thing with the exception. Print it, log it or mail it.
e.printStackTrace();
}
}
}
}
jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
Test
</html>
web.xml:
<!DOCTYPE web-app PUBLIC
'-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
'http://java.sun.com/dtd/web-app_2_3.dtd'>
<web-app>
<servlet>
<servlet-name>SlideServlet</servlet-name>
<servlet-class>com.pfe.slide.SlideServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SlideServlet</servlet-name>
/SlideServlet
</servlet-mapping>
</web-app>
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 18 mai 2010 à 10:23
Salut,
Une page jsp n'est pas censée être appelée directement, c'est la servlet qui va charger les données, et la jsp va s'en servir pour l'affichage.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
coccolata
Messages postés86Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention26 mai 2010 18 mai 2010 à 10:33
dans mon cas je dois l'appeler directement parce qu'il fallait que je fasse un refresh de la page pour passer à l'image suivante...
et bien sur je peux pas imposer au client de faire un refresh manuellement
You can't1 return both in the same response, since you're returning different types (an HTML page of type text/html and an image of type image/jpeg, say).
donc si l'image ne s'affiche par en appellant la page jsp c'est à cause du contentType qui doit etre "image/png" et non pas "text/html"
j'ai fait les modifs necessaires:
<%@page contentType="image/png" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
ça fonctionne en local mais dans une autre machine ça marche pas
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 18 mai 2010 à 10:39
Salut,
Il faut que tu fasse une servlet qui renvoie vers ta page jsp (et qui déclenche ton thread), et un appel ajax régulièrement dans ta jsp en question afin de charger les nouvelles images.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
coccolata
Messages postés86Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention26 mai 2010 18 mai 2010 à 10:50
j'ai pas bien compris ton idée, en fait ce que j'ai fait est de rafraichir la page jsp en attribuant dans le src de l'image l'url de la servlet..
si tu as noté j'ai optimisé mon code et j'utilise plus le thread, en fait c'est inutile (il suffit de mettre les images dans un tableau de fichier et le trier selon la dernière modification.. )
pour ajax je pense pas que c'est une bonne idée parce que mon application réelle est un client Android, cette servlet est just pour gerer l'histoire coté serveur, bref android et ajax, je pense pas
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 18 mai 2010 à 11:01
Salut,
Comment veux-tu rafraichir l'image sans passer par AJAX ???
Ce n'est pas en mettant l'url de la servlet dans le src de ton image qu'il va te rafraîchir automatiquement l'image : le src sera evalué une seule fois au chargement de la page, et c'est tout ! Il te faut faire toi même une requête au serveur à chaque fois que tu veux rafraîchir ta page (et là, rien de mieux que AJAX pour faire cà de façon totalement invisible pour l'utilisateur).
Tu pense qu'android ne gère pas AJAX ? Quel serait l'intérêt d'android alors ? S'il ne gère pas l'ajax, alors autant ne pas faire de navigateur sous android, car il servira pas à grand chose avec le web actuel qui est de plus en plus dynamique.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
coccolata
Messages postés86Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention26 mai 2010 18 mai 2010 à 11:05
en fait ma page web contient seulement une image!!
c'est pour ça je me ne suis pas intéressée à AJAX puisque il me suffit de rafraichir la page entière par: