Redirect, Forward aucun ne marche?!
Salut a tous,
J'ai developpe 2 servlets et 1 JSP qui communique entre elles.
La 1ere servlet (AGSenderServlet) appelle la 2eme servlet (AGReceiverServlet) pour lui envoyer un fichier.
Ensuite, une fois le fichier recu, la 2eme servlet appelle la page JSP.
Tout marche bien sauf le dernier appel pour la JSP. Rien ne se passe en fait. Pas d'erreur ou d'exception. Le code de la JSP n'est meme pas parcouru.
Voici mes 2 servlets:
- AGSenderServlet »
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.params.HttpMethodParams;
//This servlet sends a file to another server
public class AGSenderServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String filename = request.getParameter("filename");
String ext = request.getParameter("ext");
String serverName = request.getParameter("serverName");
String port = request.getParameter("port");
String path = null;
String uri = "http://"+serverName+":"+port+"/AGReceiverServlet";
//System.out.println(this.getServletContext().getRealPath("/"));
File file = new File((this.getServletContext().getRealPath("/sync/out"))+"\\"+filename+'.'+ext);
System.out.println("Test = "+file.getAbsolutePath());
PostMethod post = new PostMethod(uri);
Part[] parts = new Part[] {
//new StringPart("hostname", hostname),
new FilePart(file.getName(), file) // File you want to upload
};
post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
//MultipartRequestEntity multipart = new MultipartRequestEntity(parts, post.getParams());
// Now perform the POST and check for errors
HttpClient http = new HttpClient();
post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
int status = http.executeMethod(post);
//if (status != HttpStatus.SC_OK) {
// throw new IOException("Received HTTP status code " + status);
//}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
} |
- AGReceiverServlet »
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
//This servlet receives a file from another server
public class AGReceiverServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
String realPath = this.getServletContext().getRealPath("sync/in");
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
// Process the uploaded items
Iterator iter = items.iterator();
try {
String fileName = "blabla";
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// Process a file upload
if (!item.isFormField()) {
fileName = item.getName();
long sizeInBytes = item.getSize();
//Write to File
if (fileName != null) {
fileName = FilenameUtils.getName(fileName);
}
File uploadedFile = new File(realPath);
if (!uploadedFile.exists())
uploadedFile.mkdirs();
System.out.println("PATH = "+realPath+"/"+fileName);
uploadedFile = new File(realPath+"/"+fileName);
item.write(uploadedFile);
}
}
System.out.println("http://"+request.getServerName()+':'+request.getServerPort()+"/upTool/filereceived.jsp?filename="+fileName);
String redirectURL = "http://"+request.getServerName()+':'+request.getServerPort()+"/upTool/filereceived.jsp?filename="+fileName;
response.sendRedirect(redirectURL);
//response.sendRedirect("http://www.google.com");
} catch (Exception e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
} |
J'ai poste mon probleme sur le forum Java mais y a qu'une personne qui m'a repondu et je comprend pas vraiment ce qu'il a voulu m'explique. Apparemment ca viendrait de la reponse envoyee par response.sendRedirect(redirectURL); de ma 2eme servlet qui n'est bien interprete par ma 1ere servlet :roll:
J'ai essaye d'utiliser la fonction forward du dispatcher mais ca me donne le meme resultat.
Voici la conversation: http://forums.sun.com/thread.jspa?me...47964#11047964