如何是正规的表单提交,可以用各种form验证框架,但是如果是一般的请求呢。
比如数字,非空等,是在接收请求的块中用trycatch,并在开始提供默认值?如
void myrequest(){ int para1 = 1; String name = null; try{ para1 = Integer.valueOf(request.getParameter("para1")); name = request.getParameter("para1"); }catch{ } do other... }整个方法直接放到trycatch里也不好吧,这样会屏蔽很多其他可能的异常。
有什么好建议吗?
如果界面传入数据在转换的时候抛出了异常,通常是输入数据错误。一个完整的,经过测试的网站在这种时候往往代表着被攻击了。如果是代码漏洞,你需要给界面非常友好的提示。
如:para1 = Integer.valueOf(request.getParameter("para1"));如果它抛出了异常,则代表输入非法了,通常页面就会限制这个数据是数字。你需要对这个数据对应的输入框中提示。
通常后台的判断应该是这样的
void myrequest(HttpServletRequest request, HttpServletResponse response) throws IOException { int para1; String name; try { para1 = getInteger(request, "param1", true); } catch (Exception e) { //此处处理过于简单,通常需要针对具体的输入框做提示。完整的异常处理 PrintWriter writer = response.getWriter(); writer.write(e.getMessage()); writer.flush(); return; } try{ name = getString(request, "name", true); } catch (Exception e) { //此处处理过于简单,通常需要针对具体的输入框做提示。完整的异常处理 PrintWriter writer = response.getWriter(); writer.write(e.getMessage()); writer.flush(); return; } //do other } private String getString(HttpServletRequest request, String param, boolean isCanNull) throws ValiException { String paramValue = request.getParameter(param); if(StringUtils.isEmpty(paramValue)){ if(isCanNull) return null; else throw new ValiException("文本不能为空");//返回异常时,建议在异常中加入一个int类型的code。通过code去判断异常类型。提示文本,应放入到系统常量中 } //此处可以依据你的具体业务需求做其他判断 return paramValue; } private int getInteger(HttpServletRequest request, String param, boolean isCanNull) throws ValiException { String paramValue = request.getParameter(param); if(StringUtils.isEmpty(paramValue)){ if(isCanNull) return 0; else throw new ValiException("请输入有效数字"); } //此处可以依据你的具体业务需求做其他判断 try { return Integer.parseInt(paramValue); } catch (NumberFormatException e) { throw new ValiException("输入数字格式错误", e); } }
######回复 @铂金小虫 : 是这个意思,不能所有的都在一个try里面的,那样前一个错误会造成后面的代码都无法执行。对于String/int/double...的处理封装一个通用工具类就行了。工具类中的判断可以在我注释的地方扩展正则表达式等(这里根据你的具体业务需求来)。。。######恩,我也有过这个想法,你这里关键是对每个参数的获取放在独立的try里面吧,然后对于string,int可以放在通用的工具类里。###### 我擦,看到这题目我还以为点到知乎里面去了。。
表单提交我都是用一个通用的类完成,实例化这个对象之后,添加进验证规则,返回验证结果和相关描述并ajax输出到浏览器
个人看法,因为前端的js代码非常容易被破解.而且浏览器自带破解工具(Debug...)
所以,如果是公网的网站,就不要考虑前端验证了.或者说,前端js负责错误提示,不负责验证(这其实是两回事)
验证主要工作放倒后端来做.后端的做法太多了,单独写类,拦截器,配置文件等等各种奇淫技巧.具体情况具体分析吧.
如果楼主做的是内网的系统(内网怎么就能降低要求呢摔....)那么可以把验证环节完全放倒前端.后端只接管数据库层面的异常.这样如果验证问题就去前端找.比较方便.前端验证的方法也很多.try catch是一种,正则表达式比try catch 要强大,但是不如try catch用起来方便.具体还是应该具体情况具体分析的吧.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。