JSP(4)----servlet編程2

接上節:http://4440271.blog.51cto.com/4430271/1661880

修改校驗邏輯,從數據庫中獲取用戶信息進行校驗:

結合jsp, jdbc, servlet;


首先,修改UserDao接口

wKiom1V-eiqCarHUAAQgx3Y_znI162.jpg


添加方法聲明,用來根據用戶名和密碼獲取用戶信息。

代碼:

package com.jike.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.jike.entity.User;
//定義實現類的行爲
public interface UserDao {
	//定義對數據庫的操作
	public void save(Connection conn, User user) throws SQLException;
	public void update(Connection conn, Long id, User user) throws SQLException;
	public void delete(Connection conn, User user) throws SQLException;
	
	// 登陸頁面
	public ResultSet get(Connection conn, User user) throws SQLException;
	
}


添加具體實現,添加方法:

wKiom1V-ewHjMBznAAJfzTzqWa0804.jpg


代碼:

package com.jike.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.jike.dao.UserDao;
import com.jike.entity.User;

public class UserDaoImpl implements UserDao {
	
	/*
	 * 保存用戶信息
	 */
	@Override
	public void save(Connection conn, User user) throws SQLException {
		// TODO Auto-generated method stub
		//PreparedStatement是jdbc用於執行sql查詢語句的api之一,用來執行參數化的查詢
		//?是佔位符
		PreparedStatement ps = conn.prepareStatement
				("insert into tbl_user(name, password, email) values (?,?,?)");
		//參數設置
		ps.setString(1, user.getName());//索引從1開始
		ps.setString(2, user.getPassword());
		ps.setString(3, user.getEmail());
		ps.execute();
		//將參數傳入的user對象中的相關信息保存到數據庫表中
	}

	/*
	 * 根據用戶id更新用戶信息
	 */
	@Override
	public void update(Connection conn, Long id, User user) throws SQLException {
		// TODO Auto-generated method stub
		String updateSql = "update tbl_user set name=?, password=?, email=? where id=?";
		PreparedStatement ps = conn.prepareStatement(updateSql);
		
		ps.setString(1, user.getName());
		ps.setString(2, user.getPassword());
		ps.setString(3, user.getEmail());
		ps.setLong(4, id);
		ps.execute();

	}

	/*
	 * 刪除指定的用戶信息
	 */
	@Override
	public void delete(Connection conn, User user) throws SQLException {
		// TODO Auto-generated method stub
		PreparedStatement ps = conn.prepareStatement("delete from tbl_user where id=?");
		ps.setLong(1, user.getId());
		ps.execute();
	}

	@Override
	public ResultSet get(Connection conn, User user) throws SQLException {
		// TODO Auto-generated method stub
		PreparedStatement ps = conn.prepareStatement
				("select * from tbl_user where name = ? and password = ?");
		ps.setString(1, user.getName());
		ps.setString(2, user.getPassword());
		return ps.executeQuery();
	}

}


創建service類, 在service類中執行登陸校驗的邏輯。它調用Dao層的數據庫訪問邏輯判斷數據是否獲取成功,如果成功獲取,則返回布爾值true,否則返回false。

wKioL1V-faOzgfqyAAApRRlvgrA132.jpg


package com.jike.service;

import java.sql.Connection;

import com.jike.dao.UserDao;
import com.jike.dao.impl.UserDaoImpl;
import com.jike.entity.User;
import com.jike.jdbc.util.ConnectionFactory;
import com.mysql.jdbc.ResultSet;

//校驗用戶信息
public class CheckUserService {
	private UserDao userDao = new UserDaoImpl();
	public boolean check(User user){//執行登陸校驗邏輯
		Connection conn = null;
		try {
			conn = ConnectionFactory.getInstance().makeConnection();
			conn.setAutoCommit(false);
			
			ResultSet resultSet = (ResultSet)userDao.get(conn, user);//執行查詢
			
			while(resultSet.next()){//如果查詢到,返回true
				return true;
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			try {
				conn.rollback();
			} catch (Exception e2) {
				// TODO: handle exception
				e2.printStackTrace();
			}
		}finally{
			try {
				conn.close();
			} catch (Exception e3) {
				// TODO: handle exception
				e3.printStackTrace();
			}
		}
		return false;
	}
}


控制層:

新建Servlet:

wKioL1V-fnHg_0-gAAAmz3hOSBM033.jpg

package com.jike.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jike.entity.User;
import com.jike.service.CheckUserService;
//CheckServlet作爲控制器,根據CheckUserServlet的校驗結果,將用戶導航到不同的頁面
public class CheckServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2941368629779903572L;
	private CheckUserService cku = new CheckUserService();

