我想知道如何在不重新加载页面的情况下从数据库检索值。我只懂一点点javascript,并且我在数据库中使用data source jndi
。我目前正在使用MVC2模型。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import = "java.sql.*" %>
<%@page import = "javax.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
$(document).ready(function(){
$( "button" ).click(function() {
$("#users").change(function(){ //A function to execute each time the event is triggered.
var value = $(this).val(); //allows you to pass an array of element values
$.get("index.jsp",{q:value},function(data){
$("#javaquery").html(data);
});
});
});
});
</script>
</head>
<body>
<div id="users">
<button value="1">1</button>
<button value="2">2</button>
</div>
<br />
<div id="javaquery"><b>Name will be displayed here</b></div>
<%
String name = "";
String q = request.getParameter("q");
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.0.14:1433/demolangako", "demolangme", "demolangme");
Statement smt = con.createStatement(); //Create Statement to interact
ResultSet r = smt.executeQuery("select * from users where(id='" + q + "');");
while (r.next()) {
name = r.getString("name");
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
Name:<%out.print(name);%>
</body>
</html>
目前,我有此代码,但是它不适用于我的按钮。任何帮助表示赞赏。
首先,您必须在单独的文件中拥有数据库访问代码(仅Java),这将满足index.jsp的ajax请求。
第二点是,您需要修改jQuery脚本。当您要将按钮单击值发送给ajax时,请尝试使用此方法。
$("button").click(function() {
$.get("jdbc.jsp", {
q: $(this).val()
}, function(data) {
$("#javaquery").html(data);
});
});
请避免在jsp文件中编写Java代码。您可以从How to avoid Java code in JSP files?中找到简要说明BalusC。
请阅读MVC2 pattern。如果您使用的是MVC2,则业务和视图之间应该有明确的隔离。
首先,我们应该创建简单的jsp-servlet
结构。您可以找到我的答案Creating a simple web page using servlet。完成以上部分后,
为此,您可以使用ajax
。由于您已使用jQuery-ajax
,因此我将对其进行说明。不要记得导入jquery
库。
您的index.jsp
应该是这样,当您在文本框中输入值并单击提交时,我有一个文本框和一个按钮,它应该通过servlet到达数据库并返回结果,而无需重新加载页面。如我的示例所示,我正在向HelloServlet
发送请求。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Submit and View Page</title>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(function(){
$("#newsubmit").click(function(e){
$.ajax({
type: "POST",
url: "HelloServlet",
data: { name: $("#myname").val() },
success:function(result){
alert(result);
}
});
});
});
</script>
</head>
<body>
<form>
<label>Name: </label><input type='text' id="myname" name='name'/></br>
<input type="button" id="newsubmit" value="Submit" />
</form>
</body>
</html>
并且在您的servlet中,
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// Receive the username
String name = req.getParameter("name");
String result = "";
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.0.14:1433/demolangako", "demolangme", "demolangme");
// I prefer using prepared statements to avoid SQL injections
String selectSQL = "SELECT * FROM USERS WHERE NAME = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setString(1, name);
ResultSet rs = preparedStatement.executeQuery(selectSQL );
while (rs.next()) {
result = rs.getString("name");
}
String greetings = "Hello " + result;
response.setContentType("text/plain");
response.getWriter().write(greetings);
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
现在您将收到ajax的回复。希望这会有所帮助。