【问题标题】:Servlet: Handling many optional parametersServlet:处理许多可选参数
【发布时间】:2013-12-06 17:03:02
【问题描述】:

只是想知道是否有更优雅或更标准的方法来处理可选参数,或者您是否必须检查每个参数是否为空。我有 10 多个可选参数,所以它变得有些难看。

理想情况下,我想要类似 bash 命令:getopts

public class MapImageServlet extends HttpServlet {
    ... constructor and other methods ...
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // OPTIONAL PARAMETERS
        if(request.getParameter("boarderSize") != null){
            double boarderSize = Double.valueOf(request.getParameter("boarderSize");
        }

        if(request.getParameter("boarderThickness") != null){
            double boarderThickness = Double.valueOf(request.getParameter("boarderThickness");
        }

        if(request.getParameter("boarderColor") != null){
            double boarderColor = Double.valueOf(request.getParameter("boarderColor");
        }
        ... do stuff with the parameters ...
    }
    ... other methods ...
}

【问题讨论】:

  • 不要在 if 语句中声明变量,它对其他作用域不可用。
  • @Marcelo,对此感到抱歉。通常不会那样做,哈哈。

标签: java servlets parameters


【解决方案1】:

像这样写一个实用程序

public class MapImageServlet extends HttpServlet {
//... constructor and other methods ...
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // OPTIONAL PARAMETERS
     boarderSize = ParamUtil.getDoubleValue(request,"boarderSize", defaultValue);

     boarderThickness = ParamUtil.getDoubleValue(request, "boarderThickness", defaultValue);

     boarderColor = ParamUtil.getDoubleValue(request,"boarderColor" , defaultValue);
     //... do stuff with the parameters ...
}

}
public class ParamUtil
{
public static double getDoubleValue(ServletRequest request, String paramName, double defaultValue)
{
     if(request.getParameter(paramName) != null){
        return Double.valueOf(request.getParameter(paramName));
    } else{
        return defaultValue;
    }
}
}

【讨论】:

  • 我认为在 servlet 中已经有这样的东西了,但我想我自己做起来很容易。
【解决方案2】:

您不是在寻找:ServletRequest#getParameterMap吗?

【讨论】:

  • 如果您卡在旧的 WAS 或其他东西上,getParameterMap 也在 JEE 5.0 中。
【解决方案3】:

一般来说,我使用 Apache beanutils 从请求参数映射中提取信息。 BeanUtils 提供了一个很好的界面,可以隐藏所有这些信息......

MyJavaBean mjb = new MyJavaBean();
BeanUtils.copyProperties(mjb, request.getParameterMap());

.... 
// do stuff with mjb properties
logger.debug(mjb.getBorderThickness());
logger.debug(mjb.getBorderSize());
// etc

设置javabean的一些额外工作,但易于使用。

【讨论】:

    【解决方案4】:

    如果您是从头开始开发,我建议您使用 Spring MVC 或 Struts 之类的框架。这些框架捕获输入并为您提供一个包含所有表单数据的即用型 bean。

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多