小web工程内所有的文件
![]()
用户登录的时候可以选择自动登陆checkbox。实现自动登录是因为:我登录了之后我的用户是存在session中了,可是我如果 一段时间不用这个页面,这个页面里的session就会进入硬盘中(也就是需要重新登录了),这就比较麻烦;但这样会比较节约服务器中的内存;因此我通过加过滤器将他保存在cookie中,用户下次进入也是直接自动登录。其中还用到了:C3P0数据库连接池;DBUtils开源框架。
MyPoint:
在JavaBean中添加监听器----------- 设置Session存在服务器内存的时间限制
package com.zys.model; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionEvent; // 实现HttpSessionActivationListener Serializable接口 public class User implements HttpSessionActivationListener,Serializable{ private int uid; private String uname; private String upass; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpass() { return upass; } public void setUpass(String upass) { this.upass = upass; } @Override public void sessionDidActivate(HttpSessionEvent arg0) { // Active System.out.println("活化,我要读入内存了"); } @Override public void sessionWillPassivate(HttpSessionEvent arg0) { // Passive System.out.println("钝化,我要进入硬盘中了"); } }
可以自己去体会一下;WebContent-META-INF目录下新建context.xml配置HttpSessionActivationListener时间
<Context> // 时间 1分钟 <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1"> // 文件夹名:mymymy <Store className="org.apache.catalina.session.FileStore" directory="mymymy"/> </Manager> </Context>
这个地址也就是和session存到的硬盘的同一个文件夹位置:我的在服务器的work\Catalina\localhost\webwebjava
我的总位置在: 不是在总的tomcat上,而是项目的tomcat上
E:\RTO\Javaminework\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\webwebjava
Util工具包中
DBUtil
package com.zys.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * 使用C3P0数据库连接池的数据库 * @author lenovo * */ public class DBUtil { // C3P0连接池的方式 记得配置文件 static ComboPooledDataSource dataSource = null; static { dataSource = new ComboPooledDataSource(); } public static DataSource getDataSource(){ return dataSource; } /** * 获取连接对象 * @return * @throws SQLException */ public static Connection getConn() throws SQLException{ return dataSource.getConnection(); } /** * 释放资源 * @param conn * @param pstmt */ public static void release(Connection conn,PreparedStatement pstmt){ closeConn(conn); closePs(pstmt); } /** * 释放资源 * @param conn * @param pstmt * @param rs */ public static void release(Connection conn,PreparedStatement pstmt,ResultSet rs){ closeConn(conn); closePs(pstmt); closeRs(rs); } private static void closeConn(Connection conn){ if(conn!=null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private static void closePs(PreparedStatement pstmt){ if(pstmt!=null){ try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private static void closeRs(ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
AUTOLOGINFILTER
package com.zys.util; 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.annotation.WebFilter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zys.dao.imp.UserDaoImp; import com.zys.model.User; /** * Servlet Filter implementation class AutoLoginFilter */ @WebFilter("/AutoLoginFilter") public class AutoLoginFilter implements Filter { /** * Default constructor. */ public AutoLoginFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; User u = (User) req.getSession().getAttribute("ss_user"); if( u == null){ //session为空才需要登录 Cookie[] cookies= req.getCookies(); Cookie autoc = CookieUtil.findCookie(cookies, "autouser"); if(autoc != null){ // COOKIE中有值 直接实现自动登录 String value = autoc.getValue(); String uname = value.split("#")[0]; String upass = value.split("#")[1]; User user = new User(); user.setUname(uname); user.setUpass(upass); user = new UserDaoImp().login(user); req.getSession().setAttribute("ss_user", user); req.getRequestDispatcher("index.jsp").forward(req, resp); }else{ //没有值 说明是第一次登录 chain.doFilter(request, response); } }else{ // 有session不需要登录 chain.doFilter(request, response); } } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }
记得在xml文件里写一下filter就行了