以下是本次案例(homework22)的目錄結構:
注意:手動導入jar包的lib文件要放在WEB-INF下
- login.jsp
<body>
<form action="/homework22/LoginServlet" method="post">
<table>
<tr>
<td><input type="text" placeholder="請輸入用戶名" name="username" id="username"></td>
</tr>
<tr>
<td><input type="password" placeholder="請輸入密碼" name="password" id="password"></td>
</tr>
<tr>
<td align="center"><input type="submit" value="登錄" id="btn"></td>
</tr>
</table>
</form>
</body>
- JDBCUtil.java
public class JDBCUtil {
private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/s1?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";
private static final String USER_NAME = "root";
private static final String PASSWORD = "123456";
/**
* 連接數據庫信息
*/
public static Connection getCon(){
Connection con = null;
try {
Class.forName(DRIVER_NAME);//加載數據庫驅動
con = DriverManager.getConnection(URL,USER_NAME,PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
/**
* 關閉連接
*/
public static void close(ResultSet rs, PreparedStatement ps, Connection con){
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
- User.java
public class User {
private int id;
private String username;
private String password;
public User(){}
public User(String username, String password) {
this.username = username;
this.password = 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) {
this.password = password;
}
}
- UserDao.java
注意:sql語句不可以用user.getUser()來代替?
public class UserDao {
/**
* 根據用戶名和密碼判斷是否有這個人
*/
public static User loginCheck(Connection con,User user) throws SQLException {
User resultUser = null;
String sql = "select* from user where username = ? and password = ? ";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,user.getUsername());
ps.setString(2,user.getPassword());
ResultSet rs = ps.executeQuery();
while (rs.next()){
resultUser = new User();//創建了User對象,纔可以賦值
System.out.println(rs.getString("username"));
resultUser.setUsername(rs.getString("username")) ;
resultUser.setPassword(rs.getString("password"));
}
return resultUser;
}
}
- LoginServlet.java
注意:try catch包圍的代碼可以防止出現錯誤異常,與sql操作一起用可以防止SQL出錯
@WebServlet("/homework22/LoginServlet")
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
/**
* 判斷用戶名或密碼是否爲空先
*/
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username.equals("") || password.equals("")){
request.setAttribute("IsNULL","用戶名或密碼不爲空");
request.getRequestDispatcher("failure22.jsp").forward(request,response);
}
/**
* 判斷請求的用戶名密碼是否與數據庫的一致
* 爲此要先連接數據庫
* 注意一定要用try catch去包圍數據庫的操作,預防失敗
*/
else{
Connection con = null;
User requestUser = new User(username,password);
try {
con = JDBCUtil.getCon();
User result = UserDao.loginCheck(con,requestUser);//獲取數據庫搜索出來的數據
HttpSession session = request.getSession();
if(result != null){
session.setAttribute("username",result.getUsername());
request.getRequestDispatcher("success22.jsp").forward(request,response);
}
else{
session.setAttribute("msg","用戶名或密碼有誤");
request.getRequestDispatcher("failure22.jsp").forward(request,response);
}
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtil.close(null,null,con);
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
- success.jsp
<body>
<h1>歡迎“<%=session.getAttribute("username")%>”登錄成功</h1>
</body>
- failure.jsp
用三目運算符,就不會在獲取值爲null時,直接在頁面打null
<body>
<h1><%=request.getAttribute("IsNULL")==null? "":request.getAttribute("IsNULL")%></h1>
<h1><%=session.getAttribute("msg")==null? "":session.getAttribute("msg")%></h1>
</body>
錯誤信息:
成功: