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:
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:
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:
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 :)