Servlet+Ajax实现数据判定操作

      其实在项目进行的过程中,判定数据是否存在是必然的,也是经常会遇到的情况,那么该如何去判定?本篇我们则采用Servlet+Ajax异步更新完成所需操作。

何为Servlet?

      servlet其实就是Java语言用来编写的服务端程序,其重要功能在于能够交互式地浏览和修改数据,生成动态Web内容,其实一般指任何实现了这个Servlet接口的类。
      Servlet就是一个Java类,该类要运行必须要创建对象才行,建立的过程我们可以采用直接通过向导来创建(配置文件直接配置好)或者采用创建一个普通的类来继承HttpServlet则可。

具体操作

      我们可以使用doGet方法来调用,此刻我们可以选取覆盖service的方式,这样不管是goGet或者Post都可以实现,方法:
右击-点击source-选择Override/Implement Methods,然后从其中选择service,则覆盖成功,其实就和模板方法中子类覆盖父类的方法一样的功能,如图:
这里写图片描述
Servlet方法整体代码如下:

public class ClientIDValidateServlet extends HttpServlet{

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
//      相应字符集的问题,避免乱码
        response.setContentType("text/html;charset=GB18030");
        String clientId=request.getParameter("clientId");
//      方法调用
        boolean flag= ClientManager.getInstance().findClientByClientId(clientId);

        if(flag){
            response.getWriter().println("分销商代码已经存在");
        }
    }
}

      待调用的和数据库交互的方法findClientByClientId如下:(存在返回True,否则返回False)

public boolean findClientByClientId(String clientId){
        String sqlString="select count(*) from t_client where client_id=?";
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        boolean flag=false;
        try {
            conn = DbUtil.getConnection();
            pstmt = conn.prepareStatement(sqlString);
            pstmt.setString(1, clientId);
            rs=pstmt.executeQuery();
            rs.next();
            return rs.getInt(1) > 0 ? true:false;
        } catch (SQLException e) {
            // TODO: handle exception
        } finally {
            DbUtil.close(rs);
            DbUtil.close(pstmt);
            DbUtil.close(conn);
        }
        return flag;
    }

      方法调用成功之后,我们还得需要在配置文件中配置Servlet才可调用成功(在创建Servlet,如果使用向导则可自动配置)Servlet的名字,路径以及相关映射(调用方式)

<servlet>
        <servlet-name>ClientIDValidateServlet</servlet-name>
        <servlet-class>com.bjpowernode.drp.util.servlet.ClientIDValidateServlet</servlet-class>
    </servlet>

<!--    映射 -->
<servlet-mapping>
    <servlet-name>ClientIDValidateServlet</servlet-name>
    <url-pattern>/servlet/ClientIDValidateServlet</url-pattern>
</servlet-mapping>

      到此我们就完成了Servlet部分,剩下的则是在Jsp中完成Ajax判读和调用就可。
      在界面我们写入onblur属性和span,来调用方法和显示值

onblur="validateClientId(this)"><span id="spanClientId"></span>

validateClientId方法如下:

function validateClientId(field) {
        if (trim(field.value) != "") {
            var xmlHttp;
            //      表示当前浏览器不是ie,如Firefox
            if (window.XMLHttpRequest) {
                xmlHttp = new XMLHttpRequest();
            } else if (window.ActiveXObject) {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
//          相对路径,Servlet就相当于又新建了一个包,和配置文件一样
            var url="../servlet/ClientIDValidateServlet?clientId=" + trim(field.value);
            xmlHttp.open("GET",url,true);
            xmlHttp.onreadystatechange=function(){
                if(xmlHttp.readyState==4){
                    if(xmlHttp.status==200){
//                      把文本拿出来
                        if(trim(xmlHttp.responseText) !=""){
                            document.getElementById("spanClientId").innerHTML="<font color='red'>" + xmlHttp.responseText + "</font>";
                        }else{
                            document.getElementById("spanClientId").innerHTML="";
                        }
                    }else{
                        alert("请求失败,错误吗=【"+xmlHttp.status + "】");
                    }
                }
            };
            xmlHttp.send(null);
        }else{
            document.getElementById("spanClientId").innerHTML="";
        }
    }

      这样经过三步则可以轻松而高效的判断其数据是否存在,已红色字体的形式显示在span中。

posted on 2015-10-25 20:26  huohuoL  阅读(114)  评论(0编辑  收藏  举报

导航