1.1 需求:
1.2 准备开发环境:
1.3 拷贝数据库的工具类:
package com.sunny.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.util.JdbcUtils;
import javax.sql.DataSource;
import java.sql.*;
import java.util.Properties;
//JDBC的工具类
public class JDBCUtils {
private static DataSource dataSource;
static{
try {
Properties properties = new Properties();
properties.load(JdbcUtils.class.getResourceAsStream("/druid.properties"));
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//对外提供连接池
public static DataSource getDataSource(){
return dataSource;
}
//获取连接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
//关闭资源
public static void close(Connection con, Statement st , ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
1.4 分包管理项目:
com.sunny.web 存放Servlet
com.sunny.service 存放业务逻辑层
com.sunny.dao 存放数据持久层,操作数据库的代码
com.sunny.model 实体类
1.5 创建对应表与实体类:
package com.sunny.model;
public class User {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1.6 编写登录页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎登陆</title>
<style type="text/css"></style>
<script type="text/javascript"></script>
</head>
<body>
<form action="login/loginServlet" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="登陆"/></td>
</tr>
</table>
</form>
</body>
</html>
1.7 编写LoginServlet:
package com.sunny.web;
import com.sunny.model.User;
import com.sunny.service.UserService;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet(name = "LoginServlet",urlPatterns = "/loginServlet")
public class LoginServlet extends HttpServlet {
private UserService userService = new UserService();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//解决响应乱码的问题
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//1获取请求参数
Map<String, String[]> param = request.getParameterMap();
//2 把参数封装到实体类上
User user = new User();
BeanUtils.populate(user, param);
//3.调用userService登陆的功能
if (userService.login(user)) {
//登陆成功..
out.write("欢迎:" + user.getName() + "登陆成功!");
} else {
//登陆失败,跳转到FailServlet
//因为需要带用户名过去给FailServlet,所以我把用户的数据存储到request域中。
request.setAttribute("userName", user.getName());
//请求转发
request.getRequestDispatcher("/failServlet").forward(request, response);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
1.8 编写FailServlet:
package com.sunny.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "FailServlet",urlPatterns = "/failServlet")
public class FailServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决响应乱码的问题
response.setContentType("text/html;charset=utf-8");
PrintWriter out =response.getWriter();
//从域中获取用户名数据
String userName = (String) request.getAttribute("userName");
out.write(userName+"用户名不存在或者是密码错误!");
}
}
1.9 编写UserService:
package com.sunny.service;
import com.sunny.dao.UserDao;
import com.sunny.model.User;
public class UserService {
private UserDao userDao = new UserDao();
//判断是否登陆成功
public boolean login(User user) {
User resultUser = userDao.findByUser(user);
//如果根据用户名与密码可以找到一个user对象,那么代表登陆成功,否则失败。
return resultUser!=null;
}
}
1.10 编写UserDao:
package com.sunny.dao;
import com.sunny.model.User;
import com.sunny.utils.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
public class UserDao {
private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
public User findByUser(User user) {
try {
String sql = "select * from user where name = ? and password=?";
User resultUser = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(User.class),user.getName(),user.getPassword());
return resultUser;
} catch (DataAccessException e) {
return null;
}
}
}