I'm having some troubles in a JAVA programm, maybe someone has a solution.
I have my JSE JAVA application (not a J2EE server-side application) that launch a shortcut to a web page on a J2EE server.
I have an url like this one : http://application.fr:9080/visu/recherche.html?codepersonne=toto
But the problem is : high risk of security , so I need to hide the parameters, with a POST. But how to simulate the post.
On internet, I found a solution , with URLconnection that connect to my servlet's url (http://application.fr:9080/visu/SinistresService)) and pass parameters and try to redirect to my final page.
But no, the sendredirect seems to work but nothing happens on the web browser. As you can see, I tried several methods for the redirection, but nothing works, the web browser don't want to display my fresh new URL!!
My application JSE code :
/**
*
*/
import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
/**
* @author slam
*
*/
public class EnvoiPost {
public static void affichenavigateur() {
//ouvrir l'url connectée sur le navigateur
try {
Desktop.getDesktop().browse(new URI("http://application.fr:9080/visu/SinistresService"));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Erreur ouvrir de afficheparametre.jsp sur le navigateur ");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
System.out.println("Erreur ouvrir de afficheparametre.jsp sur le navigateur ");
}
}
public static void main(String[] args) throws Exception {
//Se connecter sur la servlet de l'interface Web
//y écrire 3 paramètres en POST
//URL url = new URL("http://application.fr:9080/visu/afficheparametre.jsp");
URL url = new URL("http://application.fr:9080/visu");
URLConnection conn = url.openConnection();
//pour envoyer un post, mettre à true
conn.setDoOutput(true);
//conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5");
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
//..mettre l'ouverture navigateur avant ou après l'écriture de paramètre?
//
writer.write("codepersonne=156804&nom=toto&type=titi");
writer.flush();
// LIRE sur la connection : pas utile, je lis dans la servlet les paramètres
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
writer.close();
if (conn != null) {
conn=null;
}
//essai run.getruntime
//String cmd = "rundll32 url.dll,FileProtocolHandler " + url; //eg http://...'
//Runtime.getRuntime().exec(cmd);
affichenavigateur();
}
}
My servlet on my J2EE appli (appart the other JSE applciation):
package services;
import java.awt.Desktop;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;
import data.Extraitbeneficiaire;
import data.Extraitdetaildossier;
import data.Extraitsinistres;
import beans.Utilisateur;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SanteDataService
* @author slam
*/
public class SinistresService extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String typeParameter = request.getParameter("type");
//http://application.fr:9080/
//Récupérer 3 paramètres passés en post
String codepersonne =request.getParameter("codepersonne");
String nom = request.getParameter("nom");
String typedecompte = request.getParameter("typedecompte");
//controler le passage de paramètres
System.out.println("codepersonne-->" + codepersonne);
if (codepersonne !=null) {
//this.attcodepersonne = codepersonne;
//response.sendRedirect("/visu/testjsp");
//RequestDispatcher dispatcher=request.getRequestDispatcher("afficheparametre.jsp");
//request.setAttribute("codepersonne",codepersonne);
//dispatcher.forward(request, response);
//parametrer la prochaine requete car request est gateux!
request.setAttribute("codepersonne", codepersonne);
response.sendRedirect("http://application.fr:9080/visu/afficheparametre.jsp");
//RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/visu/afficheparametre.jsp");
//dispatcher.forward(request, response);
}
//response.sendRedirect("/visu/recherche.jsp");
if (typeParameter != null) {
response.setContentType("text/plain");
if (typeParameter.equals("getBeneficiaires")) {
Extraitbeneficiaire Extract= new Extraitbeneficiaire();
response.getWriter().write(Extract.getfluxbeneficiaire(Integer.valueOf(request.getParameter("id")).intValue()));
} else if (typeParameter.equals("getSinistres")) {
Extraitsinistres Extract= new Extraitsinistres();
response.getWriter().write(Extract.getfluxsinistres(Integer.valueOf(request.getParameter("codesignataire")).intValue(), Integer.valueOf(request.getParameter("codebeneficiaire")).intValue(), request.getParameter("lettrecle"), request.getParameter("lettreclecomplt"), request.getParameter("datedebutsoins"), request.getParameter("datefinsoins"),request.getParameter("typedecompte")));
} else if (typeParameter.equals("getDetaildossier")) {
Extraitdetaildossier Extract= new Extraitdetaildossier();
//789500, "20151113", "RA", "156804")
response.getWriter().write(Extract.getfluxdetaildossier(Integer.valueOf(request.getParameter("numsinistre")).intValue(), request.getParameter("codedossier"), request.getParameter("codestatut"), request.getParameter("codepersonne")));
//response.getWriter().write(Extract.getfluxdetaildossier(789500, "20151113", "RA", "156804"));
}
}
response.getWriter().flush();
response.getWriter().close();
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
my jsp : afficheparametre.jsp on the server.
<body class="claro">
<%=request.getAttribute("codepersonne") %>
</body>
</html>
thanks for help