上篇講到如何用jquery ajax提交數據至後臺,後臺接收並返回給ajax。http://www.javashuo.com/article/p-xvluussh-h.htmljavascript
今天咱們把數據傳到數據庫去作一下查詢。話很少說,上教程。html
首先,咱們先創建數據庫:前端
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) )
INSERT INTO `user`.`user`(`id`,`username`,`password`) VALUES ( NULL,'鐵柱兄','666666');
數據庫搞定了,下一步,進eclipse編輯java代碼,同窗們,跟上,跟上。java
今天基於上次的基礎上次的新建了三個包,並導入了一個祖傳的mysql的jar包:mysql
咱們先在po包裏建立一個名爲User的java類(類名隨便本身定,只要本身能認識就行了),並在類裏定下三個字段給這三個字段建立get、set方法:jquery
package com.tiezhu.po; public class User { private int id;//用戶的惟一標識 private String userName;//用戶登陸的帳號(用戶名) private String Password;//密碼 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return Password; } public void setPassword(String password) { Password = password; } }
搞定User類以後,咱們去serveice包裏建立LoginServeice類,再去dao包裏建立LoginDao類:ajax
回到咱們上次建立的LoginServlet類裏:
sql
package com.tiezhu.action;數據庫
import java.io.IOException;apache
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.tiezhu.po.User;
import com.tiezhu.service.LoginServeice;
@WebServlet(name="LoginServlet",urlPatterns="/login")
public class LoginServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//處理編碼格式
req.setCharacterEncoding("UTF-8");
resp.setContentType("html/text;charset=UTF-8");
//接受前端傳來的數據
String userName=req.getParameter("userName");
String password=req.getParameter("password");
System.out.println("接收到前端傳來的數據:userName="+userName+"password="+password);
//new出user對象
User user=new User();
//new出loginservice對象
LoginServeice loginservice=new LoginServeice();
//在loginservice裏建立login方法,並把user,userName和password塞進login方法裏
user=loginservice.login(userName,password);
//對user進行判斷有沒有值
if(user!=null){
resp.getWriter().print("查詢成功");System.out.println("1");
}else{
System.out.println("0");
resp.getWriter().print("用戶不存在");
}
}
}
這時候第40行的user=loginservice.login(userName,password);中的login會報錯,這是由於這個方法在loginservice中還不存在。
把鼠標放到login上面,第一個提示工具就會自動給咱們去建立這個方法了。
如今咱們進入LoginServeic類裏,繼續咱們的代碼:
package com.tiezhu.service; import org.apache.tomcat.jni.User; import com.tiezhu.dao.LoginDao; public class LoginServeice { public User login(String userName, String password) {
User user=null; //new出dao對象 LoginDao dao=new LoginDao(); //在dao裏建立login方法,並把userName和password塞進login方法裏 user=dao.login(userName,password);//這個時候代碼會走進dao層,等dao層裏的login方法走完,回來再走return return user; } }
這個時候user=dao.login(user,userName,password);裏的login會報錯,仍是用一樣的方法,鼠標放上去,根據提示,點擊第一個提示,工具自動在dao裏給咱們建立好login方法。
如今不急着去編寫LoginDao類。咱們先在dao包裏建立一個BaseDao的java類。
package com.tiezhu.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class baseDao { //mysql驅動包 private static String driver="com.mysql.jdbc.Driver"; //數據庫地址,3306是端口號,user是數據庫的庫名 private static String url="jdbc:mysql://localhost:3306/user"; //數據庫帳號 private static String user="root"; //數據庫密碼 private static String password="root"; //sql鏈接 Connection conn = null; /** * 創建鏈接 */ public Connection getConnection(){ //若是conn爲空,則去創建鏈接 if(conn==null){ try { //1.加載驅動 Class.forName(driver);System.out.println("加載驅動成功"); //2.創建鏈接 conn=DriverManager.getConnection(url, user, password);System.out.println("創建鏈接中..."); } catch (Exception e) { e.printStackTrace(); } } System.out.println("鏈接數據庫成功"); return conn; } /** * 關閉鏈接 */ public void closeAll(Connection conn,PreparedStatement pstm,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(pstm!=null){ try { pstm.close();System.out.println("關閉pstm成功"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(conn!=null){ try { conn.close();System.out.println("關閉conn成功"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
友情提示:baseDao打的全部包必須是sql的不要去打其餘的包,要否則就報錯。
如今咱們去LoginDao裏去:
package com.tiezhu.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.tiezhu.po.User;
public class LoginDao extends baseDao{
public User login( String userName, String password) {
//這裏定義了user,給後面用的
User user=null;
//1定義Connection
Connection conn = null;
//2.定義PreparedStatement
PreparedStatement pstm = null;
//3.查詢需定義ResultSet
ResultSet rs = null;
try {
conn=this.getConnection();
String sql="select * from user where username='"+userName+"' and password='"+password+"'";
pstm = conn.prepareStatement(sql);
System.out.println(sql);
rs=pstm.executeQuery();
while (rs.next()) {
//在這裏new出了user,給下面要把從數據中查詢出來的值set進user裏面
user=new User();
//從數據庫查詢出來的set進user類
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("username"));
user.setPassword(rs.getString("password"));
System.out.println(user.getUserName());
}
System.out.println("dao層走到盡頭,把user送回service層");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
this.closeAll(rs,conn, pstm);//釋放數據鏈接
}
//將user返回到service層裏。
return user;
}
}
JAVA類搞定!咱們回到jsp界面,在這裏我要跟你們道個歉,由於上次寫的太快了,沒注意jsp寫錯了,如今在這裏糾正一下:
上次的錯誤點,我把上傳的userName加了引號,致使最後後臺獲得數據就是userName,而不是用戶輸入的值,也同時提醒一下你們之後寫代碼的時候細心一點哦(如今已經改回來了):
此次咱們的jsp中ajax有一些變更,代碼貼出來:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <title>Insert title here</title> </head> <body> <input type="text" id="userName"/> <input type="text" id="password"/> <a onclick="btnConfirm()">點我提交</a> <script type="text/javascript"> function btnConfirm(){//a標籤中的點擊事件 var userName=$("#userName").val();//經過id獲取輸入框中用戶輸入的值 var password=$("#password").val(); $.ajax({ type : 'post', url : '${pageContext.request.contextPath}/login', //這裏的/login對應LoginServlet類中註解的urlPatterns="/login" data:{'userName':userName,'password':password}, traditional : true, async : false, dataType: 'text', success : function(data){//成功的事件 alert(data); }, error : function(data){//失敗的事件 alert(data); } }); } </script> </body> </html>
所有搞定!把代碼跑起來試一下。
本次教程到此結束,謝謝觀看,若有問題,歡迎在評論區留言哦~