servlets检查params

时间:2009-12-07 11:06:40

标签: java servlets

所以我有一个很长的查询字符串,可以是......

// URL = Z&安培; SURL = Y&安培;时间= Z&安培;编解码器= A264&安培; acodec = mp3和安培;宽度= 400x100 要么 // URL = Z&安培; SURL = Y&安培;时间= Z&安培; optlevel = W

我正在使用request.getQueryString(“url”)来检查a)qs是否存在并且b)确保它不为null。这一切都导致了大量混乱的if语句。我只是想知道是否有更好的方法来做到这一点。

例如..

if(request.getParameter("originalURL") != null &&
        request.getParameter("originalURL").equals("") && ................) 

谢谢你们

4 个答案:

答案 0 :(得分:4)

当然,只需将重复的代码重构为方法或使用现有框架。

重构代码的基本启动示例:

String field1 = getField(request, "field1", true);
String field2 = getField(request, "field2", true);
String field3 = getField(request, "field3", false);

...

public static String getField(HttpServletRequest request, String fieldName, boolean required) throws ValidatorException {
    String fieldValue = request.getParameter(fieldName);
    if (fieldValue == null || fieldValue.trim().isEmpty()) {
        if (required) {
            throw new ValidatorException("Field is required");
        } else {
            fieldValue = null; // Make empty string null so that you don't need to hassle with equals("") afterwards.
        }
    }
    return fieldValue;
}

您当然可以更进一步,采用具有验证(和转换)功能的现有MVC框架,例如Sun JSFApache Struts

答案 1 :(得分:1)

诸如JSF和Struts之类的框架为处理请求提供了更好的抽象。当我使用原始Servlet API时,我使用一个小实用程序库来处理这个问题,并解析整数和日期等。

 getStringParam( request, "originalUrl" ) {}

如果找不到param会抛出异常,或者更常见的是,如果缺少param,我会使用提供默认值的varient:

 getStringParam (request, "origanlUrl", "http://someusefulDefault") {}

 getIntParam(request, "howManyRivers", 93);

答案 2 :(得分:1)

我不知道你是否正在使用任何框架,但正如其他人提到的,大多数框架都是为此提供实用程序类。如果你不是,你应该创建这样一个类。

就个人而言,我喜欢Spring的ServletRequestUtils,它公开了几种强类型的静态方法来从请求中获取参数,允许回退值并检查所需的参数。如果我必须编写等效的东西(叹气),我会模仿这个类。

答案 3 :(得分:0)

if("something".equals(request.getParameter("originalURL")))

不需要空检查,因为如果将null作为属性

传递,则equals将始终返回false