【问题标题】:Splitting a servlet file into multiple files将 servlet 文件拆分为多个文件
【发布时间】:2016-04-17 04:34:08
【问题描述】:

我目前正在使用 JSP、Servlet 和 Apache POI 构建预算估算器 Web 应用程序。

我有一个 servlet 文件,它接受来自用户的表单输入,并在执行一些计算后根据这些输入将预算估计值写入 Excel 文件。 有 4 种不同的预算类别。为方便起见,我将它们称为 A、B、C、D。该应用程序生成一个 Excel 文件,其中包括: 1) 预算汇总表 2) 4 个类别中的每一个都有单独的表格

目前,所有这些类别的预算计算代码都在一个 servlet 文件中。我想将这 4 个类别的计算部分拆分为单独的 servlet 文件。我想让用户跟踪为每个类别分配了多少预算。我计划按如下方式实现:一个按钮将放置在每个类别的末尾。当用户单击该按钮时,应调用一个 servlet,该 servlet 将执行预算计算并返回该类别的预算估算,该估算应显示在同一网页上(可能在文本字段中)。类别 B、C 和 D 相同。最终,如果用户对分配感到满意,他可以通过单击“生成报告”按钮生成 Excel 报告。单击此按钮将调用主 servlet 文件,将依次调用 5 个不同的 servlet,这些 servlet 生成 5 张 Excel 文件。将这5张表绑定在一起生成最终的excel,并通过主servlet文件返回给用户。

我需要有关如何执行此操作以及完成此操作的有效方法的建议。任何帮助表示赞赏!提前致谢!

【问题讨论】:

  • 为什么你不能只使用java类,提交到5个servlet的目的是什么。只需提交到单个 servlet 并根据用户输入调用不同的方法。从 servlet 内的 java 类和方法中获取帮助。
  • 创建五个不同的 servlet 是个坏主意(就性能和维护而言)。只需让您的 servlet 处理四个不同的类别。如果您不想重新加载整个页面,您甚至可以使用 AJAX 并在文本字段中显示预算。
  • 你还是可以在1个servlet中做的,随请求传递一个参数来决定你要做什么进程,然后在servlet中调用相应的方法doGet()或者doPost(),全部计算方法应该在一个单独的类中,您在 servlet 中实例化并从对象调用方法

标签: java jsp servlets apache-poi


【解决方案1】:

你仍然可以在 1 个 servlet 中完成,通过一个参数 say calculate 与请求一起确定你想要执行哪个进程,然后在 servlet 中调用适当的方法,所有计算方法都应该在一个单独的类中 @ 987654322@ ,您在 servlet 中实例化和使用

在下面找到建议:

public class BudgetCalculation {

    public String calculateA(...some params...){

        return result;
    }

    public String calculateB(...some params...){

        return result;
    }

    public String calculateC(...some params...){

        return result;
    }

    public String calculateD(...some params...){

        return result;
    }
}

假设您有一个生成 Excel 工作表的库,ExcelUtil

public class MyServlet extends HttpServlet {

    public void doGet(...request,....){ // this can also be doPost(), use the one your current solution works with
        BudgetCalculation budgetCalculation = new BudgetCalculation();

        if(request.getParameter("calculate").equals("a")){
            return budgetCalculation.calculateA(...params...);
        }else if(request.getParameter("calculate").equals("b")){
            return budgetCalculation.calculateB(...params...);
        }else if(request.getParameter("calculate").equals("c")){
            return budgetCalculation.calculateC(...params...);
        }else if(request.getParameter("calculate").equals("d")){
            return budgetCalculation.calculateD(...params...);
        }else if(request.getParameter("calculate").equals("all")){
            ExcelUtil excelUtil = new ExcelUtil();
            excelUtil.createExcelFile(..params...);
            return ExcelFileUrl;
        }
    }
}

现在发送a、b、c、d或all,每个按钮点击作为参数calculate的值

【讨论】:

  • 感谢您的建议。我正在通过如下表单操作调用 servlet:
    目前,单击提交按钮会进入 servlet 调用。如何将参数传递给 servlet?我将在表单中有 5 个按钮:四个类别中的每一个都应显示相应的当前预算而无需刷新页面,第五个用于生成 Excel 文件。以及如何让所有 5 个按钮调用同一个 servlet?
  • 您可以在每个按钮上设置一个名为 calculate、<input type="hidden" name="calculate"/> 和 onClick() 的隐藏字段,将隐藏值设置为 a,b ,c ...然后提交表单,如果您将该表单中的action 设置为servlet,然后所有调用都将转到同一个servlet。关于不刷新,您需要使用 Ajax。
  • 感谢您的建议!我一定会试试的。
【解决方案2】:

正如其他人已经指出的那样,您应该使用一个类来执行此操作,但如果您真的希望按顺序调用多个 servlt,您可以使用 RequestDispatcher,它通过将 url 映射到 servlet 请求来工作(如 @987654321 @):

public class Test_ALL extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     response.setContentType("text/plain");
     request.getRequestDispatcher("/Servlet1").include(request, response);
     request.getRequestDispatcher("/Servlet2").include(request, response);
     .....

  }
}

【讨论】:

  • 来自this answer 对公然plagiarism 的粗暴反对。您擅长搜索真是太好了,但请包含指向您找到信息的来源的链接,而不是不尊重自己。否则,只需投票关闭作为重复。
  • 对不起,我忘记了,我已经包含了链接
  • 我同意,我建议顺序调用的唯一原因是因为 OP 提到了预算摘要,只有在 OP 获得所有 4 个类别的预算结果后才能生成。
猜你喜欢
  • 2013-08-24
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多