servlet代码结构/模式的想法?写作回应

时间:2011-06-09 10:47:46

标签: java design-patterns servlets

我现在有一个简单的servlet。我需要它来调用静态jar方法并返回它的响应。

1)有人可以推荐一个合适的结构,即我是否需要创建工厂和处理程序类等...

2)我应该如何对响应中的哈希进行编码...简单地写入输出流是否可以做其他事情?即写入标题等。另一个应用程序将阅读响应。

3)不确定处理空值等。

package myproj.servlet;

//Std imports
//Serlet imports
import myproj.hash.HashGenerator;

public class MyServlet extends HttpServlet{

String hashcode;

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    String accountName = req.getParameter("accountName");

    try {
        hashcode = HashGenerator.hash(accountName);
        resp.setContentType("text/plain");
        PrintWriter out = resp.getWriter(); 
        //[EDIT] was returning accountName by accident
        out.print(hashcode );

    } catch (Exception e) {
        //Some logging code
    }

}

2 个答案:

答案 0 :(得分:1)

首先,您的hashcode不是线程安全的。

  1. 查看提供的代码段后。我不这么认为。这很简单。

  2. 您将获得accountName作为参数,然后将其写回。你想要的吗?或者你的意思是回应哈希版本。

  3. 您可能希望验证accountName参数,因为它是用户提供的输入。

答案 1 :(得分:1)

直接使用Servlet时,创建一个继承的BaseServlet类会有所帮助,它提供了方便的方法:

  • 参数处理/验证
  • 解析路径信息
  • 将Java例外映射到HTTP结果代码
  • 等...

通常,您希望定义一个从doGet / doPost调用的handle(HttpRequest req, HttpResponse)方法,因此您可以将所有通用错误处理移到实现类之外。根据您的回复的复杂程度,您甚至可能想要handle(PrintWriter out),这样您就不必每次都对io的东西大惊小怪。

为了拥有工厂而拥有工厂是一项非常Java的工作,但我不知道这对你有什么好处。

2)完全取决于您的应用之间的合约是什么,以及您期望他们的互动在未来变得多么复杂。

3)如果您没有有效的输入,您肯定要验证参数并发回400状态代码。

Adeel已经指出了hashcode的明显问题。

如果您希望这变得更加复杂,Jersey是实现应用到应用程序远程服务的绝佳框架(严格来说,即使它们不是RESTful)。