java - 在不向用户显示而是在后面处理的JSP页面中集成sql语句是否可取?

标签 java ajax jsp

我有一个注册表单,用户必须在其中输入电子邮件地址,并且在后端进行一些快速异步处理后,我必须告诉用户该电子邮件地址是否已注册。

下面是我创建的 JSP 页面的示例,

<input type="email" id="inputEmail" placeholder="*Email" name="inputEmail" onchange="checkDuplicate();"/>
<div id="duplicateEmail"></div>
<script>
    var request;
      function createRequest(){
                if(window.XMLHttpRequest){
                    request=new XMLHttpRequest();
                }
                else if(window.ActiveXObject){
                request=new ActiveXObject("Microsoft.XMLHTTP");
                }
            }

            //Below 2 functions are to check whether the email entered by the user is already registered or not
            function checkDuplicate(){

                var email = document.getElementById("inputEmail").value;

                if(email!=""){

                     createRequest();
                     var url = "../ajaxPages/check_email.jsp?email="+email;
                     try{
                        request.onreadystatechange=duplicateEmailMessage;
                        request.open("GET",url,true);
                        request.send();
                     }catch(e){
                        alert("Unable to connect to server");
                     }
                }
            }
            function duplicateEmailMessage(){
                if(request.readyState==4){
                    var x = document.getElementById("duplicateEmail");
                    var msg = request.responseText;
                    x.innerHTML = msg;
                } 
            }
</script>

现在后端的 check_email.jsp 页面将是这样的,

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<c:set var="email" value="${param['email']}"/>

<sql:setDataSource var="db" driver="com.mysql.jdbc.Driver" user="root"  password="root" url="jdbc:mysql://localhost:3306/ercafe"/>
<sql:query dataSource="${db}" sql="SELECT * FROM user_details" var="result" />

<c:forEach var="row" items="${result.rows}">

    <c:if test="${row.user_email_id eq email}">
        <c:out value="This email is already registered"/>
    </c:if>

</c:forEach>

我知道不建议在 JSP 页面中包含数据库交互,但由于该页面将在后端处理,而无需用户的任何直接交互,因此我很想使用上面的 check_email.jsp 。谁能告诉我如何以理想的方式处理 check_email.jsp ?

编辑:来吧,人们提出一些建议......

最佳答案

将 JSP 和“后端”代码分开,JSP 应该仅用于显示数据,而 java servlet 则用于执行逻辑 - 关注点分离适用于此处: https://en.wikipedia.org/wiki/Separation_of_concerns

看看这些 Oracle JDBC 教程:http://docs.oracle.com/javase/tutorial/jdbc/index.html

为了从 servlet 获取数据以显示在您的 JSP 页面上,您将在 servlet 中执行以下操作

req.setAttribute(key, value);

在 JSP 端您将使用:

${key}

再次显示该值。

关于java - 在不向用户显示而是在后面处理的JSP页面中集成sql语句是否可取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22109509/

相关文章:

java - eclipse JSP 换行

java - 使用 OR 测试 DynaActionForm 属性是否不为空

java - junit中如何处理异常

java - 根据某些条件更改 where 子句标准

php - 我无法将数据插入数据库

javascript - php 使用 ajax 生成 html 表以应用用户操作,如删除、更新和编辑

http - PUT、DELETE、HEAD 等方法在大多数 Web 浏览器中都可用吗?

java - JUnit Ant 任务不会输出到屏幕

java - Jackson 更新部分对象

java - 如何以 Spring 形式计算带有变量的文本区域?