2011-11-18 66 views
-2

正常的java文件只执行main中调用的那些方法。但是,servlet做了什么?我想也许它执行文件,但我试图分裂一个HTTP servlets请求和响应,但它不起作用。使用servlet来读取输入流,然后执行一些可以调用响应写入器方法的函数是一种很好的方式?使用Servlets?

这里是我的试用代码:

public void requestReader(HttpServletRequest req) { 
    try { 
     int len = req.getContentLength(); 
     byte[] input = new byte[len]; 

     ServletInputStream sin = req.getInputStream(); 
     int c, count = 0 ; 
     while ((c = sin.read(input, count, input.length-count)) != -1) { 
      count +=c; 
     } 

     sin.close();   
     String inString = new String(input); 
     int index = inString.indexOf("=");    
     String value = inString.substring(index + 1);       
     inputStream = URLDecoder.decode(value, "UTF-8");   

    } catch (IOException e) { 

    } 

}//end of requestReader 

public void responseWriter(HttpServletResponse resp) { 
    try{ 
      resp.setStatus(HttpServletResponse.SC_OK); 
      OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream()); 
      writer.write("Working");  
      writer.flush(); 
      writer.close();    

    } catch (IOException e) { 

    } 


}//end of responseWriter  
+1

不再担心servlet和输入流一分钟,你究竟想要做什么?你只是想显示一个页面或什么? – aishwarya

回答

0

感兴趣的人,这里是一个更新的代码,通过将ServletResponse的另一个类做的工作:

public void doPost(HttpServletRequest req, HttpServletResponse resp) { 
    try { 
     int len = req.getContentLength(); 
     byte[] input = new byte[len]; 

     ServletInputStream sin = req.getInputStream(); 
     int c, count = 0 ; 
     while ((c = sin.read(input, count, input.length-count)) != -1) { 
      count +=c; 
     } 

     sin.close();   
     String inString = new String(input); 
     int index = inString.indexOf("=");    
     String value = inString.substring(index + 1);       
     inputStream = URLDecoder.decode(value, "UTF-8");   

    } catch (IOException e) { 

    } 
    responseWriter(resp); 
}//end of requestReader 

public void responseWriter(HttpServletResponse resp) { 
    try{ 
      resp.setStatus(HttpServletResponse.SC_OK); 
      OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream()); 
      writer.write("Working");  
      writer.flush(); 
      writer.close();    

    } catch (IOException e) { 

    } 


}//end of responseWriter 

这是所有我试图实现当我问的问题。

0

没有 Java类简单的顺序执行的方法。

如果你想使用多种方法,你必须打破你的功能,并明确地调用你想要使用的其他方法,就像你在一个独立的程序中一样。

Servlet执行从请求处理程序开始,通常为doPost or doGet

这是一个tutorial to read through,但也有无数其他人 - 只需搜索“servlet教程”。

0

方法永远不会顺序执行。他们在被调用时执行。

servlet的功能是为来自Web浏览器的HTTP请求提供服务。为此,您的servlet必须实现一个service()方法,然后从其中调用您的方法。

您也可以实施doPost()doGet(),但它们只响应POST和GET命令。

您可以通过查看here

0

的Servlet启动Web服务器的情况下,通常使用。这与通常从命令行执行并以main方法开始的“普通Java文件”形成对照。

为了使您的servlet正常工作,您需要将它设置为Java Web应用程序的一部分。如果你以前从未这样做过,最好遵循关于Java Web应用程序的教程。

简言之,HttpServlet中的doPostdoGet,或者service方法是大致相当于main方法(尽管如main方法的一些重要区别被输入一次,而service可以输入多次)。

0

当一个GET HTTP请求进来,并且该servlet被映射到该请求的路径时,那么将调用该servlet的方法doGet。如果是POST,则调用doPost。您需要重写这些方法中的一个(或两个)以根据请求和响应执行所需操作。

阅读HttpServlet的javadoc以了解更多信息。

3

一个普通的java文件只执行main中调用的那些方法。

“Java文件”不执行任何操作。JVM由java命令行工具启动,执行主要方法。

但是,servlet做什么?我想也许它执行文件

一个servlet运行在一个Servlet容器内, Apache Tomcat或Jetty。容器本身是通过主要方法启动的,它学习了其web.xml文件中的servlet类,并在请求到达时调用servlet的service()方法。

什么是使用servlet来读取输入流,然后执行一些可以调用响应写入器方法的函数的简洁方法?

这正是servlet所做的事情(虽然HTTP请求的标头由servlet容器解析并作为请求对象的一部分传递给servlet)。你真的想做什么?

如果您没有运行servlet容器,那么使用servlet是没有意义的。

+0

是的,我正在使用Apache Tomcat。 我真正想做的是有一个类来处理输入。然后有一个类,该类使用由前一个类生成的字符串。这对它有用,然后将它发送给第三个类,该字符串将字符串返回给客户端程序。而不是让一个班级去做所有事情。 –

+0

@Eric Banderhide:当然,你可以做到这一切。 servlet代码可以调用各种其他类。事实上,这是通常的情况。 –

0

的HttpServlet已经确定可以实现对不同类型的HTTP请求的方法:

doGet() 
doPost() 
doDelete() 
doPut() 

等等

这些方法都有一个请求和响应参数。

您可以读取请求的数据,调用您想要的任何服务,然后使用参数中的httpServletResponse写入响应。

您不必像您在问题中那样定义自己的方法。