写在开头
先来看下这个登录案例的项目结构,主要是分为dao,domian,test,util,web几个包,然后在相应的包内写相应的类,可以看到如下截图:
当然,最开始还是需要在数据库创建一个user表
DOMIAN PACKAGE
这里面主要是定义一个User类,然后通过getter和setter设置拿到账号密码
package com.jserm.domian;
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
DAO PACKAGE
主要是写一些对数据库的操作逻辑,方法使用jdbctemplate,代码如下
package com.jserm.dao;
import com.jserm.domian.User;
import com.jserm.util.JDBCUtils;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
/*
* 操作数据库中的User表中的类
* */
public class UserDao {
// 声明JDBCTemplate对象共用
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
public User login(User loginUser) {
try {
String sql = "select * from user where username = ? and password = ?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), loginUser.getUsername(), loginUser.getPassword());
return user;
} catch (EmptyResultDataAccessException e) {
e.printStackTrace();
return null;
}
}
}
UITL PACKAGE
里面主要是抽取封装一个JDBCUtil工具类,该类主要是处理druid连接池的一些逻辑,代码如下:
package com.jserm.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
// 使用druid连接池
public class JDBCUtils {
private static DataSource ds;
static {
try {
Properties properties = new Properties();
InputStream resourceAsStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(resourceAsStream);
ds = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 获取连接池对象
* */
public static DataSource getDataSource() {
return ds;
}
/*
* 获取connection对象
* */
public static Connection getConnection() throws SQLException {
Connection connection = ds.getConnection();
return connection;
}
}
WEB PACKAGE
这个包主要是写一些servlet class静态文件
# servletCase
package com.jserm.web.servletcase;
import com.jserm.dao.UserDao;
import com.jserm.domian.User;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet(name = "ServletCase", value = "/loginServlet")
public class ServletCase extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("post进来了");
// 1.设置编码
request.setCharacterEncoding("utf-8");
// // 2.,获取请求参数
// String username = request.getParameter("username");
// String password = request.getParameter("password");
// // 3.封装user对象
// User user = new User();
// user.setUsername(username);
// user.setPassword(password);
// 使用java BeanUtils做处理,该方法能拿到所有的请求参数
Map<String, String[]> parameterMap = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 4. 调用userDao对象
UserDao dao = new UserDao();
User loginUser = dao.login(user);
// 5. 判断user
if (loginUser == null) {
// 等于null表示登录失败
System.out.println("失败了");
request.getRequestDispatcher("/failServlet").forward(request, response);
} else {
// 登录成功
System.out.println("成功了");
request.setAttribute("user", loginUser);
request.getRequestDispatcher("/successServlet").forward(request, response);
}
}
}
# FailServlet
package com.jserm.web.servletcase;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "FailServlet", value = "/failServlet")
public class FailServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("失败了");
// 给页面写一句话
// 设置页面编码
response.setContentType("text/html;charset=utf-8");
// 输出
response.getWriter().write("登录失败,用户名密码错误");
}
}
# SuccessServlet
package com.jserm.web.servletcase;
import com.jserm.domian.User;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "SuccessServlet", value = "/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("成功了");
// 获取request域中共享的user对象
User user = (User) request.getAttribute("user");
if (user != null) {
// 给页面写一句话
// 设置页面编码
response.setContentType("text/html;charset=utf-8");
// 输出
response.getWriter().write("登录成功," + user.getUsername() + " 欢迎您");
}
}
}
创建一个登录页面
JavaEE项目下web application下面创建一个登录页面,这里需要注意action最好写一个相对路径,我这里写的是绝对路径,相对路径是相对你tomcat deployment那个路径,如果我这里改成相对就是action="loginServlet",因为我tomcat配置的就是/servlet
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录案例</title>
</head>
<body>
<div>
<form action="/servlet/loginServlet" method="post">
用户名: <input type="text" name="username"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit">
</form>
</div>
</body>
</html>
结语
学Java