大家好,并提前致谢。
这是解决问题的最后努力或找到更好的解决方案。
我使用JSP过滤器来过滤对tomcat Web服务器的Web访问。
我有一个客户端,一个服务器和过滤器。
客户端和过滤器打开服务器接收它们的套接字。
我听说在JSP文件中打开一个服务器套接字是禁止的,但是我想不出更好的方法让它向服务器软件发送一个字符串,如果你知道的话请告诉
但是现有的问题是,当页面被过滤时,它只是最初发送字符串而不是之后的任何时间
我在过滤器中打开了套接字,并且服务器程序中的接收器在一个线程中,所以它应该在接收时打印并打印字符串。
我的所有代码都在这里压缩,你需要运行tomcat。
http://www.easy-share.com/1904209945/JNetProtect.zip
对于这个问题的篇幅和复杂性我真的很抱歉,如果还有更好的方法可以说出来,请说出来,
答案 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();
}
}
}