效果
開發結構
1,src部分有兩個包dao和servlet
1.1dao包下有兩個數據庫工具類文件
SqlHelper.java
1 package org.guangsoft.dao; 2 3 import java.io.InputStream; 4 import java.sql.CallableStatement; 5 import java.sql.Connection; 6 import java.sql.DriverManager; 7 import java.sql.PreparedStatement; 8 import java.sql.ResultSet; 9 import java.sql.Statement; 10 import java.util.Properties; 11 /** 12 * 13 * @author guanghe 14 */ 15 public class SqlHelper 16 { 17 //定義連接資源 18 private static Connection ct = null; 19 private static PreparedStatement ps = null; 20 private static CallableStatement cs = null; 21 private static ResultSet rs = null; 22 23 //定義配置參數 24 private static String driver = null; 25 private static String url = null; 26 private static String username = null; 27 private static String password = null; 28 29 private static Properties pp = null; 30 private static InputStream is = null; 31 32 //讀取配置參數,加載驅動 33 static 34 { 35 try 36 { 37 pp = new Properties(); 38 is = SqlHelper.class.getClassLoader().getResourceAsStream("org/guangsoft/dao/db.properties"); 39 pp.load(is); 40 driver = pp.getProperty("driver"); 41 url = pp.getProperty("url"); 42 username = pp.getProperty("username"); 43 password = pp.getProperty("password"); 44 Class.forName(driver); 45 } 46 catch (Exception e) 47 { 48 e.printStackTrace(); 49 System.exit(0); 50 } 51 finally 52 { 53 try 54 { 55 is.close(); 56 } 57 catch (Exception e) 58 { 59 e.printStackTrace(); 60 } 61 is = null; 62 } 63 } 64 65 //獲取連接 66 public static Connection getConnection() 67 { 68 try 69 { 70 ct = DriverManager.getConnection(url, username, password); 71 } 72 catch (Exception e) 73 { 74 e.printStackTrace(); 75 } 76 return ct; 77 } 78 79 public static PreparedStatement getPs() 80 { 81 return ps; 82 } 83 84 public static ResultSet getRs() 85 { 86 return rs; 87 } 88 89 //執行DQL查詢 90 public static ResultSet executeQuery(String sql, String[] parameters) 91 { 92 try 93 { 94 ct = getConnection(); 95 ps = ct.prepareStatement(sql); 96 if (parameters != null) 97 { 98 for (int i = 0; i < parameters.length; i++) 99 { 100 ps.setString(i + 1, parameters[i]); 101 } 102 } 103 rs = ps.executeQuery(); 104 } 105 catch (Exception e) 106 { 107 e.printStackTrace(); 108 throw new RuntimeException(e.getMessage()); 109 } 110 return rs; 111 } 112 113 //執行DML更新 114 public static int executeUpdate(String sql, String[] parameters) 115 { 116 try 117 { 118 ct = getConnection(); 119 ps = ct.prepareStatement(sql); 120 if (parameters != null) 121 { 122 for (int i = 0; i < parameters.length; i++) 123 { 124 ps.setString(i + 1, parameters[i]); 125 } 126 } 127 return ps.executeUpdate(); 128 } 129 catch (Exception e) 130 { 131 e.printStackTrace(); 132 throw new RuntimeException(e.getMessage()); 133 } 134 finally 135 { 136 close(ct, ps, rs); 137 } 138 } 139 140 //執行DML批處理 141 public static int executeUpdate2(String[] sql, String[][] parameters) 142 { 143 try 144 { 145 ct = getConnection(); 146 ct.setAutoCommit(false); 147 148 for (int i = 0; i < sql.length; i++) 149 { 150 151 if (null != parameters[i]) 152 { 153 ps = ct.prepareStatement(sql[i]); 154 for (int j = 0; j < parameters[i].length; j++) 155 { 156 ps.setString(j + 1, parameters[i][j]); 157 } 158 return ps.executeUpdate(); 159 } 160 161 } 162 ct.commit(); 163 } 164 catch (Exception e) 165 { 166 e.printStackTrace(); 167 try 168 { 169 ct.rollback(); 170 } 171 catch (Exception e1) 172 { 173 e1.printStackTrace(); 174 } 175 throw new RuntimeException(e.getMessage()); 176 } 177 finally 178 { 179 close(ct, ps, rs); 180 } 181 return 0; 182 } 183 184 //執行存儲過程 185 public static CallableStatement callPro1(String sql, String[] parameters) 186 { 187 try 188 { 189 ct = getConnection(); 190 cs = ct.prepareCall(sql); 191 if (parameters != null) 192 { 193 for (int i = 0; i < parameters.length; i++) 194 { 195 cs.setObject(i + 1, parameters[i]); 196 } 197 } 198 cs.execute(); 199 } 200 catch (Exception e) 201 { 202 e.printStackTrace(); 203 throw new RuntimeException(e.getMessage()); 204 } 205 finally 206 { 207 close(ct, cs, rs); 208 } 209 return cs; 210 } 211 212 //執行高級存儲過程 213 public static CallableStatement callPro2(String sql, String[] inparameters, 214 Integer[] outparameters) 215 { 216 try 217 { 218 ct = getConnection(); 219 cs = ct.prepareCall(sql); 220 if (inparameters != null) 221 { 222 for (int i = 0; i < inparameters.length; i++) 223 { 224 cs.setObject(i + 1, inparameters[i]); 225 } 226 } 227 if (outparameters != null) 228 { 229 for (int i = 0; i < outparameters.length; i++) 230 { 231 cs.registerOutParameter(inparameters.length + 1 + i, outparameters[i]); 232 } 233 } 234 cs.execute(); 235 } 236 catch (Exception e) 237 { 238 e.printStackTrace(); 239 throw new RuntimeException(e.getMessage()); 240 } 241 finally 242 { 243 close(ct, cs, rs); 244 } 245 return cs; 246 } 247 248 //關閉所有資源連接 249 public static void close(Connection ct, Statement ps, ResultSet rs) 250 { 251 if (rs != null) 252 { 253 try 254 { 255 rs.close(); 256 } 257 catch (Exception e) 258 { 259 e.printStackTrace(); 260 } 261 rs = null; 262 } 263 if (ps != null) 264 { 265 try 266 { 267 ps.close(); 268 } 269 catch (Exception e) 270 { 271 e.printStackTrace(); 272 } 273 ps = null; 274 } 275 if (null != ct) 276 { 277 try 278 { 279 ct.close(); 280 } 281 catch (Exception e) 282 { 283 e.printStackTrace(); 284 } 285 ct = null; 286 } 287 } 288 }
db.properties
1 driver = com.mysql.jdbc.Driver 2 url = jdbc:mysql://localhost:3306/student 3 username = root 4 password =root
1.2servlet包下有一個文件Servlet
CheckUname.java
1 package org.guangsoft.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.sql.Connection; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 14 import org.guangsoft.dao.SqlHelper; 15 16 public class CheckUname extends HttpServlet 17 { 18 19 public void doGet(HttpServletRequest request, HttpServletResponse response) 20 throws ServletException, IOException 21 { 22 processRequest(request, response); 23 } 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException 27 { 28 processRequest(request, response); 29 } 30 31 protected void processRequest(HttpServletRequest request, 32 HttpServletResponse response) throws ServletException, IOException 33 { 34 request.setCharacterEncoding("UTF-8"); 35 response.setCharacterEncoding("UTF-8"); 36 response.setContentType("text/html; charset=utf-8"); 37 PrintWriter out = response.getWriter(); 38 String username = request.getParameter("username"); 39 Connection connection = null; 40 PreparedStatement prepareStatement = null; 41 ResultSet resultSet = null; 42 try 43 { 44 connection = SqlHelper.getConnection(); 45 String sql = "select * from user where username=?"; 46 prepareStatement = connection.prepareStatement(sql); 47 prepareStatement.setString(1,username); 48 resultSet = prepareStatement.executeQuery(); 49 while(resultSet.next()) 50 { 51 response.getWriter().print("true"); 52 return; 53 } 54 response.getWriter().print("false"); 55 } 56 catch(Exception e) 57 { 58 e.printStackTrace(); 59 } 60 finally 61 { 62 SqlHelper.close(connection, prepareStatement, resultSet); 63 } 64 } 65 66 }
2,webRoot部分有兩個文件js工具類和jsp頁面
2.1 js工具類封裝了操作json數據的函數
AjaxUtil.js
1 function sendAjaxReq(method,url,param,fun200,fun404,fun500) 2 { 3 var req; 4 if(window.XMLHttpRequest) 5 { 6 req = new XMLHttpRequest(); 7 } 8 else if(window.ActiveXObject) 9 { 10 req = new ActiveXObject("Msxml2.XMLHTTP"); 11 } 12 req.open(method,url); 13 req.onreadystatechange = function() 14 { 15 if(req.readyState == 4) 16 { 17 if(req.status == 200) 18 { 19 if(fun200) 20 { 21 fun200(req.responseText); 22 } 23 } 24 else if(req.status == 404) 25 { 26 if(fun404) 27 { 28 fun404(); 29 } 30 } 31 else if(req.status == 500) 32 { 33 if(fun500) 34 { 35 fun500(); 36 } 37 } 38 } 39 } 40 if(method.toUpperCase() == "GET") 41 { 42 req.send(null); 43 } 44 else if(method.toUpperCase() == "POST") 45 { 46 req.setRequestHeader("context-type", "application/x-www-form-urlencoded"); 47 req.send(param); 48 } 49 }
2.2 jsp頁面是顯示頁面
index.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 <style> 12 .success 13 { 14 color:green; 15 } 16 .fail 17 { 18 color:red; 19 } 20 </style> 21 <script src="/ajax/js/AjaxUtil.js"></script> 22 <script> 23 function checkUname(unameValue) 24 { 25 if(unameValue != "") 26 { 27 sendAjaxReq("get","checkUname?username="+unameValue,null,function(data) 28 { 29 if(eval(data)) 30 { 31 document.getElementById("unameSpan").innerHTML="該用戶名已被注冊!"; 32 document.getElementById("unameSpan").className="fail"; 33 } 34 else 35 { 36 document.getElementById("unameSpan").innerHTML="恭喜,可以注冊!"; 37 document.getElementById("unameSpan").className="success"; 38 } 39 }); 40 } 41 } 42 43 </script> 44 </head> 45 46 <body> 47 <form method="get" action="/ajax/checkUname"> 48 <table> 49 <tr> 50 <td>用戶名:</td> 51 <td> 52 <input type="text" name="username" id="username" 53 onblur="checkUname(this.value);" 54 onkeypress="document.getElementById('unameSpan').innerHTML='';" /> 55 </td> 56 <td><span name="unameSpan" id="unameSpan"></span></td> 57 </tr> 58 <tr> 59 <td>密 碼:</td> 60 <td><input type="password" name="password" /></td> 61 </tr> 62 </table> 63 <input type="submit" value="提交"> 64 </form> 65 66 </body> 67 </html>