栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用户登录3.0(servlet+jsp+Filter和Listener)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用户登录3.0(servlet+jsp+Filter和Listener)

写再前面的话

1,本文为Java学习五部分第二部分所有项目回顾(前端练习系列-对应Java体系第二部分第三阶段内容)这些再前面的博客里没有。因为感觉把练习作业单独写出来会更好一些。
2,整体项目系列博客(包括整体快递e站系列,数据库练习系列,程序创新大会报名表系列,Javaweb系列(用户登录,快递e站),SSM系列,微服务系列,实战系列,等)还是应该刚写完作业就写博客的。本部分借鉴了作者SelcouthAI写博客的结构。

目录标题

写再前面的话具体需求任务过程任务成功视频思路及代码实现

我的原理图以用户登录2.0(servlet+jsp)为基础进行分析。

一,创建数据库二,编写工具类三、 对象四、 登录注册页面五,服务端接受客户端数据六,数据处理七,登录结果页面 完整代码

一、 工具包

properties配置文件DBUtils.javaFirstFilterAttributeListener 二、 对象

lx_servlet_rewu 三,登录与注册页面

login.htmlregister.html 四,服务端接受客户端数据

web.xmlloginServletRegisterServletLogoutServlet 五,数据处理

RwdaoRwDaoImpl 六,登录结果页面

success2.jspindex.jsp

具体需求

需求1:
   过滤器:上一个任务中我们已经实现了登录功能以及展示功能,这里用到一个页面叫 success.jsp。当前项目中无论用户是否登录成功,都可以直接访问 success.jsp。现在新加一个需求,使用过滤器实现功能:用户在登录情况下才能访问 success.jsp 页面。
需求2:
   添加一个监听器,监听 session 的变化,如果 session 每存储一次用户信息到 session,则调取监听器,监听 session

任务过程

1.在登录功能中添加一个过滤器,过滤器中首先获取请求地址,如果请求地址是 success.jsp,则表示用户想访问成功页面,那就需要进行验证。
2. 验证只需要在过滤器中获取 session 中的数据,判断 session 中是否存有用户信息,有则表示用户已登录,放行即可。否则跳转到登录页面
3.配置 session 监听器类,重写监听器方法,在方法中输出 session 存值和删除值的动作描述。

任务成功视频

后台不能上传视频,额。补一下截图。
登录界面-其实是改上面的链接依然跳回了登录界面(过滤器方法)

监听器-监听session 变化

思路及代码实现 我的原理图

分享一个我自己画的适用于过滤器,监听器的通用流程。
竟然和cookie与session放一起了。
cookie原理图

session原理图

Filter原理图

监听器原理图

以用户登录2.0(servlet+jsp)为基础进行分析。 一,创建数据库

和之前一样

二,编写工具类

主要改动部分,增加了FirstFilter和AttributeListener
FirstFilter:通过判断session里是否有用户名称来进行过滤。

 @Override   //请求和响应时都会执行这个方法
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤器开始");
        //处理乱码
        HttpServletRequest request=(HttpServletRequest)servletRequest;
        HttpServletResponse response=(HttpServletResponse)servletResponse;
        request.setCharacterEncoding("utf-8");

        //防止用户在未登录的情况下访问资源
        String requestURI = request.getRequestURI();//获得请求地址
        //System.out.println("requestURI="+requestURI);
        Object username = request.getSession().getAttribute("username");

        if(requestURI.endsWith("success2.jsp")&&username==null){
            response.sendRedirect("login.html");
        }

        //调取下一个过滤器,或者调取servlet
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("过滤器结束");

    }

AttributeListener:记录session每一次的变化。

@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
    System.out.println("session存值,"+httpSessionBindingEvent.getName()+","+httpSessionBindingEvent.getValue());
}

@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
    System.out.println("session清除值");
}
三、 对象

和之前一样

四、 登录注册页面

哈哈,和之前一样

五,服务端接受客户端数据

web.xml配置又回来了。
session的有效时间


    30

filter配置


    f1
    
        rewu.util.FirstFilter
    


    f1
    
            //登录成功
            //session存值
            HttpSession session = req.getSession();
            session.setAttribute("username",username);
            session.setAttribute("password",password);
            session.setMaxInactiveInterval(60*30);//单位是秒
            //重定向或者转发时,session数据是不会丢失的,重定向时,request中的数据会丢失
            req.getRequestDispatcher("success2.jsp").forward(req,resp);
        }
    }
六,数据处理

还是不变

七,登录结果页面

登录失败页面变化:登录失败后可以跳转到登录页面,登录使用cookie显示了用户名。

  

  <%
    // 这一部分主要是cookie的使用
    cookie[] cookies = request.getcookies();
    String value ="";
    if(cookies!=null&&cookies.length>0){
      for (cookie cookie : cookies) {
        if(cookie.getName().equals("uname")){
          value = cookie.getValue();
          break;
        }
      }
    }
    pageContext.setAttribute("unamecookie",value);
  %>

  

登录

用户名:
密码:
完整代码 一、 工具包 properties配置文件
driverclass=com.mysql.cj.jdbc.Driver
username=print
password=print
url=jdbc:mysql://localhost:3306/shshop?serverTimezone=UTC
DBUtils.java
package rewu.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;


public abstract class DBUtils {
    //1.定义成员变量 DataSource
    private static DataSource ds;

