以下为工程目录,可以提前建好:
第一步:首先在数据库建好表:
该表为用于登录的用户信息表。
第二步:做好前端登录的login.jsp页面:
代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="LoginServlet" method="post">
帐号:<input name="username" type="text"/><br>
密码:<input name="password" type="password"/><br>
<input value="登录" type="submit"/><br>
</form>
</body>
</html>
第三步:集成JDBC环境
3.1 导入mysql的驱动添加到module中。
3.1.1 将下载好的mysql驱动复制粘贴到web/WEB-INF/lib中。
3.1.2 打开project Structure(Ctrl + Alt + Shift +s),点击左侧Modules,选择你要添加的module,点击右侧+按钮找到mysql的jar包,点击ok完成。
3.2 创建jdbc.properties,存放在src下 , 注意 : 一定要是项目的src下,这样才能被读取到。
driverclass=com.mysql.jdbc.Driver
# stuproject为数据库的表名
url=jdbc:mysql://localhost/stuproject
# 连接数据库的账号
name=root
# 连接数据库的密码(安装mysql的时候自己设的)
password=123456
3.3 创建用于获取连接和关闭数据库连接资源的工具类JDBCUtils.java,可以创建一个utils包专门用于存放工具类 , 该类中所有方法都为静态方法 , 可以直接通过类名JDBCUtils调用
public class JDBCUtils {
static String driverclass = null;
static String url = null;
static String name = null;
static String password = null;
static{
try {
Properties pros = new Properties();
// 利用类加载器classLoader获取src下的资源
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
pros.load(is);//读取输入流,也就是读取我们在jdbc.properties下存放的各种连接数据库的属性
//读取连接数据库的属性,通过这些属性才能连接到数据库
driverclass = pros.getProperty("driverclass");
url = pros.getProperty("url");
name = pros.getProperty("name");
password = pros.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 该方法用于获取数据库连接
* @return
*/
public static Connection getConn(){
Connection conn = null;
try {
//1.利用反射注册driverclass
Class.forName(driverclass);
//2.建立连接 参数一:协议 + 访问的数据库,参数二:用户名,参数三: 密码。
conn = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 该方法用于关闭连接资源,不关闭就会浪费资源
* @param conn
*/
public static void release(Connection conn,PreparedStatement ps){
closeConn(conn);
closePs(ps);
}
public static void release(Connection conn,PreparedStatement ps,ResultSet rs){
closePs(ps);
closeConn(conn);
closeRs(rs);
}
public static void closeConn(Connection conn){
try {
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
public static void closePs(PreparedStatement ps){
try {
if(ps !=null){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ps=null;
}
}
public static void closeRs(ResultSet rs){
try {
if(rs !=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs=null;
}
}
}
第四步:搭建用于处理数据库表的DAO(操作表)和DaoImpl(实现检验登录的方法)。
4.1 UserDao接口(用于操作User表)
接口定义了一套标准,没有具体的实现。
public interface UserDao {
/**
* 检验登录的方法
*/
boolean login(String username,String password);
}
4.2 UserDaoImpl实现类
该类实现了UserDao接口,用于完成检验登录的方法。
public class UserDaoImpl implements UserDao {
/**
* 用于检验登录的方法
* @param username
* @param password
* @return
*/
@Override
public boolean login(String username, String password) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1.获取数据库连接
conn = JDBCUtils.getConn();
//2.预编译sql语句
String sql = "select * from t_user where username=? and password=?";
ps = conn.prepareStatement(sql);
//3.填充占位符
ps.setString(1,username);
ps.setString(2,password);
//4.执行查询语句
rs = ps.executeQuery();
//5.如果结果集有对象,则查询到了,即返回true。若没查到。则返回false
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6.关闭资源
JDBCUtils.release(conn,ps,rs);
}
return false;
}
}
第五步:完成用于跳转的LoginServlet.java
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//设置request的字符集
response.setContentType("text/html;charset=utf-8");//设置response的字符集
//1.获取从前端页面中传过来的username和password值
String userName = request.getParameter("username");
String passWord = request.getParameter("password");
//2.创建dao实现类的对象,调用检验登录的方法login().
UserDaoImpl userDao = new UserDaoImpl();
//数据库查到了即返回 true,没查到即返回 false
boolean isSuccess = userDao.login(userName, passWord);
if(isSuccess){
//用于相应给客户,success为true --->登录成功
response.getWriter().write("登录成功");
}else{
response.getWriter().write("登录失败");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
第六步. 配置web.xml,这是最关键的一步
<servlet>
<servlet-name>MyServletName</servlet-name>
<! servlet-name随意起,和下面的servlet-name对应 !>
<servlet-class>com.sms.servlet.LoginServlet</servlet-class>
</servlet>
<! 这块是LoginServlet类的全类名 !>
<servlet-mapping>
<servlet-name>MyServletName</servlet-name>
<! 和上面的servlet-name对应!>
<url-pattern>/LoginServlet</url-pattern>
<! jsp表单发送的请求路径,和jsp里form标签action属性值一致 !>
</servlet-mapping>