IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Création d'un browser - interprétation html


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Par défaut Création d'un browser - interprétation html
    Bonjour à tous,

    Je cherche à créer un browser en java, quelque chose de vraiment basique pour l'instant. Mon browser peut déjà lire toutes les pages sauf quand j'essaie de me connecter à un serveur (que je crée également en java). Au moment de la connexion, mon serveur envoie une page html à mon browser qui souhaite le lire. Le browser le lit mais n'interprète pas les balises html, il ne fait que ressortir tout le texte...

    Pourriez-vous m'indiquer pour pourrait se trouver mon erreur ?

    Code du server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    package ServerConnection;
     
    import java.io.IOException;
    import java.net.BindException;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Date;
    import java.util.logging.FileHandler;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    import Logger.CustomFormatter;
    import Logger.DateWeekYear;
    import Memory.GetMemoryUsage;
     
    public class Server {
     
    	private final static Logger ServerLogger = Logger.getLogger("ServerLog");
     
    	/*
    	 * agrs [0] = Port number
    	 * args [1] = Server's Timeout
    	 * args [2] = LogLevel 	
    	 */
    	public static void main(String []agrs){
     
    		// Get the Argument from the command line
    		int port = Integer.parseInt(agrs[0]);
    		int timeout = Integer.parseInt(agrs[1]);
    		int logLevel = Integer.parseInt(agrs[2]);
     
    		int clientNumber = 1 ;
     
    		// Define the Logger
    		switch(logLevel){
     
    		case 0: ServerLogger.setLevel(Level.INFO);
    				break ;
    		case 1: ServerLogger.setLevel(Level.WARNING);
    				break;
    		case 2: ServerLogger.setLevel(Level.SEVERE);
    				break ;
    		default:
    				ServerLogger.setLevel(Level.INFO);
    		}
     
    		// Server Information
    		ServerSocket mySkServer = null ;
    		InetAddress localAddress ;
     
     
    		// Logger
    		CustomFormatter myFormatter = new CustomFormatter();
    		DateWeekYear dateWeek = new DateWeekYear();
    		Date date = new Date();
    		String currentWeek = dateWeek.yearWeekYearFromDate(date); // Get the current Week of the Year
     
     
     
    		try {
     
    			localAddress = InetAddress.getLocalHost() ;
    			mySkServer = new ServerSocket(port,10,localAddress);
     
    			mySkServer.setSoTimeout(timeout);
     
    			// Logger
    			FileHandler fh = new FileHandler(".//Log//MyLog"+currentWeek+".log",true);  // Création du fichier log
     
    			// Use the Formatter
    			fh.setFormatter(myFormatter);
    			ServerLogger.addHandler(fh);
     
    			// Previous Information 
    			System.out.println("Default Timeout : "+mySkServer.getSoTimeout());
    			ServerLogger.info("Default Timeout : "+mySkServer.getSoTimeout());
    			System.out.println("Used IpAddress : "+mySkServer.getInetAddress());
    			ServerLogger.info("Used IpAddress : "+mySkServer.getInetAddress());
    			System.out.println("Listening to Port : "+mySkServer.getLocalPort());
    			ServerLogger.info("Listening to Port : "+mySkServer.getLocalPort());
     
     
     
    			// Wait for a client connection
     
    			System.out.println("********************* Start **************************");
    			ServerLogger.info("********************* Start **************************");
     
    			while(true){
     
     
     
    				System.out.println("1-Memory in main Thread : "+GetMemoryUsage.GetValue()+" kb");
    				ServerLogger.warning("1-Memory in main Thread : "+GetMemoryUsage.GetValue()+" kb");
    				Socket clientSocket = mySkServer.accept() ;
     
    				System.out.println("Connection request recieved");
    				ServerLogger.info("Connection request recieved");
     
    				System.out.println("2-Memory before Thread : "+GetMemoryUsage.GetValue()+" kb");
    				ServerLogger.warning("2-Memory before Thread : "+GetMemoryUsage.GetValue()+" kb");
     
    				Thread t = new Thread(new AcceptClient(clientSocket, clientNumber, ServerLogger));
    				clientNumber++ ;
    				t.start();
     
    				System.out.println("3-Memory after Thread : "+GetMemoryUsage.GetValue()+" kb");
    				ServerLogger.warning("3-Memory after Thread : "+GetMemoryUsage.GetValue()+" kb");
    			}
     
    		}catch (BindException e) {
    			System.out.println("This Port is already used");
    			ServerLogger.severe("This Port is already used");
    		} catch (IOException e) {
    			System.out.println("IO Exception");
    			ServerLogger.severe("IO Exception");
    		}
     
     
    	}
     
     
     
    }
    Code du Accept Client gérant les threads :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    package ServerConnection;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;
    import java.util.logging.Logger;
     
    import Memory.GetMemoryUsage;
     
    public class AcceptClient implements Runnable {
     
    	// General Server Information
    	private Socket clientSocket ;
    	private int clientNo ;
    	private Logger ServerLogger ;
     
    	// Streams
    	private	PrintWriter pout ;
    	private	BufferedReader buffin ;
    	private	Scanner sc ;
    	private String homePage = "" ;
    	private String browserMessage ;
    	private String header ;
     
     
    	// Constructor
    	public AcceptClient(Socket clientSocket, int clientNo, Logger ServerLogger){
     
    		this.clientSocket = clientSocket ;
    		this.clientNo = clientNo ;
    		this.ServerLogger = ServerLogger ;
    	}
     
     
    	@Override
    	public void run() {
     
    			try {
     
    					//sc = new Scanner(new File(".\\page.html"));
     
    					ServerLogger.info("A client is connected");
    					System.out.println("client number : "+clientNo);
    					ServerLogger.info("client number : "+clientNo);
     
    					pout = new PrintWriter(clientSocket.getOutputStream()); 
    					buffin = new BufferedReader (new InputStreamReader (clientSocket.getInputStream()));
     
     
    					// Recieved the header
    					while(true){
    						browserMessage = buffin.readLine().trim();
     
    						header = header + browserMessage + "\n";
    						//System.out.println("MESSAGE :                                "+header);
    						if (browserMessage.equals(""))
    						{
    							break;
    						}
    					}
    					// Check with browser is connected
     
    					CheckHeader(header) ;
     
    					sc = CheckPage(header);
    					// Send the home page
    					while(sc.hasNextLine())
    					{
     
    						homePage = sc.nextLine() ;
    						pout.println(homePage);
    						pout.flush();
     
    					}
     
    					System.out.println("/************ End ******************/");
    					ServerLogger.info("/************ End ******************/");
    					clientNo++ ;
    					clientSocket.close() ;
    			}
    				catch (IOException e) {
    				System.out.println("IO Exception");
    				ServerLogger.severe("IO Exception");
    			}
    			finally {
    				pout.close() ;
    				try {clientSocket.close();}
    				catch (IOException e) {};
    				  System.out.println("X-Memory end Thread : "+GetMemoryUsage.GetValue()+" kb");
    				  ServerLogger.warning("X-Memory end Thread : "+GetMemoryUsage.GetValue()+" kb");
    				}
    			}
    	/**
             * Give the header from the browser and give back in the log which browser it is
             * @param header
             */
    	public void CheckHeader(String header){
     
    		if(header.contains("Firefox/")){
    			ServerLogger.info("Header from : Mozilla FireFox");
    		}
    		else if(header.contains("Chrome/")){
    			ServerLogger.info("Header from : Google Chrome");
    		}
    		else {
    			ServerLogger.info("Header from : Internet Explorer or else");
    		}
    	}
     
    	public Scanner CheckPage(String header) throws FileNotFoundException{
     
    		if(header.contains("/admin")){
    			return new Scanner(new File(".\\admin.html"));
    		}else if(header.contains("/lost")) {
    			return new Scanner(new File(".\\lost.html"));
    		}else {
    			return new Scanner(new File(".\\page.html"));
    		}
     
     
     
     
     
    	}
     
    	}
    Et enfin mon browser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    package Client;
     
     
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.URL;
     
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.Document;
     
    public class TheBrowserTest extends JFrame implements ActionListener
    {
        private static final long serialVersionUID = 1L;
    	private JLabel prompt; //Cues user to enter a URL.
    	private JTextField sourceName; //Holds URL string.
      	private JPanel requestPanel; //Contains prompt
    	//and URL string.
    	private JEditorPane contents; //Holds page.
     
    public static void main(String[] args) throws IOException
    	{
    	TheBrowserTest frame = new TheBrowserTest();
    		frame.setSize(700,500);
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    	}
    	public TheBrowserTest() throws IOException
    	{
    		setTitle("ZeBrozair");
    		requestPanel = new JPanel();
    		prompt = new JLabel("Required URL: ");
    		sourceName = new JTextField(25);
    		sourceName.addActionListener(this);
    		requestPanel.add(prompt);
    		requestPanel.add(sourceName);
    		add(requestPanel, BorderLayout.NORTH);
     
    		contents = new JEditorPane("http://192.168.108.10");
     
    		//We don't want the user to be able to alter the
    		//contents of the Web page display area, so...
    		contents.setEditable(false);
     
    		//Create object that implements HyperlinkListener
    		//interface...
    		LinkListener linkHandler = new LinkListener();
     
    		//Make the above object a HyperlinkListener for
    		//our JEditorPane object...
    		contents.addHyperlinkListener(linkHandler);
     
    		//'Wrap' the JEditorPane object inside a
    		//JScrollPane, to provide scroll bars...
    		add(new JScrollPane(contents),
    				BorderLayout.CENTER);
    	}
     
    	public void actionPerformed(ActionEvent event)
    	//Called when the user presses <Enter>
    	//after keying a URL into the text field
    	//and also when a hyperlink is clicked.
    	{
    		showPage(sourceName.getText());
    	}
     
    	private class LinkListener implements HyperlinkListener
    	{
    		public void hyperlinkUpdate(HyperlinkEvent event)
    		{
    			if (event.getEventType() ==  HyperlinkEvent.EventType.ACTIVATED)
    				showPage(event.getURL().toString());
    			//Other hyperlink event types ignored.
    		}
    	}
     
    	private void showPage(String location)
    	{
    		try
    		{
    			Document doc = contents.getDocument() ;
     
    			//Reset page displayed on JEditorPane...
    			contents.setContentType("text/html");
     
    			contents.setPage(location);
     
    			//Reset URL string in text field...
    			sourceName.setText(location);
    		}
     
    		catch(IOException ioEx)
    		{
    			JOptionPane.showMessageDialog(this,
    					"Unable to retrieve URL",
    					"Invalid URL",
    					JOptionPane.ERROR_MESSAGE);
    		}
    	}
    }

    Pour la page html c'est une page vraiment basique comme ceci :

    <html>
    <head>
    <title>Homepage</title>
    </head>

    <body>
    <h1>HomePage</h1>
    </body>
    </html>


    Si vous avez des idées n'hésitez pas...

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Est-ce que ton serveur renvoie un header "content type"? Qu'est-ce que ça donne si tu te connecte avec un vrai browser?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Par défaut Browser
    Hello,

    D'abord merci de ta réponse, alors avec un browser officiel (Chrome, Firefox ou IE) tout marche très bien et non je ne revoie pas de header content type mais vu que ça marche avec un autre browser je sais pas si c'est vraiment nécessaire

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il vaut mieux envoyer correctement les header. Un JEditorPane, ce n'est pas un browser, son implémentation est basique, il y a de fortes chance qu'il lise le content type depuis l'URL que tu lui donne.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Par défaut
    Tu aurais un exemple d'envoi de header ? Je le rajoute dans la page ou je l'envoie séparément ?

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482

Discussions similaires

  1. pour la création de page php et html
    Par speedylol dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/06/2008, 23h42
  2. Réponses: 8
    Dernier message: 24/09/2007, 15h39
  3. [FPDF] Interpréter HTML pour PDF
    Par MANU_2 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/09/2007, 18h41
  4. Interprétation HTML
    Par Outlaws22 dans le forum Struts 2
    Réponses: 1
    Dernier message: 13/07/2007, 22h12
  5. [CR][VS 2005] Interpréter HTML
    Par Piolet dans le forum SDK
    Réponses: 5
    Dernier message: 10/05/2007, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo