我有一个注册表单,用户必须在其中输入电子邮件地址,并且在后端进行一些快速异步处理后,我必须告诉用户该电子邮件地址是否已注册。
下面是我创建的 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/