2009-03-27 14 views
0

Hallo an alle und vielen Dank im Voraus.JSP-Socket nur einmal senden Zeichenfolge

Dies ist ein letzter Versuch, herauszufinden, was das Problem ist, oder eine bessere Lösung zu finden.

Ich verwende JSP-Filter, um Web-Zugriff auf einen Tomcat-Webserver zu filtern.

Ich habe einen Client, einen Server und den Filter.

Der Client und der Filter öffnen die Sockets, die der Server empfängt.

Ich habe gehört, dass ein Server-Socket in einer JSP-Dateien bis zu öffnen ist ein no-no, aber ich kann einen besseren Weg nicht, dass es einen String an die Server-Software senden zu machen, wenn Sie wissen, jeder bitte

erzähl

Aber das Problem auf der Hand ist, dass wenn die Seite gefiltert ist, nur die Zeichenfolge zuerst und nicht immer danach senden

Ich habe den Socket im Filter geöffnet und der Empfänger im Server-Programm ist in einem Thread, so sollte es Nehmen und drucken Sie die Zeichenfolge, wenn sie empfangen wird.

Alle meine Code ist hier gezipped, müssen Sie Tomcat zu laufen.

http://www.easy-share.com/1904209945/JNetProtect.zip

Ich bin für die Länge und Komplexität dieser Frage wirklich leid, bitte, ob es einen besseren Weg, dies zu tun ist, sprechen auf,

Antwort

1

Von Ihrer Erklärung es mir sieht, dass Ihnen fehlen einige wichtige Konzepte. Bitte entschuldigen Sie, wenn es für Sie beleidigend klingt.

Die JSP-Seite wird auf dem Server verarbeitet. Wenn Sie in Ihrer JSP einen Socket öffnen, heißt das nicht, dass der Client den Socket öffnet.

Allerdings können Sie nicht Befehlsmuster verwenden, wahrscheinlich Servlet-Filter verwenden, um Ihre Anfrage an ein bestimmtes Command-Objekt zu richten und dann Ihre Socket-Sachen dort zu tun.

+0

Ja, tut mir leid, ich benutze einen Serverlet Filter und tun die Socket Zeug unter DoFilter-Methode, aber es scheint wie es die Verbindung in der Luft verlassen, nachdem eine Zeichenfolge einmal gesendet wird. –

+0

Nun, ich habe gerade Ihren Filtercode durchgegangen. Also, Sie meinen, die erste Anfrage auf der Seite macht den Filter arbeiten, und danach funktioniert die nachfolgenden Anfragen nicht? Nicht so sicher, warum das passiert. Versuchen Sie das Socket in der init() zu öffnen und schließen Sie es in destroy(). Und schau, ob es irgendwelche Ausnahmen gibt. –

+0

Hey, und du schließt die Steckdose nicht irgendwo, ich habe es gerade bemerkt. –

0

Nun, ich keine Ausnahmen bekommen habe,

Aber was würden Sie vorschlagen, ich mit diesem Filter zu tun, so kann ich eine outSide.println tun() in dem DoFilter()?

import java.net.*; 
import java.io.*; 
import java.util.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public final class IEFilter implements Filter 
{ 
    public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) throws IOException, ServletException 
    { 
    ServerSocket fs; 
    String browser = ""; 
    String blockInfo; 
String address = request.getRemoteAddr(); 

    if(((HttpServletRequest)request).getHeader ("User-Agent").indexOf("MSIE") >= 0) 
    { 
      browser = "Internet Explorer"; 
    } 

    if(browser.equals("Internet Explorer")) 
    { 

     BufferedWriter fW = new BufferedWriter(new FileWriter("C://logs//IElog.rtf")); 
     blockInfo = "Blocked IE user from:" + address;   
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<HTML>"); 
     out.println("<HEAD>"); 
     out.println("<TITLE>"); 
     out.println("This page is not available - JNetProtect"); 
     out.println("</TITLE>"); 
     out.println("</HEAD>"); 
     out.println("<BODY>"); 
     out.println("<center><H1>Error 403</H1>"); 
     out.println("<br>"); 
     out.println("<br>"); 
     out.println("<H1>Access Denied</H1>"); 
     out.println("<br>"); 
     out.println("Sorry, that resource may not be accessed now."); 
     out.println("<br>"); 
     out.println("<br>"); 
     out.println("<hr />"); 
     out.println("<i>Page Filtered By JNetProtect</i>"); 
     out.println("</BODY>"); 
     out.println("</HTML>"); 

     // outSide.println("Blocked and Internet Explorer user"); 

     fW.write(blockInfo); 
     fW.newLine(); 
     fW.close(); 

    } else {   
     chain.doFilter(request, response);   
    } 
    } 

    public void destroy() 
    { 
     outsocket.close(); 
     outSide.close(); 
    } 

    public void init(FilterConfig filterConfig) 
    { 

    try 
    { 

    Socket outsocket; 
    PrintWriter outSide ; 

    outsocket = new Socket("Localhost", 1337); 
    outSide = new PrintWriter(outsocket.getOutputStream(), true); 

    }catch (Exception e){ 
    System.out.println("error with this connection"); 
    e.printStackTrace(); 
    } 

    } 
} 
+0

Ich schätze, der Filter hat keine Hauptversehen die Formatierung, sorry darüber. –

+0

Sie haben ServerSocket fs ohne Grund definiert. Außerdem haben Sie den Socket in Ihrem init() geöffnet, das ist richtig, aber es ist lokal, wie können Sie es in doFilter() verwenden? Ich hoffe, Sie verstehen meinen Standpunkt. –

+0

Ich bemerkte, dass ich es nicht benutzen konnte, ich weiß wirklich nicht, was ich von hier aus tun soll. –