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

posted @ 2020-06-02 23:16  chaserFF  阅读(204)  评论(0编辑  收藏  举报