登入功能的開發(帶驗證碼)
阿新 • • 發佈:2018-11-28
1.因為要和資料庫進行連線,先獲取資料來源,建立連線物件。這些操作在工具類中完成。
public class DbUtil {
private static DataSource ds=null;
//建立連線池
static{
Properties p = new Properties();
try {
p.load(DbUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
ds = BasicDataSourceFactory.createDataSource(p);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//獲取與資料庫連線的物件
public static Connection get_Connection(){
Connection conn=null;
try {
conn = ds.getConnection();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//關閉連線
public static void close_Connection(Connection conn){
try {
if(conn!=null&&!conn.isClosed()){
conn.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
jdbc.properties檔案:
driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521/orcl
username=student
password=ok
initialSize=5
maxActive=10
maxWait=6000
2.開發dao層的程式碼:判斷在前臺輸入的使用者與資料庫中的是否對應。
public boolean isExit(String username,String password){
//獲取連線
Connection conn = DbUtil.get_Connection();
try {
//建立運載sql語句的物件
PreparedStatement ps = conn.prepareStatement("select * from student where stu_name=? and password=?");
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
//如果在資料庫中查到相應的記錄,返回true
while(rs.next()) return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
3.最後開發請求到來時處理請求的servlet。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
//獲取前臺傳過來的引數
String username = request.getParameter("username");
System.out.println(username);
String password = request.getParameter("password");
//驗證使用者是否存在
LoginDao dao = new LoginDao();
//如果存在,頁面跳轉到success.html
if(dao.isExit(username, password)){
response.sendRedirect("success.html");
}
else//否則跳轉到fail.html
response.sendRedirect("fail.html");
}
4.驗證碼的生成。
首先,向伺服器傳送一個獲取驗證碼的請求
<img id="check" alt="" src="checkcode">
新建一個Servlet處理這個請求,生成驗證碼,並返回給瀏覽器。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Random r=new Random();
//1.建立一個bufferedimage物件
BufferedImage image=new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);
//2.繪製長方形
Graphics g = image.getGraphics();
g.setColor(new Color(233, 222, 220));
g.fillRect(0, 0, 60, 20);
//畫干擾線 ganrao
for(int i=0;i<100;i++){
g.setColor(new Color(160+r.nextInt(30), 160+r.nextInt(30), 160+r.nextInt(30)));
int x=r.nextInt(60);
int y=r.nextInt(20);
g.drawLine(x, y, x+r.nextInt(15), y+r.nextInt(15));
}
//寫上四位隨機數字
g.setColor(new Color(22, 30, 44));
int checkCode=r.nextInt(9000)+1000;
g.drawString(checkCode+"", 10, 15);
//構建輸出流,將圖片返回到瀏覽器
OutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
}
附加功能:看不清圖片上的驗證碼,想要重新生成一個,用jQuery實現,重新發送一個請求。
$(function(){
$("#change").click(function(){
$("#check").attr("src",'checkcode?hhh='+Math.random());
});
})