<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->
<default-config>
<!-- 基本配置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<property name="user">root</property>
<property name="password">root</property>
<!--扩展配置-->
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import xinfe.domain.User;
import xinfe.utils.C3P0Utils;
public class UserDao {
/**
* 用户登录
* @param username
* @param password
* @return
* @throws Exception
*/
public User login(String username, String password) throws Exception {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from user where username=? and password=?";
return qr.query(sql,new BeanHandler<>(User.class),username,password);
}
}
public class User {
private int id;
private String username;
private String password;
private String email;
private String name;
private String sex;
private String birthday;
//get、set省略
public User(int id, String username, String password, String email, String name, String sex, String birthday) {
super();
this.id = id;
this.username = username;
this.password = password;
this.email = email;
this.name = name;
this.sex = sex;
this.birthday = birthday;
}
public User() {
super();
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + ", name="
+ name + ", sex=" + sex + ", birthday=" + birthday + "]";
}
}
import xinfe.dao.UserDao;
import xinfe.domain.User;
public class UserService {
public User login(String username, String password) throws Exception {
UserDao dao = new UserDao();
return dao.login(username,password);
}
}
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
//ThreadLocal用来给当前线程赋值
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
//创建连接池对象
private static ComboPooledDataSource dataSource = new ComboPooledDataSource("itcast");
//提供获取连接池的方法
public static ComboPooledDataSource getDataSource(){
return dataSource;
}
//提供获取连接的方法
public static Connection getConnection() throws SQLException{
Connection conn = tl.get();
if(conn==null){
conn = dataSource.getConnection();
tl.set(conn);
}
return conn;
}
//解除绑定,提交事务,归还连接
public static void commitAndClose(){
Connection conn;
try {
//提交事务,归还连接
conn = getConnection();
DbUtils.commitAndCloseQuietly(conn);
//接触绑定
tl.remove();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//解除绑定,回滚事务,归还连接
public static void rollbackAndClose(){
try {
//回滚事务,归还连接
Connection conn = getConnection();
DbUtils.rollbackAndCloseQuietly(conn);
//解除绑定
tl.remove();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//开启事务
public static void startTransaction() throws SQLException{
Connection conn = getConnection();
conn.setAutoCommit(false);
}
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import xinfe.domain.User;
import xinfe.service.UserService;
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置响应文件mime类型
response.setContentType("text/html;charset=utf-8");
try {
//获取登录信息(用户名和密码)
String username = request.getParameter("username");
String password = request.getParameter("password");
UserService service = new UserService();
User user = service.login(username,password);
if(null != user){//登录成功
//登录成获取session把登录信息保存到session中
request.getSession().setAttribute("user", user);
//是否需要自动登录
String autoLogin = request.getParameter("autoLogin");
if("ok".equals(autoLogin)){//需要自动登录
//1.将用户名和密码保存到cookie中
Cookie cookie = new Cookie("autoUser",username + "&" + password);
//2.设置cookie时间和绑定路径
cookie.setMaxAge(3600000);
cookie.setPath(request.getContextPath()+"/");
response.addCookie(cookie);
}
request.getRequestDispatcher("/success.jsp").forward(request, response);
}else{//登录失败
request.setAttribute("errorMsg","你的用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("errorMsg","当前功能正在维护...");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import xinfe.domain.User;
import xinfe.service.UserService;
/**
* 过滤Login自动登录
*
* @author zx
*/
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//过滤请求
HttpServletRequest req = (HttpServletRequest) request;
//设置编码
req.setCharacterEncoding("utf-8");
//获取session中的用户信息
Object object = req.getSession().getAttribute("user");
if(null == object){
//获取请求携带的所有cookie对象
Cookie[] cookies = req.getCookies();
//查询是否携带了名称autoUser的cookie对象
Cookie c = null;
if(cookies != null && cookies.length > 0){
for(Cookie cookie : cookies){
if("autoUser".equals(cookie.getName())){
c = cookie;
break;
}
}
}
//判断c是否为空 当不为空时,帮用户实现自动登录功能
if(c!=null){
try {
String username = c.getValue().split("&")[0];
String password = c.getValue().split("&")[1];
UserService service = new UserService();
User user = service.login(username, password);
if(null != user){
System.out.println("自动登录");
req.getSession().setAttribute("user", user);
}
} catch (Exception e) {
}
}
}
chain.doFilter(req, response);
}
@Override
public void destroy() {
}
}