	public CheckServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//獲取用戶提交的信息
		String uname = request.getParameter("uname");
		String passwd = request.getParameter("upwd");
		
		RequestDispatcher rd = null;
		String forward = null;
		// 非空判斷
		if(uname == null || passwd == null){
			request.setAttribute("msg", "用戶名或密碼爲空");
			rd = request.getRequestDispatcher("/09/error.jsp");
			rd.forward(request, response);
		}else{
			//若合法,則登陸校驗
			User user = new User();
			user.setName(uname);
			user.setPassword(passwd);
			//進行校驗
			boolean bool = cku.check(user);
			//根據校驗結果進入不同頁面
			if(bool){
				forward = "/09/success.jsp";
			}else{
				request.setAttribute("msg", "用戶名或密碼錯誤,請重新輸入!");
				forward = "/09/error.jsp";
			}
			rd = request.getRequestDispatcher(forward);
			rd.forward(request, response);
		}
	}

	public void init() throws ServletException {
		// Put your code here
	}

}


在web.xml中添加配置信息

  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>CheckServlet</servlet-name>
    <servlet-class>com.jike.servlet.CheckServlet</servlet-class>
  </servlet>
    <servlet-mapping>
    <servlet-name>CheckServlet</servlet-name>
    <url-pattern>/CheckServlet</url-pattern>
  </servlet-mapping>


表示層登陸頁面設置:

在WebRoot下創建09文件夾,創建login.jsp

<%@ 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">
<!-- 使用css美化當前頁面 -->
<style type="text/css">
body{
	color: #000;
	font-size: 14px;
	margin: 20px auto;
}
</style>
<script type="text/javascript">
	function check(form){
		if(document.forms.loginForm.uname.value==""){
			alert("請輸入用戶名");
			document.forms.loginForm.uname.focus();
			return false;
		}
		
		if(document.forms.loginForm.upwd.value==""){
			alert("請輸入密碼");
			document.forms.loginForm.upwd.focus();
			return false;
		}
	}
</script>

<title>Insert title here</title>
</head>
<body>
	<form action="<%= request.getContextPath() %>/CheckServlet" name="loginForm">
		<table border="1" cellspacing="0" cellpadding="5" bordercolor="silver" align="center">
			<tr>
				<!-- 提示信息 -->
				<td colspan="2" align="center" bgcolor="#E8E8E8">用戶登陸</td>
			</tr>
			<tr>
				<td>用戶名:</td>
				<td><input type="text" name="uname" /></td>
			</tr>
			<tr>
				<td>密碼:</td>
				<td><input type="password" name="upwd" /></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" name="submit" onclick="return check(this);"/>
					<input type="reset" name="reset"/>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>


添加success.jsp

<%@ 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">
<style type="text/css">
body{
	color: #000;
	font-size: 14px;
	margin: 20px auto;
}

#message{
	text-align: center;
}
</style>
<title>Insert title here</title>
</head>
<body>
<div id="massage">
	登陸成功<br/>
	用戶名: <%= request.getParameter("uname") %><br/>
	密碼:<%= request.getParameter("upwd") %><br/>
	<a href="<%=request.getContextPath()%>/09/login.jsp">返回登陸頁面</a>
</div>
</body>
</html>


添加error.jsp

<%@ 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">
<style type="text/css">
body{
	color: #000;
	font-size: 14px;
	margin: 20px auto;
}

#message{
	text-align: center;
}
</style>

<title>Insert title here</title>
</head>
<body>
<div id="massage">
	登陸失敗<br/>
	錯誤提示
	<%
		Object obj = request.getAttribute("msg");
		if(obj !=null){
			out.println(obj.toString());
		}else{
			out.println("無");
		}
	%>
	<br/>
	用戶名: <%= request.getParameter("uname") %><br/>
	密碼:<%= request.getParameter("upwd") %><br/>
	<a href="<%=request.getContextPath() %>/09/login.jsp">返回登陸頁面</a>
</div>
</body>
</html>


測試程序:

wKioL1V-gT2wq6kfAABKAAFZUc0172.jpg















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章