    static{
        try {
            //1.加载配置文件
            Properties pro = new Properties();
            pro.load(DBUtils.class.getClassLoader().getResourceAsStream("db.properties"));
            //2.获取DataSource
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    
    public static DataSource getDataSource(){
        return  ds;
    }


    
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}
FirstFilter
package rewu.util;


import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FirstFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化filter");//当服务器启动时执行init
    }

    @Override   //请求和响应时都会执行这个方法
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤器开始");
        //处理乱码
        HttpServletRequest request=(HttpServletRequest)servletRequest;
        HttpServletResponse response=(HttpServletResponse)servletResponse;
        request.setCharacterEncoding("utf-8");

        //防止用户在未登录的情况下访问资源
        String requestURI = request.getRequestURI();//获得请求地址
        //System.out.println("requestURI="+requestURI);
        Object username = request.getSession().getAttribute("username");

        if(requestURI.endsWith("success2.jsp")&&username==null){
            response.sendRedirect("login.html");
        }

        //调取下一个过滤器,或者调取servlet
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("过滤器结束");

    }

    @Override
    public void destroy() {
        System.out.println("销毁filter");
    }
}
AttributeListener
package rewu.util;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class AttributeListener implements HttpSessionAttributeListener {
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session存值,"+httpSessionBindingEvent.getName()+","+httpSessionBindingEvent.getValue());
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session清除值");
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {

    }
}
二、 对象 lx_servlet_rewu
package rewu.bean;


public class lx_servlet_rewu {

    private int id;
    private String username;
    private String PASSWORD;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPASSWORD() {
        return PASSWORD;
    }

    public void setPASSWORD(String PASSWORD) {
        this.PASSWORD = PASSWORD;
    }
}
三,登录与注册页面 login.html
```java
```html
<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>





欢迎

<%=session.getAttribute("username") %>

,登录成功!!!!
register.html



    
    表单验证
    
    


注册页面

*用户名:
*密码:
*确认密码:
四,服务端接受客户端数据 web.xml



    
        30
    

    



    
        f1
        
            rewu.util.FirstFilter
        
    
    
        f1
        
            //登录成功
            //session存值
            HttpSession session = req.getSession();
            session.setAttribute("username",username);
            session.setAttribute("password",password);
            session.setMaxInactiveInterval(60*30);//单位是秒
            //重定向或者转发时,session数据是不会丢失的,重定向时,request中的数据会丢失
            req.getRequestDispatcher("success2.jsp").forward(req,resp);
        }
    }
}
RegisterServlet
package rewu.servlet;

import rewu.bean.lx_servlet_rewu;
import rewu.dao.impl.RwDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.设置编码
        req.setCharacterEncoding("utf-8");
        //2.获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("PASSWORD");
        //3.封装user对象
        lx_servlet_rewu loginUser = new lx_servlet_rewu();
        loginUser.setUsername(username);
        loginUser.setPASSWORD(password);

        //4.调用UserDao的login方法
        RwDaoImpl dao = new RwDaoImpl();
        int user = dao.register(loginUser);

        //5.返回登录
        resp.sendRedirect("/login.html");

    }
}
LogoutServlet
package rewu.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/logOut")
public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getSession().invalidate();//使session失效
        resp.sendRedirect("login.html");
    }
}
五,数据处理 Rwdao
package rewu.dao;

import rewu.bean.lx_servlet_rewu;

public interface Rwdao {
    // 查询登录用户
    public lx_servlet_rewu login(lx_servlet_rewu login_rewu);

    // 添加登录用户
    public int register(lx_servlet_rewu register_rewu);
}
RwDaoImpl
package rewu.dao.impl;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import rewu.bean.lx_servlet_rewu;
import rewu.dao.Rwdao;
import rewu.util.DBUtils;

public class RwDaoImpl implements Rwdao {

    //声明JDBCTemplate对象共用
    private JdbcTemplate template = new JdbcTemplate(DBUtils.getDataSource());

    
    @Override
    public lx_servlet_rewu login(lx_servlet_rewu login_rewu) {

        try {
            //1.编写sql
            String sql = "select * from lx_servlet_rewu where username = ? and PASSWORD = ?";
            //2.调用query方法
            lx_servlet_rewu user = template.queryForObject(sql,
                    new BeanPropertyRowMapper(lx_servlet_rewu.class),
                    login_rewu.getUsername(), login_rewu.getPASSWORD());
            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();//记录日志
            return null;
        }
    }

    @Override
    public int register(lx_servlet_rewu register_rewu) {
        try {
            //1.insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
            String sql = "insert into lx_servlet_rewu(username,PASSWORD) values (?,?)";
            //2.调用query方法
            int user = template.update(sql,register_rewu.getUsername(),register_rewu.getPASSWORD());
            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();//记录日志
            return 0;
        }
    }
}
六,登录结果页面 success2.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>





欢迎

<%=session.getAttribute("username") %>

,登录成功!!!!
index.jsp
<%--
  Created by IntelliJ IDEA.
  User: xiaomi
  Date: 2021/3/3
  Time: 14:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  

  <%
    // 这一部分主要是cookie的使用
    cookie[] cookies = request.getcookies();
    String value ="";
    if(cookies!=null&&cookies.length>0){
      for (cookie cookie : cookies) {
        if(cookie.getName().equals("uname")){
          value = cookie.getValue();
          break;
        }
      }
    }
    pageContext.setAttribute("unamecookie",value);
  %>

  

登录

用户名:
密码:
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号