JSP套接字只发送一次字符串

时间:2009-03-27 02:47:46

标签: java sockets jsp

大家好,并提前致谢。

这是解决问题的最后努力或找到更好的解决方案。

我使用JSP过滤器来过滤对tomcat Web服务器的Web访问。

我有一个客户端,一个服务器和过滤器。

客户端和过滤器打开服务器接收它们的套接字。

我听说在JSP文件中打开一个服务器套接字是禁止的,但是我想不出更好的方法让它向服务器软件发送一个字符串,如果你知道的话请告诉

但是现有的问题是,当页面被过滤时,它只是最初发送字符串而不是之后的任何时间

我在过滤器中打开了套接字,并且服务器程序中的接收器在一个线程中,所以它应该在接收时打印并打印字符串。

我的所有代码都在这里压缩,你需要运行tomcat。

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

对于这个问题的篇幅和复杂性我真的很抱歉,如果还有更好的方法可以说出来,请说出来,

2 个答案:

答案 0 :(得分:1)

从你的解释来看,我认为你缺乏一些重要的概念。如果这听起来很冒犯,请原谅。

在服务器上处理JSP页面,这意味着如果在JSP中打开套接字并不意味着客户端正在打开套接字。

但是,您不能使用命令模式(可能使用Servlet Filter)将您的请求定向到特定的Command对象,然后在那里执行套接字。

答案 1 :(得分:0)

我没有得到任何例外,

但你有什么建议我使用这个过滤器,所以我可以在DoFilter()中做一个outSide.println()?

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();
   }

  }
}