所以我有一个很长的查询字符串,可以是......
// 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("") && ................)
谢谢你们
答案 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 JSF或Apache 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