servlet应用
一、建立数据库
二、登陆时密码校验
2.1 post请求提交表单
2.2 获取登陆用户名及密码,并进行验证
Service层:
核心代码:
public class LoginServiceImpl implements LoginService { private UserMapper userMapper; public LoginServiceImpl() { userMapper = new UserMapperImpl(); } @Override public User findUserByUsernameAndPassword(User user) { return userMapper.findUserByUsernameAndPassword(user); } }
DAO层:
核心代码:
public class UserMapperImpl implements UserMapper { /** * @param user 传入的user * @return com.j2ee.bean.User 如果查询不到,即为空,查询的到就将结果封装成对象返回 * @author yangfan */ @Override public User findUserByUsernameAndPassword(User user) { Connection conn = null; Statement statement = null; ResultSet rs = null; User checkUser = null; try { //获取连接 conn = DBUtil.getConnection(); String username = user.getUsername(); String passwd = user.getPasswd(); String sql = String.format("select * from user where username = '%s' and passwd = '%s'", username, passwd); statement = conn.createStatement(); //查询结果 rs = statement.executeQuery(sql); //存在记录 if (rs.next()) { checkUser = new User(); checkUser.setUsername(rs.getString("username")); checkUser.setPasswd(rs.getString("passwd")); } } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { //释放资源 DBUtil.release(rs, statement, conn); } return checkUser; } }
controller层:
核心代码:
测试:
三、使用cookie保存用户登陆信息
java核心代码:
js核心代码:
结果:可以看到Cookie已存储在客户端
重新打开登陆页面可以看到username和password已经自动填在对应的文本框中
四、使用session显示网站在线人数
当一个浏览器第一次访问网站的时候,服务器会新建一个HttpSession对象 ,并触发 HttpSession创建事件 ,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的 sessionCreated方法。相反,当这个浏览器访问结束超时的时候,dang服务器会销毁相应的HttpSession对象,触发 HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed方法。因此实现一个类实现HttpSessionListener接口即可。
@WebListener public class MyHttpSessionListener implements HttpSessionListener{ //使用volatile保证并发安全 private static volatile int userCount = 0; @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { System.out.println("--------------listener初始化----------------"); userCount++; // 将userNumber添加到application域对象属性当中 httpSessionEvent .getSession() .getServletContext() .setAttribute("userNumber", userCount); } @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { System.out.println("--------------listener销毁----------------"); userCount--; httpSessionEvent .getSession() .getServletContext() .setAttribute("userNumber", userCount); } }
servlet中代码:
测试结果:
五、登录时用户名为中文可能不能正常识别
将username重新编码即可,一行代码代码解决
测试:首先插入一条中文记录:
登陆成功!
项目地址:https://gitee.com/chaserff/J2EE