Java 使用servlet?

Java 使用servlet?,java,servlets,Java,Servlets,普通的java文件只执行在main中调用的那些方法。但是servlet做什么呢?我想它可能会执行文件,但我只是尝试拆分HTTP servlets请求和响应,但它不起作用。使用servlet读取输入流,然后执行一些可以调用响应编写器方法的函数,这是一种什么好方法 这是我的试用代码: public void requestReader(HttpServletRequest req) { try { int len = req.getContentLength();

普通的java文件只执行在main中调用的那些方法。但是servlet做什么呢?我想它可能会执行文件,但我只是尝试拆分HTTP servlets请求和响应,但它不起作用。使用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    
没有Java类只是按顺序执行方法

如果要使用多个方法,必须分解功能并显式调用要使用的其他方法,就像在独立程序中一样

Servlet的执行通常从请求处理程序开始


这里有一个示例,但还有无数其他示例--只需搜索“servlet tutorial”。

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

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

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


您可以从查看web服务器上下文中通常使用的servlet开始。这与通常从命令行执行并以
main
方法开始的“普通Java文件”形成对比

为了让servlet正常工作,您需要使其成为JavaWeb应用程序的一部分。如果您以前从未这样做过,那么最好遵循有关JavaWeb应用程序的教程


简而言之,HttpServlet的
doPost
doGet
service
方法大致等同于
main
方法(尽管有一些重要区别,例如
main
方法只输入一次,而
service
可以输入多次)。

当GET HTTP请求进入时,servlet映射到请求的路径,然后调用servlet方法。如果它是一个帖子,那么就叫做。您需要重写这些方法中的一个(或两个)来处理请求和响应

阅读HttpServlet的javadoc了解更多信息

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

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

但是servlet做什么呢?我想它可能会执行文件

servlet在servlet容器中运行,例如ApacheTomcat或Jetty。容器本身是通过一个main方法启动的,它在
web.xml
文件中了解servlet类,并在请求到达时调用servlet的
service()
方法

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

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


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

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

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

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

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


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

对于任何感兴趣的人,这里有一个更新代码,它通过将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   

当我问这个问题时,这就是我想要达到的目标

不要再担心servlet和输入流了,你到底想做什么?你只是想显示一个页面还是什么?是的,我正在使用ApacheTomcat。我真正想做的是有一个类来处理输入。然后创建一个类,该类接受前一个类生成的字符串。它对它进行填充,然后将其发送到第三个类,该类将字符串返回给客户机程序。与拥有一个能做所有事情的单一类相反。@Eric Banderhide:当然,你可以做所有这些。servlet代码可以调用所有类型的其他类。事实上,这是通常的情况。