使用Servlets?

时间:2011-11-18 14:00:18

标签: java servlets

普通的java文件只执行main中调用的那些方法。但是servlet做了什么?我想也许它会执行文件,但我只是试图分割HTTP servlet请求和响应,但它不起作用。什么是使用servlet读取输入流,然后执行一些可以调用响应编写器方法的函数的简洁方法?

这是我的试用代码:

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    

7 个答案:

答案 0 :(得分:3)

  

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

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

  

但是servlet做了什么?我想也许它会在文件中执行

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

  

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

这正是servlet的作用(尽管HTTP请求的头部由servlet容器解析并作为请求对象的一部分传递给servlet)。你真的想做什么?

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

答案 1 :(得分:0)

Java类只是按顺序执行方法。

如果您想使用多种方法,则必须分解您的功能并明确调用您想要使用的其他方法,就像在独立程序中一样。

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

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

答案 2 :(得分:0)

方法永远不会按顺序执行。它们在被叫时被执行。

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

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

您可以先查看here

答案 3 :(得分:0)

Servlet通常用于Web服务器的上下文中。这与“普通Java文件”形成对比,后者通常从命令行执行,并以main方法开头。

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

简而言之,HttpServlet的doPostdoGetservice方法大致相当于main方法(尽管有一些重要的区别,例如{{1}输入一次方法,而main可以输入多次)。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

HttpServlet已经定义了可以为不同类型的http请求实现的方法:

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

等...

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

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

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

答案 6 :(得分: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   

当我问这个问题时,这就是我想要实现的。