Servlet:处理许多可选参数

只是想知道是否有一种更优雅或标准的方式来处理可选参数,或者你是否必须检查每一个是否为空。 我有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 ... } 

写一个像这样的实用程序

 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; } } } 

你不是在寻找: ServletRequest#getParameterMap ?

通常,我使用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但易于使用的前进。

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