今天學(xué)習(xí)MVC模式巧婶,嘗試著做個(gè)用戶登陸功能的MVC案例
- 1.新建login.jsp文件,向servlet端提交信息涂乌,提交方式為post(view層)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<form action="loginServlet" method="post" >
用戶名<input type="text" name="uname">
密碼<input type="password" name="upwd">
<input type="submit" value="提交">
</form>
</body>
</html>
- 2.在src文件夾中建立package Dao(模型層)
1.png
DAO層中的LoginDao實(shí)現(xiàn)對(duì)mysql數(shù)據(jù)庫連接和驗(yàn)證傳入的數(shù)據(jù)是否存在
package Dao;
import login.Login;
import java.sql.*;
public class LoginDao {
static String URL = "jdbc:mysql://localhost:3306/user";
//數(shù)據(jù)庫的用戶名
static String USERNAME = "root";
//數(shù)據(jù)庫的密碼
static String PWD = "199763cbw";
public static int login(Login login) {// 增刪改
Connection connection = null;
PreparedStatement pstmt =null;
ResultSet rs=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");// 加載具體的驅(qū)動(dòng)類
connection = DriverManager.getConnection(URL, USERNAME, PWD);
//原因是sql查詢語句 where查詢中文會(huì)導(dǎo)致錯(cuò)誤艺栈,英文不會(huì)
String sql="select * from users where name=? and password=?";
pstmt=connection.prepareStatement(sql);
//同時(shí)可以用pstmt.setString方法設(shè)置位置的值
pstmt.setString(1,login.getUanme());
pstmt.setString(2,login.getUpwd());
rs= pstmt.executeQuery();
if(rs.next()){
return 1;
}
else{
return 0;
}
// 5.處理結(jié)果
} catch (ClassNotFoundException e) {
e.printStackTrace();
return -1;
} catch (SQLException e) {
e.printStackTrace();
return -1;
} catch(Exception e) {
e.printStackTrace();
return -1;
}
finally {
try {
if(rs!=null) rs.close();
if(pstmt!=null) pstmt.close();
if(connection!=null)connection.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
牢記這里的異常處理,如果不在這里完成異常處理湾盒,在servlet中會(huì)報(bào)錯(cuò)湿右。
因?yàn)閙ysql中sql語句用where會(huì)使中文查詢產(chǎn)生異常,這里的查詢只對(duì)英文數(shù)據(jù)有效
- 3.新建login package包罚勾,在包中創(chuàng)建Login.java(模型層)用于封裝傳入的用戶名和密碼毅人,再把Login對(duì)象傳入Dao層中的LoginDao。
package login;
public class Login {
private String uanme;
private String upwd;
public Login(String uname,String upwd){
this.uanme=uname;
this.upwd=upwd;
}
//構(gòu)造函數(shù)荧库,如果不寫這個(gè)堰塌,在servlet中new對(duì)象時(shí)報(bào)錯(cuò)
public Login() {
}
public String getUanme() {
return uanme;
}
public void setUanme(String uanme) {
this.uanme = uanme;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}
-4.新建loginServlet文件,控制層
package servlet;
import java.io.IOException;
import login.Login;
import Dao.LoginDao;
//下面這句話是配置servlet
@javax.servlet.annotation.WebServlet(value = "/loginServlet")
public class loginServlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
String name =request.getParameter("uname");
String pwd=request.getParameter("upwd");
//將view層傳過來的東西放入Login對(duì)象中
Login login = new Login(name,pwd);
//將login對(duì)象放入LoginDao中分衫,LoginDao會(huì)返回一個(gè)int值用于判斷用戶是否存在
int result= LoginDao.login(login);
if(result>0){
// 重定向至jsp頁面 场刑,提示登陸成功
response.sendRedirect("welcome.jsp");
}else if(result==0){
// 重定向至jsp頁面,登陸失敗
response.sendRedirect("fail.jsp");
}
else {
// 重定向至jsp頁面 蚪战,程序異常
response.sendRedirect("exception.jsp");
}
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
}
- 5.web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>
- 6.測(cè)試
英文用戶可以登陸牵现,中文的不行,還需要改進(jìn)