servlet中校驗模板

校驗,是保證應用程序“入口乾淨”的基本手段,“地溝油,奶粉”,在這裏不應該被放行。


客戶端校驗是程序開始校驗的起點(詳見我的博客),此處我們討論服務器端的校驗方法,這是進行程序的最後關口,如果此關把不住,對應用的影響會是致命的。


做事情總需要一個“套路”,纔可以基本上符合質量的要求。以下我總結一下在Servlet中進行校驗的基本模板:

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        boolean passed=true;//表示校驗是否通過
        String page="suc.jsp";//成功頁面
        //數據的接收
        String uname=request.getParameter("uname");
        String sa=request.getParameter("salary");
        String email=request.getParameter("email");
        String idcard=request.getParameter("idcard");
        String sbirth=request.getParameter("birth");
                                          
        //轉換類型
        float salary=-1;
        Date birth=null;
                                          
        try{
            salary=Float.parseFloat(sa);
        }
        catch (Exception e) {
            //轉換失敗,進入到此處,salary將維持-1的值
        }
        try{
            SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
            birth=sd.parse(sbirth);
        }
        catch (Exception e) {
            //轉換失敗,進入到此處,birth將維持null的值
        }
        //以上兩處異常,會幫助我們做校驗,省事了吧。。。
                                          
        //校驗 開始
        if(uname.trim().length()<=3){
            passed=false;
            request.setAttribute("uname_error", "用戶名必須大於三位");
                                              
        }
        if(salary<0){
            passed=false;
            request.setAttribute("salary_error", "請輸入合法數值");
        }
        if(!email.matches(".+@.+\\..+")){
            passed=false;
            request.setAttribute("email_error", "請輸入合法郵箱");
        }
        if(!idcard.matches("^\\d{4}[\\d|x|X]$")){
            passed=false;
            request.setAttribute("idcard_error", "請輸入身份證號");
        }
        if(birth==null){
            passed=false;
            request.setAttribute("birth_error", "請輸入正確的日期");
        }
                                          
        if(passed){//校驗通過,正常調用業務
        //封裝
            User u = new User();
            u.setUname(uname);
            //業務調用
                                              
            //業務數據傳遞
                                              
            //跳轉
        }
        else{
            page="index.jsp";//校驗未通過時,轉向到輸入頁面
        }
                                          
        request.getRequestDispatcher(page).forward(request, response);
                                          
    }

JSP中的代碼模板,如下:

<form action="regist" method="post">
 用戶名:<input type="text" name="uname" value="${param.uname }"/><span>${uname_error}</span><br/>
 工資:<input type="text" name="salary" value="${param.salary}"/><span>${salary_error}</span><br/>
 電郵:<input type="text" name="email" value="${param.email}"/><span>${email_error}</span><br/>
 身份證號:<input type="text" name="idcard" value="${param.idcard}"/><span>${idcard_error}</span><br/>
 出生日期:<input type="text" name="birth" value="${param.birth}"/><span>${birth_error}</span><br/>
 <input type="submit"/>
                         
</form>


不足之處:編碼量過大,難對提高效率和質量,在Struts2中,對代碼做了大量的改進,詳見我的後續博文。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章