javaweb用户的自动登录模块的实现

javaWeb实战教程8-用户模块的编码实现 javaWeb实战教程5.用户模块的开发5.1 需求分析用户可以注册、登录;登录完成的用户记录登录状态;用户下次访问自动使用cookie登录;5.2 编码javaBean在fy.test.model内新建User.java,按照数据库的字段编写javaBean:public class User { private int id; private String username; 阅读详情
  1. javaBean的代码  
  2.   
  3. package bean;  
  4.   
  5. import java.io.Serializable;  
  6.   
  7. public class Admin implements Serializable{  
  8.       
  9.     /** 
  10.      *  
  11.      */  
  12.     private static final long serialVersionUID = 1L;  
  13.     private Integer id;  
  14.     private String name;  
  15.     private String pass;  
  16.   
  17.     public Admin() {  
  18.         super();  
  19.         // TODO Auto-generated constructor stub  
  20.     }  
  21.   
  22.     public Admin(Integer id, String name, String pass) {  
  23.         super();  
  24.         this.id = id;  
  25.         this.name = name;  
  26.         this.pass = pass;  
  27.     }  
  28.   
  29.     public Integer getId() {  
  30.         return id;  
  31.     }  
  32.   
  33.     public void setId(Integer id) {  
  34.         this.id = id;  
  35.     }  
  36.   
  37.     public String getName() {  
  38.         return name;  
  39.     }  
  40.   
  41.     public void setName(String name) {  
  42.         this.name = name;  
  43.     }  
  44.   
  45.     public String getPass() {  
  46.         return pass;  
  47.     }  
  48.   
  49.     public void setPass(String pass) {  
  50.         this.pass = pass;  
  51.     }  
  52.   
  53.     @Override  
  54.     public String toString() {  
  55.         return "AdminBean [id=" + id + ", name=" + name + ", pass=" + pass  
  56.                 + "]";  
  57.     }  
  58.   
  59. }  

  1. dao的基础接口类  
  2.   
  3. package dao;  
  4.   
  5. import java.util.List;  
  6.   
  7. public interface BaseDao<T, PK> {  
  8.     /** 
  9.      * 插入数据 
  10.      */  
  11.     boolean insert(T entity);  
  12.   
  13.     /** 
  14.      * 根据实体删除数据 
  15.      */  
  16.     boolean delete(T entity);  
  17.   
  18.     /** 
  19.      * 根据ID删除数据 
  20.      */  
  21.     boolean deleteById(PK id);  
  22.   
  23.     /** 
  24.      * 修改数据 
  25.      */  
  26.     boolean update(T entity);  
  27.   
  28.     /** 
  29.      * 查询所有数据 
  30.      */  
  31.     List<T> findAll();  
  32.   
  33.     /** 
  34.      * 根据ID查询数据 
  35.      */  
  36.     T findById(PK id);  
  37.   
  38.     /** 
  39.      * 根据当前页查询数据 
  40.      */  
  41.     List<T> findNowPageInfo(int nowpage, int pagesize,String sortName,String sortOrder);  
  42.   
  43.     /** 
  44.      * 返回总页数 
  45.      */  
  46.     Integer getCountPage(int pagesize);  
  47.   
  48.     /** 
  49.      * 批量删除 
  50.      */  
  51.   
  52.     boolean deletes(Object ids[]);  
  53.   
  54. }  

  1. 对admin操作的接口类,继承自basedao  
  2.   
  3. package dao;  
  4.   
  5. import bean.Admin;  
  6.   
  7. public interface AdminDao extends BaseDao<Admin, Integer> {  
  8.     Admin checkLogin(String name,String pass);  
  9.     Admin checkLogin(String name);  
  10.       
  11. }  

  1. dao操作实体的实现类  
  2.   
  3. package daoImpl;  
  4.   
  5. import java.sql.Connection;  
  6. import java.sql.PreparedStatement;  
  7. import java.sql.ResultSet;  
  8. import java.sql.SQLException;  
  9. import java.util.List;  
  10.   
  11. import util.JdbcUtil;  
  12. import bean.Admin;  
  13. import dao.AdminDao;  
  14.   
  15. public class AdminDaoImpl implements AdminDao {  
  16.   
  17.     private Connection conn;  
  18.     private PreparedStatement pstmt;  
  19.     private ResultSet rs;  
  20.   
  21.     @Override  
  22.     public boolean insert(Admin entity) {  
  23.         return JdbcUtil.upDate("insert into admin (name,pass) values (?,?)",  
  24.                 new Object[] { entity.getName(), entity.getPass() });  
  25.     }  
  26.   
  27.     @Override  
  28.     public boolean delete(Admin entity) {  
  29.         // TODO Auto-generated method stub  
  30.         return deleteById(entity.getId());  
  31.     }  
  32.   
  33.     @Override  
  34.     public boolean deleteById(Integer id) {  
  35.         // TODO Auto-generated method stub  
  36.         return JdbcUtil.upDate("delete from admin where id=?",  
  37.                 new Object[] { id });  
  38.     }  
  39.   
  40.     @Override  
  41.     public boolean update(Admin entity) {  
  42.         // TODO Auto-generated method stub  
  43.         return JdbcUtil.upDate(  
  44.                 "update admin set name=?,pass=? where id=?",  
  45.                 new Object[] { entity.getName(), entity.getPass(),  
  46.                         entity.getId() });  
  47.     }  
  48.   
  49.     @Override  
  50.     public List<Admin> findAll() {  
  51.         // TODO Auto-generated method stub  
  52.         return null;  
  53.     }  
  54.   
  55.     @Override  
  56.     public Admin findById(Integer id) {  
  57.         // TODO Auto-generated method stub  
  58.         return null;  
  59.     }  
  60.   
  61.     @Override  
  62.     public List<Admin> findNowPageInfo(int nowpage, int pagesize,  
  63.             String sortName, String sortOrder) {  
  64.         // TODO Auto-generated method stub  
  65.         return null;  
  66.     }  
  67.   
  68.     @Override  
  69.     public Integer getCountPage(int pagesize) {  
  70.         // TODO Auto-generated method stub  
  71.         return null;  
  72.     }  
  73.   
  74.     @Override  
  75.     public boolean deletes(Object[] ids) {  
  76.         // TODO Auto-generated method stub  
  77.         return false;  
  78.     }  
  79.   
  80.     @Override  
  81.     public Admin checkLogin(String name, String pass) {  
  82.         // TODO Auto-generated method stub  
  83.         Admin entity = null;  
  84.         String sql = "select * from admin where name=? and pass=?";  
  85.         conn = JdbcUtil.getConn();  
  86.         try {  
  87.             pstmt = conn.prepareStatement(sql);  
  88.             int index = 1;  
  89.             pstmt.setString(index++, name);  
  90.             pstmt.setString(index++, pass);  
  91.             rs = pstmt.executeQuery();  
  92.   
  93.             if (rs.next()) {  
  94.                 entity = new Admin();  
  95.                 entity.setId(rs.getInt("id"));  
  96.                 entity.setName(rs.getString("name"));  
  97.                 entity.setPass(rs.getString("pass"));  
  98.             }  
  99.         } catch (SQLException e) {  
  100.             // TODO Auto-generated catch block  
  101.             e.printStackTrace();  
  102.         } finally {  
  103.             JdbcUtil.release(rs, pstmt);  
  104.         }  
  105.         return entity;  
  106.     }  
  107.   
  108.     @Override  
  109.     public Admin checkLogin(String name) {  
  110.         Admin entity = null;  
  111.         String sql = "select * from admin where name=?";  
  112.         conn = JdbcUtil.getConn();  
  113.         try {  
  114.             pstmt = conn.prepareStatement(sql);  
  115.             int index = 1;  
  116.             pstmt.setString(index++, name);  
  117.             rs = pstmt.executeQuery();  
  118.             if (rs.next()) {  
  119.                 entity = new Admin();  
  120.                 entity.setId(rs.getInt("id"));  
  121.                 entity.setName(rs.getString("name"));  
  122.                 entity.setPass(rs.getString("pass"));  
  123.             }  
  124.         } catch (SQLException e) {  
  125.             // TODO Auto-generated catch block  
  126.             e.printStackTrace();  
  127.         } finally {  
  128.             JdbcUtil.release(rs, pstmt);  
  129.         }  
  130.         return entity;  
  131.     }  
  132.   
  133. }  

  1. 服务器接口类,用来将操作数据库的方法与记录历史的方法或其他的方法分离开,作用是增强代码的可读性以及条理性,  
  2.   
  3. package service;  
  4.   
  5. import java.util.List;  
  6.   
  7. public interface BaseService<T, PK> {  
  8.     /** 
  9.      * 插入数据 
  10.      */  
  11.     boolean insert(T entity);  
  12.   
  13.     /** 
  14.      * 根据实体删除数据 
  15.      */  
  16.     boolean delete(T entity);  
  17.   
  18.     /** 
  19.      * 根据ID删除数据 
  20.      */  
  21.     boolean deleteById(PK id);  
  22.   
  23.     /** 
  24.      * 修改数据 
  25.      */  
  26.     boolean update(T entity);  
  27.   
  28.     /** 
  29.      * 查询所有数据 
  30.      */  
  31.     List<T> findAll();  
  32.   
  33.     /** 
  34.      * 根据ID查询数据 
  35.      */  
  36.     T findById(PK id);  
  37.   
  38.     /** 
  39.      * 根据当前页查询数据 
  40.      */  
  41.     List<T> findNowPageInfo(int nowpage, int pagesize,String sortName,String sortOrder);  
  42.   
  43.     /** 
  44.      * 返回总页数 
  45.      */  
  46.     Integer getCountPage(int pagesize);  
  47.   
  48.     /** 
  49.      * 批量删除 
  50.      */  
  51.   
  52.     boolean deletes(Object ids[]);  
  53.   
  54. }  
  55.   
  56. package service;  
  57.   
  58. import bean.Admin;  
  59.   
  60. public interface AdminService extends BaseService<Admin, Integer> {  
  61.     Admin checkLogin(String name,String pass);  
  62.     Admin checkLogin(String name);  
  63. }  

  1. 实现服务器接口方法的实现类  
  2.   
  3. package serviceImpl;  
  4.   
  5. import java.util.List;  
  6.   
  7. import dao.AdminDao;  
  8. import daoImpl.AdminDaoImpl;  
  9.   
  10. import bean.Admin;  
  11. import service.AdminService;  
  12.   
  13. public class AdminServiceImpl implements AdminService {  
  14.     AdminDao adminDao = new AdminDaoImpl();  
  15.   
  16.     @Override  
  17.     public boolean insert(Admin entity) {  
  18.         return adminDao.insert(entity);  
  19.     }  
  20.   
  21.     @Override  
  22.     public boolean delete(Admin entity) {  
  23.         return false;  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean deleteById(Integer id) {  
  28.         return false;  
  29.     }  
  30.   
  31.     @Override  
  32.     public boolean update(Admin entity) {  
  33.         return false;  
  34.     }  
  35.   
  36.     @Override  
  37.     public List<Admin> findAll() {  
  38.         return null;  
  39.     }  
  40.   
  41.     @Override  
  42.     public Admin findById(Integer id) {  
  43.         return null;  
  44.     }  
  45.   
  46.     @Override  
  47.     public List<Admin> findNowPageInfo(int nowpage, int pagesize,  
  48.             String sortName, String sortOrder) {  
  49.         return null;  
  50.     }  
  51.   
  52.     @Override  
  53.     public Integer getCountPage(int pagesize) {  
  54.         return null;  
  55.     }  
  56.   
  57.     @Override  
  58.     public boolean deletes(Object[] ids) {  
  59.         return false;  
  60.     }  
  61.   
  62.     @Override  
  63.     public Admin checkLogin(String name, String pass) {  
  64.         Admin entity = adminDao.checkLogin(name, pass);  
  65.         return entity;  
  66.     }  
  67.   
  68.     @Override  
  69.     public Admin checkLogin(String name) {  
  70.         Admin entity = adminDao.checkLogin(name);  
  71.         return entity;  
  72.     }  
  73.   
  74. }  

  1. 用来将页面传入的信息进行分析处理的服务器类,  
  2. package servlet;  
  3.   
  4. import java.io.IOException;  
  5. import java.net.URLEncoder;  
  6. import java.security.MessageDigest;  
  7. import java.security.NoSuchAlgorithmException;  
  8.   
  9. import javax.jms.Message;  
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.http.Cookie;  
  12. import javax.servlet.http.HttpServlet;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import javax.servlet.http.HttpServletResponse;  
  15.   
  16. import com.sun.mail.util.BASE64DecoderStream;  
  17. import com.sun.mail.util.BASE64EncoderStream;  
  18.   
  19. import service.AdminService;  
  20. import serviceImpl.AdminServiceImpl;  
  21. import sun.misc.BASE64Decoder;  
  22. import sun.misc.BASE64Encoder;  
  23. import bean.Admin;  
  24.   
  25. public class AdminServlet extends HttpServlet {  
  26.   
  27.     private AdminService adminService = new AdminServiceImpl();  
  28.   
  29.     // 规定时间常量,为一天  
  30.     private final int EXPIRES =  60 * 60 * 24;  
  31.   
  32.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  33.             throws ServletException, IOException {  
  34.         // request.setCharacterEncoding("UTF-8");  
  35.   
  36.         String oper = request.getParameter("oper");  
  37.         if ("adminLogin".equals(oper)) {  
  38.             adminLogin(request, response);  
  39.         }  
  40.         if ("login".equals(oper)) {  
  41.             request.getRequestDispatcher("./login.jsp").forward(request,  
  42.                     response);  
  43.         }  
  44.   
  45.     }  
  46.   
  47.     private void adminLogin(HttpServletRequest request,  
  48.             HttpServletResponse response) throws ServletException, IOException {  
  49.           
  50.         //获取表单提交的数据  
  51.         String name = request.getParameter("name");  
  52.         String pass = request.getParameter("pass");  
  53.         String mark = request.getParameter("mark");  
  54.         String day = request.getParameter("day");  
  55.   
  56. //      System.out.println(name + "====" + pass + "====" + mark  
  57. //              + "============" + day);  
  58.   
  59.         //根据获取的数据向数据库发送数据请求,  
  60.         Admin entity = adminService.checkLogin(name, pass);  
  61.   
  62.         //判断查询结果  
  63.         if (entity != null) {  
  64.             //判断用户是否进行记录密码和自动登陆的操作  
  65.             if ("mark".equals(mark)) {  
  66.                 // 获取当前的时间并加上要保存的时间长度  
  67.                 long time = System.currentTimeMillis()  
  68.                         + (EXPIRES * Integer.valueOf(day)*1000);  
  69.   
  70.                 // 声明cookie  
  71.                 Cookie autoCookie = null;  
  72.                 // 获取所有的cookie的数组  
  73.                 Cookie cookies[] = request.getCookies();  
  74.                 // 遍历判断  
  75.                 for (Cookie cookie : cookies) {  
  76.                     // 判断是否已经存在cookie记录  
  77.                     if ("autoLogin".equals(cookie.getName())) {  
  78.                         // 存在即直接赋值  
  79.                         autoCookie = cookie;  
  80.                         // 并改变内容  
  81.                         String newValue = name  
  82.                                 + ":"  
  83.                                 + time  
  84.                                 + ":"  
  85.                                 + md5Value(pass + ":" + name + ":" + time  
  86.                                         + ":donghongyujava");  
  87.                         autoCookie.setValue(newValue);  
  88.                     } else {  
  89.                         String cookieValue = name  
  90.                                 + ":"  
  91.                                 + time  
  92.                                 + ":"  
  93.                                 + md5Value(pass + ":" + name + ":" + time  
  94.                                         + ":donghongyujava");  
  95.                         /* 
  96.                          * Control character in cookie value or attribute. 
  97.                          * 当存入的数据是中文时,cookie会出现乱码现象 需要进行编码的转换 
  98.                          */  
  99.                         autoCookie = new Cookie("autoLogin", URLEncoder.encode(  
  100.                                 cookieValue, "UTF-8"));  
  101.                     }  
  102.                 }  
  103.                 // 设置cookie的最长的存活时间  
  104.                 autoCookie.setMaxAge(EXPIRES * Integer.valueOf(day));  
  105.                 response.addCookie(autoCookie);  
  106.             }  
  107.             // 将admin存入到session  
  108.             request.getSession().setAttribute("admin", entity);  
  109.             // 设置成功后就登陆操作  
  110.             request.getRequestDispatcher("./sc.jsp").forward(request, response);  
  111.         } else {  
  112.               
  113.             request.setAttribute("msg", "用户名或密码错误请重试");  
  114.             request.getRequestDispatcher("./login.jsp").forward(request,  
  115.                     response);  
  116.         }  
  117.     }  
  118.   
  119.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  120.             throws ServletException, IOException {  
  121.         this.doGet(request, response);  
  122.     }  
  123.   
  124.     //加密的操作方法  
  125.     public String md5Value(String value) {  
  126.         try {  
  127.             // 获取md5加密的对象  
  128.             MessageDigest digest = MessageDigest.getInstance("md5");  
  129.             // 将传入的数据装换为byte字节,在用digest进行转换(加密)成新的字节数组,  
  130.             byte result[] = digest.digest(value.getBytes());  
  131.             //需要的jdk版本myeclipse2013中自带的com.sun.java.jdk.win32.x86_64_1.6.0.u43  
  132.             //jdk1.7.0_25没有相关的包  
  133.             BASE64Encoder encoder = new BASE64Encoder();  
  134.             // 返回加密后的数据  
  135.             return encoder.encode(result);  
  136.         } catch (NoSuchAlgorithmException e) {  
  137.             // TODO Auto-generated catch block  
  138.             e.printStackTrace();  
  139.         }  
  140.         return "";  
  141.     };  
  142.   
  143. }  

  1. 过滤器类,用来设置请求的编码  
  2. package filter;  
  3.   
  4. import java.io.IOException;  
  5.   
  6. import javax.servlet.Filter;  
  7. import javax.servlet.FilterChain;  
  8. import javax.servlet.FilterConfig;  
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.ServletRequest;  
  11. import javax.servlet.ServletResponse;  
  12. import javax.servlet.http.HttpServletRequest;  
  13. import javax.servlet.http.HttpServletResponse;  
  14.   
  15. public class EncodingFilter implements Filter {  
  16.     private FilterConfig filterConfig;  
  17.   
  18.     @Override  
  19.     public void destroy() {  
  20.         // TODO Auto-generated method stub  
  21.     }  
  22.   
  23.     @Override  
  24.     public void doFilter(ServletRequest req, ServletResponse res,  
  25.             FilterChain chain) throws IOException, ServletException {  
  26.         HttpServletRequest request = (HttpServletRequest) req;  
  27.         HttpServletResponse response = (HttpServletResponse) res;  
  28.         // 编码的设置  
  29.         request.setCharacterEncoding(filterConfig.getInitParameter("encoding"));  
  30.         chain.doFilter(request, response);  
  31.     }  
  32.   
  33.     @Override  
  34.     public void init(FilterConfig filterConfig) throws ServletException {  
  35.         // TODO Auto-generated method stub  
  36.         this.filterConfig=filterConfig;  
  37.     }  
  38.   
  39. }  

  1. 自动登录的过滤类,用来控制用户的自动的登录操作的相关  
  2.   
  3. package filter;  
  4.   
  5. import java.io.IOException;  
  6. import java.security.MessageDigest;  
  7. import java.security.NoSuchAlgorithmException;  
  8.   
  9. import javax.servlet.Filter;  
  10. import javax.servlet.FilterChain;  
  11. import javax.servlet.FilterConfig;  
  12. import javax.servlet.ServletException;  
  13. import javax.servlet.ServletRequest;  
  14. import javax.servlet.ServletResponse;  
  15. import javax.servlet.http.Cookie;  
  16. import javax.servlet.http.HttpServletRequest;  
  17. import javax.servlet.http.HttpServletResponse;  
  18.   
  19. import bean.Admin;  
  20.   
  21. import service.AdminService;  
  22. import serviceImpl.AdminServiceImpl;  
  23. import sun.misc.BASE64Encoder;  
  24.   
  25. public class AutoLoginFilter implements Filter {  
  26.   
  27.     @Override  
  28.     public void destroy() {  
  29.         // TODO Auto-generated method stub  
  30.     }  
  31.   
  32.     @Override  
  33.     public void doFilter(ServletRequest req, ServletResponse res,  
  34.             FilterChain chain) throws IOException, ServletException {  
  35.         // 强制造型为子类型  
  36.         HttpServletRequest request = (HttpServletRequest) req;  
  37.         HttpServletResponse response = (HttpServletResponse) res;  
  38.         // 1.首先判断session  
  39.         Object object = request.getSession().getAttribute("admin");  
  40.   
  41.         if (object != null) {  
  42.             request.getRequestDispatcher("./sc.jsp").forward(request, response);  
  43.             return;  
  44.         }  
  45.   
  46.         // 2.判断cookie中是否存在用户的记录  
  47.         Cookie autoCookie = null;  
  48.         // 获取所有的cookie进行遍历判断  
  49.         Cookie cookies[] = request.getCookies();  
  50.         if (cookies != null) {  
  51.             for (Cookie cookie : cookies) {  
  52.                 // 判断是否已经存贮用户记录  
  53.                 if ("autoLogin".equals(cookie.getName())) {  
  54.                     autoCookie = cookie;  
  55.                 }  
  56.             }  
  57.   
  58.             // 判断是否存在用户自动登录记录  
  59.             if (autoCookie == null) {  
  60.                 chain.doFilter(request, response);  
  61.                 return;  
  62.             }  
  63.   
  64.             // 3.判断cookie的值  
  65.             // 获取cookie值  
  66.             String value = autoCookie.getValue();  
  67.             // 拆分  
  68.             String temps[] = value.split(":");  
  69.   
  70.             // 判断长度是否是自定义的长度  
  71.             if (temps.length != 3) {  
  72.                 chain.doFilter(request, response);  
  73.                 return;  
  74.             }  
  75.             // 获取拆分后的数据  
  76.             String name = temps[0];  
  77.               
  78.             String time = temps[1];  
  79.               
  80.             String service_md5Value = temps[2];  
  81.   
  82.             // 4.根据时间判断是否失效  
  83.             if (Long.valueOf(time) <= System.currentTimeMillis()) {  
  84.                 chain.doFilter(request, response);  
  85.                 return;  
  86.             }  
  87.   
  88.             // 5.根据用户名查询数据  
  89.             AdminService adminService = new AdminServiceImpl();  
  90.             // 向数据库发送数据请求  
  91.             Admin entity = adminService.checkLogin(name);  
  92.             if (entity == null) {  
  93.                 chain.doFilter(request, response);  
  94.                 return;  
  95.             }  
  96.   
  97.             // 6.拼接字符串在进行二次判断,  
  98.             String md5Temp = entity.getPass() + ":" + entity.getName() + ":"  
  99.                     + time + "donghongyujava";  
  100.             if (!(md5Value(md5Temp).equals(service_md5Value))) {  
  101.                 chain.doFilter(request, response);  
  102.                 return;  
  103.             }  
  104.   
  105.             // 7.如果以上的判断都通过,那么就发送成功的转跳连接  
  106.             request.getSession().setAttribute("admin", entity);  
  107.             request.getRequestDispatcher("./sc.jsp").forward(request, response);  
  108.         } else {  
  109.             chain.doFilter(request, response);  
  110.             return;  
  111.         }  
  112.     }  
  113.   
  114.     @Override  
  115.     public void init(FilterConfig arg0) throws ServletException {  
  116.         // TODO Auto-generated method stub  
  117.   
  118.     }  
  119.   
  120.     // 加密的操作函数  
  121.     public String md5Value(String value) {  
  122.         try {  
  123.             // 获取md5加密的对象  
  124.             MessageDigest digest = MessageDigest.getInstance("md5");  
  125.             // 将传入的数据装换为byte字节,在用digest进行转换(加密)成新的字节数组,  
  126.             byte result[] = digest.digest(value.getBytes());  
  127.             BASE64Encoder encoder = new BASE64Encoder();  
  128.             // 返回加密后的数据  
  129.             return encoder.encode(result);  
  130.   
  131.         } catch (NoSuchAlgorithmException e) {  
  132.             // TODO Auto-generated catch block  
  133.             e.printStackTrace();  
  134.         }  
  135.         return "";  
  136.     };  
  137.   
  138. }  

  1. web的配置,主要配置的是servlet和filter的配置  
  2. <?xml version="1.0" encoding="UTF-8"?>  
  3. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  6.     id="WebApp_ID" version="3.0">  
  7.     <display-name>jqueryeasyui</display-name>  
  8.     <servlet>  
  9.         <servlet-name>AdminServlet</servlet-name>  
  10.         <servlet-class>servlet.AdminServlet</servlet-class>  
  11.     </servlet>  
  12.   
  13.     <servlet-mapping>  
  14.         <servlet-name>AdminServlet</servlet-name>  
  15.         <url-pattern>/AdminOPer.do</url-pattern>  
  16.     </servlet-mapping>  
  17.   
  18.   
  19.     <filter>  
  20.         <filter-name>AutoLoginFilter</filter-name>  
  21.         <filter-class>filter.AutoLoginFilter</filter-class>  
  22.     </filter>  
  23.   
  24.     <filter-mapping>  
  25.         <filter-name>AutoLoginFilter</filter-name>  
  26.         <url-pattern>/AdminOPer.do</url-pattern>  
  27.     </filter-mapping>  
  28.   
  29.   
  30.     <filter>  
  31.         <filter-name>EncodingFilter</filter-name>  
  32.         <filter-class>filter.EncodingFilter</filter-class>  
  33.         <!-- 设置传入的参数是UTF-8 -->  
  34.         <init-param>  
  35.             <param-name>encoding</param-name>  
  36.             <param-value>UTF-8</param-value>  
  37.         </init-param>  
  38.     </filter>  
  39.   
  40.     <!-- 设置所有的请求操作都进行这个过滤的操作 -->  
  41.     <filter-mapping>  
  42.         <filter-name>EncodingFilter</filter-name>  
  43.         <url-pattern>/*</url-pattern>  
  44.     </filter-mapping>  
  45.   
  46.     <welcome-file-list>  
  47.         <welcome-file>index.html</welcome-file>  
  48.         <welcome-file>index.htm</welcome-file>  
  49.         <welcome-file>index.jsp</welcome-file>  
  50.         <welcome-file>default.html</welcome-file>  
  51.         <welcome-file>default.htm</welcome-file>  
  52.         <welcome-file>default.jsp</welcome-file>  
  53.     </welcome-file-list>  
  54. </web-app>  

  1. 用来跳转的jsp代码  
  2. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <base href="<%=basePath%>">  
  12.       
  13.     <title>My JSP 'index.jsp' starting page</title>  
  14.       
  15.     <meta http-equiv="pragma" content="no-cache">  
  16.     <meta http-equiv="cache-control" content="no-cache">  
  17.     <meta http-equiv="expires" content="0">      
  18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  19.     <meta http-equiv="description" content="This is my page">  
  20.     <!--  
  21.     <link rel="stylesheet" type="text/css" href="styles.css">  
  22.     -->  
  23.   
  24.   </head>  
  25.     
  26.   <body>  
  27.    <a href="${pageContext.request.contextPath}/AdminOPer.do?oper=login">登录操作</a>  
  28.   </body>  
  29. </html>  

  1. 要登陆的表单界面  
  2. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  3.   
  4. <%@include file="/common/tag.jsp"%>  
  5. <%@include file="/common/jquery.jsp"%>  
  6.   
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10. <head>  
  11.   
  12. <title>My JSP 'index.jsp' starting page</title>  
  13. <meta http-equiv="pragma" content="no-cache">  
  14. <meta http-equiv="cache-control" content="no-cache">  
  15. <meta http-equiv="expires" content="0">  
  16. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17. <meta http-equiv="description" content="This is my page">  
  18. <!--  
  19.     <link rel="stylesheet" type="text/css" href="styles.css">  
  20.     -->  
  21. </head>  
  22.   
  23. <body>  
  24.     <div>  
  25.         <!-- 登录错误时的提示操作 -->  
  26.         <b>${requestScope.msg}</b>  
  27.         <!-- ${pageContext.request.contextPath}代表当前项目路径下的操作 -->  
  28.         <form action="${pageContext.request.contextPath}/AdminOPer.do"  
  29.             method="post">  
  30.             <table border="1">  
  31.                 <tr>  
  32.                     <td>用户名:</td>  
  33.                     <td><input type="text" name="name"></td>  
  34.                 </tr>  
  35.                 <tr>  
  36.                     <td>密码:</td>  
  37.                     <td><input type="text" name="pass"></td>  
  38.                 </tr>  
  39.                 <tr>  
  40.                     <td align="right"><input type="checkBox" name="mark"  
  41.                         value="mark"></td>  
  42.                     <td>下次记住密码</td>  
  43.                 </tr>  
  44.                 <tr>  
  45.                     <td colspan="2"><input type="radio" name="day" value="1">一天  
  46.                         <input type="radio" name="day" value="3">三天 <input  
  47.                         type="radio" name="day" value="7" checked="checked">一周</td>  
  48.                 </tr>  
  49.                 <tr>  
  50.                     <td align="center" colspan="2"><input type="submit" value="登录"  
  51.                         id="submit"><input type="reset" value="重置" id="reset"></td>  
  52.                 </tr>  
  53.             </table>  
  54.             <input type="hidden" value="adminLogin" name="oper">  
  55.         </form>  
  56.     </div>  
  57. </body>  
  58. </html>  

  1. 成功登录后的界面jsp代码  
  2.   
  3. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  4. <%  
  5.     String path = request.getContextPath();  
  6.     String basePath = request.getScheme() + "://"  
  7.             + request.getServerName() + ":" + request.getServerPort()  
  8.             + path + "/";  
  9. %>  
  10.   
  11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  12. <html>  
  13. <head>  
  14. <base href="<%=basePath%>">  
  15.   
  16. <title>My JSP 'sc.jsp' starting page</title>  
  17.   
  18. <meta http-equiv="pragma" content="no-cache">  
  19. <meta http-equiv="cache-control" content="no-cache">  
  20. <meta http-equiv="expires" content="0">  
  21. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  22. <meta http-equiv="description" content="This is my page">  
  23. <!--  
  24.     <link rel="stylesheet" type="text/css" href="styles.css">  
  25.     -->  
  26.   
  27. </head>  
  28.   
  29. <body>  
  30. <!-- 从session域中取出已经存入的用户对象 -->  
  31.     欢迎  <b>${sessionScope.admin.name}</b>进入  
  32. </body>  
  33. </html> 
【JavaWeb】用户登录案例 需求 1. 编写login.html登录页面,包含username & password 两个输入框 2. 使用Druid数据库连接池技术,操作mysql,test数据库中user表 3. 使用JdbcTemplate技术封装JDBC 4. 登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您 5. 登录失败跳转到FailServlet展示:登录失败,用户名或... 阅读详情

相关推荐

(一)JavaWeb实现用户登录注册功能(超详细版)---登录

Web层,Service层,Dao层。Web层:负责前端展示和用户请求的处理。Service层:对Dao层的数据操作进行组合和封装,实现更高层次的业务逻辑。验证逻辑:Service层可以对用户输入的用户名和密码进行验证。检查用户名和密码是否为空、是否符合规定的格式要求,以及与数据库中存储的用户信息进行比对验证等。通过Service层的验证逻辑,可以确保用户输入的凭据是有效和正确的。加密和解密:在用户登录中,密码需要进行加密存储提高安全性。

qq_64995702的博客 1万+

【JavaWeb】案例:用户登录、用户自动登录

案例:用户登录、用户自动登录

少年你真的要止步于此嘛。 3004

JavaWeb快速入门(二)——实现登录页面

(一)静态登录页面我们在https://blog.csdn.net/qq_35616167/article/details/80917262的基础上,继续对javaweb项目进行操作,以熟悉javaweb。在项目工程下的WebRoot文件夹下,为使得项目清晰,我们可以分别新建文件夹css、js、img以存放html所需的css等。我们把https://blog.csdn.net/qq_3...

IT女孩儿的日常的博客 4万+

Java Web——使用Filter实现用户登录

(1)了解什么是Filter。(2)熟悉Filter的拦截过程和接口中的方法。(3)掌握第一个Filter程序的编写方法。(4)能够使用Filter实现用户自动登录通过前面的学习,我们已经了解到,使用Cookie可以实现用户自动登录的功能。但是使用Cookie实现用户自动登录后,当客户端访问服务器的Servlet时,所有的Servlet都需要对用户的Cookie信息进行校验,这样势必会导致在Servlet程序中书写大量重复的代码。为了解决这种问题,可以在Filter。

Liwo4418的博客 2881

JavaWeb实现登录

使用工具及jar包 idea、MySQL、

qq_54196404的博客 3964

JavaWeb基础(4):实现简单的注册登录模块

文章目录(一)项目框架(1)技术分析(1)项目结构(二)具体实现(1)前端(2)后端(0)表示图(1)Servlet(2)UserService(3)UserDao(4)MySQL(三)效果(1)主页(2)登录界面(3)注册界面(4)不足之处 (一)项目框架 练习Servlet使用时,实现一个简单的用户注册登录模块(不考虑SQL注入等问题) 源码地址:https://github.com/mio...

mi4o 8786

java 自动登录_java实现用户自动登录

自动登录,是为了帮助用户多次使用这个网页时,不用再次输入用户名和密码就可以登录。自动登录是指用户将用户的登录信息,人,保存到本地的文件中Cookie中。Name,value -声明时 new Cookie(key,value);Path-默认值,即为当前保存cookie的这个serlvet所在的路径。如果Cookie在这样的路径:http://loclhost:8080/project/abc/A...

weixin_30609253的博客 1201

JavaWeb:用户注册登录案例

用户在登录页面输入用户名和密码,提交请求给LoginServlet 在LoginServlet中接收请求和数据[用户名和密码] 在LoginServlt中通过Mybatis实现调用UserMapper来根据用户名和密码查询数据库表 将查询的结果封装到User对象中进行返回 在LoginServlet中判断返回的User对象是否为null 如果为nul,说明根据用户名和密码没有查询到用户,则登录失败,返回"登录失败"数据给前端 如果不为null,则说明用户存在并且密码正确,则登录成功,返回"登录成功"数据给前

时代各有不同,青春一脉相承。 3947

java 自动登录_java代码实现自动登录功能

通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下登录页面:login.jsp用户名:密 码:一年半年一个月一周那么从上面可看到可选择保存自动登录的期限,可以是一年,半年,一个月,一周,当然这都是以天为单位的服务类:LoginServicepackage com.login.s...

weixin_32389225的博客 2788

javaWeb_Session(实现用户一段时间自动登录)

通过javaWeb的Session技术,实现用户登录以后在一段时间内不用再次登录;关闭浏览器,再次打开上次登录页面,仍然处在登录状态。

实现Java Web程序的自动登录

实现Java Web程序的自动登录 实现Java Web程序的自动登录

用Java完成登录注册后台系统,包含远程、自动登录、注册一体化详细教程

当涉及到开发登入注册后台系统时,Java是一个非常强大和灵活的选择。Java提供了丰富的工具和库,使得开发这样的系统变得相对简单和高效。在本文中,我将为您提供一个详细的教程,介绍如何使用Java实现一个包含远程、自动登录和注册一体化的简易登入注册后台系统。确保您已经安装了Java开发环境(JDK)并配置好了相应的开发工具。教程开始。

Benmao的博客 2781

HA集群 执行 hdfs haadmin -transitionToActive 失败

最近把一个单NameNode集群变更为HA集群,过程中都很顺利,nn1和nn2两个NameNode都显示standby状态,但是把nn1或者nn2切换到active状态时就会报错抛异常。 查看master上namenode启动日志,如下: Incompatible clusterID for journal Storage Directory /home/hadoop-zero/bigdat...

qq_34727158的博客 1763

java 防止用户重复登录_Java Web开发防止多用户重复登录的完美解决方案

目前web项目中,很多情况都是可以让同一个账户信息在不同的登录入口登录这次,这样子就不那么美好了。推荐阅读:现在有两种解决方案:1、将用户的登录信息用一个标志位的字段保存起来,每次登录成功就标记1,注销登录就标记为0,当标记为1的时候不允许别人登录。2、将用户的登录信息保存在application内置作用域内, 然后利用session监听器监听每一个登录用户的登录情况。很显然,第一种方式 每次登录...

weixin_39968309的博客 466

redhawk-sc使用简介

数据完整性对结果的准确性有很大影响,所以一定要保证数据完整性,Redhawk-sc在跑完后,Report里有Data Integrity界面,在这个界面会看到设计数据和库文件的数据完整性,在相应的报告中会有没有覆盖到的数据情况,要对每一项仔细检查,保证输入数据没有问题。文件一般加密,用户唯一需要选择的是文件的corner。其中,cell lef除了常规的standard cell,还有如DTCD,BTSV和clamp等cell的lef,不可缺失,否则data integrity将不是100%。

weixin_48518726的博客 3134

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

使用 curl,telnet,或 Python websocket-client 库可以本地模拟 WebSocket 握手行为,帮助分析服务端响应状态。避免使用 http:// + ws:// 组合方式部署 Jupyter Lab,特别是在远程或跨域访问场景。建议统一采用 https:// + wss:// 方式部署,确保浏览器信任并兼容。确认 WebSocket 已升级为 wss://,内核可正常启动。但在远程访问时,浏览器出于安全策略,默认拒绝 ws:// 协议。

weixin_43866043的博客 1854

计算机毕业设计ssm基于Javaweb的民宿管理系统 基于JavaWeb的民宿预订与管理系统开发 JavaWeb技术在民宿管理中的应用实践

计算机毕业设计ssm基于Javaweb的民宿管理系统st4rf9(配套有源码 程序 mysql数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联xi 可分享随着旅游业的蓬勃发展,民宿作为一种个性化、多样化的住宿选择,受到了越来越多游客的青睐。然而,传统的民宿管理方式存在诸多不便,如预订流程繁琐、信息更新不及时、管理效率低下等。为了提升民宿的运营效率和服务质量,基于JavaWeb的民宿管理系统应运而生。

1206

学习海康VisionMaster之路径提取

这里也需要注意下,这里有两种模式,在运行参数的这一栏有“等距离取点”和“查找边缘点”两个检测模式,说实话,那个等距离取点我也没搞懂有什么用,我拿了OK和NG的图片去对比,好像没有什么实际用处,无法检测(不知道有没有小伙伴知道这个模式到底是怎么用的!2:应用场景:典型的场景是点胶检测,判断胶路质量,有没有断胶等,一开始这胶路检测,真的是难倒我了,特别是不规则图像如何检测,学习了这个算子后,思路一下子打开了,原来还可以这么搞!四:实测:上述设定好参数,开始实际测量看看效果,不同的检测模式下的检测效果。

yuhouxiyang的专栏 1483

java_web用户的自动登录模块的实现

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34391854的博客 153

电芯外观及体系设计(Cell Design)-①容量平衡设计(Cell Balance Design)

全面获取并正确解读客户需求,将需求进行分解和预判,结合公司现有资源、技术,给出设计方案。一个优秀的电芯设计方案,应该是稳健的,可操作的,满足客户需求的同时,并能为公司带来较多利润。电芯设计需同时考虑周期,性能,品质,加工性,成本,及安全与稳健性。设计人员时刻要有成本控制观念,但利润则是由公司战略所决定。

FDC1303864002的博客 1351

基于Simulink的电机轴电压与轴电流抑制仿真

本文带你完成了电机轴电压与轴电流抑制的Simulink仿真,实现了:✅ 揭示了共模电压 → 寄生电容 → 轴电压 → 轴承电蚀的完整链路✅ 搭建了含寄生参数的高频电机等效模型共模电压最小化PWM(源头抑制)dv/dt滤波器(路径阻断)轴接地(终端泄放) ✅ 通过仿真验证了轴电压从68 V降至<3 V的显著效果 ✅ 为高可靠性电机系统提供低成本、高效益的轴承保护方案。

amy_mhd的博客 161

JavaWeb实现简单的用户注册登录(入门级)

JavaWeb实现简单的用户注册登录 代码主要参考的以下博客,我自己修改了一些,可以让刚入门的同学(我自己)更好的理解。 https://blog.csdn.net/caojianhua2018/article/details/92412453 项目结构 dao:这个包下主要是一些关于数据库的操作 dao.DButils:数据库的创建和删除 dao.LoginDaolmp:数据库与用户的交互操作,包括检验用户登录的账号是否合法,当用户注册时将账号插入数据库。 Servlet:实现javaweb的前后端交互

polarday的博客 8万+

5、快速入门

点击启动实例按钮,并设计一个business key,每个实例会有一个business key, 业务主键,也相当于一个流程实例唯一key,一般会与一次业务强相关,比如一个订单号 ,此处取为shopping_1;付款程序完成后会流转到物流发货任务,此时java工程的相应订阅会收到任务,并进入断点,且读到到toWhere变量。单击shopping可以进入实时流程图的执行图,此时流程流转到第一个任务,需要业务系统完成此任务,并通知引擎。添加类,分别订阅流程中的加入购物车任务和物流发货任务。

leyoliu的博客 3499

IDEA Javaweb 用户登录案例

1.需求分析 2.开发步骤 1.创建项目 2.导入jar包 jar相关jar的百度云链接:https://pan.baidu.com/s/1PM-A-UOTC3KpGCr-xNMm9w 提取码:80sq 3.配置文件 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///db2 username=root password=root...

mimihanyzz的博客 7745

ROS与Qt5人机交互界面开发:添加rviz显示界面

最后,点击"完成"以创建新的Qt5应用程序项目。通过结合ROS和Qt5,您可以创建强大的人机交互界面,以实现丰富的机器人控制和数据可视化。在本教程中,我们将在主窗口中创建一个简单的按钮,用于启动rviz显示界面。在Qt Creator的槽函数编辑器中,为按钮添加一个槽函数,该函数将在单击按钮时调用。在上面的代码中,我们使用QProcess类启动了一个新的进程,并执行"rviz"命令来启动rviz显示界面。当您单击Qt5应用程序中的按钮时,将会启动一个新的rviz窗口,显示机器人数据的可视化界面。

CodeJolt的博客 2066

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JavaWeb实现用户登录注册功能实例

一、Servlet+JSP+JavaBean开发模式(MVC)介绍  Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。  这里以一个最常用的用户登录注册程序来讲解Servl...

afanti222的博客 17万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: Filter实现浏览器是否缓存页面信息,和控制编码
下一篇: hibernate的大数据处理
笑看人生-
博客等级 码龄14年 41粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值