我现在有一个简单的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
}
}
答案 0 :(得分:1)
首先,您的hashcode
不是线程安全的。
查看提供的代码段后。我不这么认为。这很简单。
您将获得accountName
作为参数,然后将其写回。你想要的吗?或者你的意思是回应哈希版本。
您可能希望验证accountName
参数,因为它是用户提供的输入。
答案 1 :(得分:1)
直接使用Servlet时,创建一个继承的BaseServlet
类会有所帮助,它提供了方便的方法:
通常,您希望定义一个从doGet / doPost调用的handle(HttpRequest req, HttpResponse)
方法,因此您可以将所有通用错误处理移到实现类之外。根据您的回复的复杂程度,您甚至可能想要handle(PrintWriter out)
,这样您就不必每次都对io的东西大惊小怪。
为了拥有工厂而拥有工厂是一项非常Java的工作,但我不知道这对你有什么好处。
2)完全取决于您的应用之间的合约是什么,以及您期望他们的互动在未来变得多么复杂。
3)如果您没有有效的输入,您肯定要验证参数并发回400
状态代码。
Adeel已经指出了hashcode
的明显问题。
如果您希望这变得更加复杂,Jersey是实现应用到应用程序远程服务的绝佳框架(严格来说,即使它们不是RESTful)。