其他分享
首页 > 其他分享> > 2022-09-02 第四小组 王星苹 学习笔记

2022-09-02 第四小组 王星苹 学习笔记

作者:互联网

学习心得

在浏览器禁用cookie的情况下,HTTPSession仍可以用于会话管理机制

转发调用的是HttpServletRequest对象中的方法

转发时浏览器只请求一次服务器。

重定向时,浏览器中的地址栏url会发生变化,重定向调用的是HttpServletResponse对象中的方法

心情

今天学习的是关于过滤器的知识,转发是服务器行为,重定向是客户端行为。过滤器很重要,有一些顺序方面的东西有一些迷茫

掌握情况:一小般

学习总结

字符集过滤器

HttpServletResponse response = (HttpServletResponse) servletResponse;
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");

给response添加响应头,text/html,后台向前台输出字符串的时候当后台向前台输出的是json格式,不需要设置这个。

response.addHeader("content-type","text/html;charset=utf-8");
放行
filterChain.doFilter(servletRequest,servletResponse);
过滤:

这里面的servletRequest和servletResponse实际上就是HttpServletRequest和HttpServletResponse的对象

由于在形参处声明的是父类类型,发生了向上转型,

父类 父类对象 = new 子类;

父类对象.方法

ServletResponse和HttpServletResponse

子类对象调父类的方法,随便调。

父类对象想要调子类的方法,不可能,除非再向下转型。

ServletResponse没有sendRedirect

HttpServletResponse有sendRedirect

sendRedirect是子类的独有的方法

需要向下转型,向下转型是有风险的。

记住一个事:

只要地址栏不发生改变,request永远是同一个,请求转发

初始化

在创建Filter对象,在servlet容器(tomcat)加载当前web应用(当前工程)被调用

只执行一次。当前Filter的初始化操作,Filter和Servlet都是单例的。

FilterConfig类似于ServletConfig,获取初始化参数。

主要过滤请求的方法(核心方法)

真正Filter要处理的逻辑代码需要写在此方法里,每次拦截都会调用这个方法。

ServletRequest:实际上当请求来的时候,实例化的还是HttpServletRequest

ServletResponse:实际上当请求来的时候,实例化的还是HttpServletResponse

FilterChain:过滤器链,一个项目中是可以有多个过滤器的,会形成一个链,当前过滤器把请求传递给下一个过滤器

Filter的执行顺序:

filter-mapping的上下顺序有关


练习:

登录:login.html发起请求到login.do

在过程中,两个过滤器,

UsernameFilter,负责判断用户名,如果用户名正确,则把请求放行到下一个过滤器,否则,回到登录页。

PasswordFilter,负责判断密码,如果密码正确,就跳转到success.html,否则,回到登录页。

username:

public class Filter01_UsernameFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("UsernameFilter....");
        filterChain.doFilter(servletRequest,servletResponse);
//                String username = servletRequest.getParameter("username");
//        if(Objects.equals(username,"admin")){
////            用户名正确,当前过滤器放行
//            filterChain.doFilter(servletRequest,servletResponse);
//            return;
//        }
//        HttpServletResponse response = (HttpServletResponse) servletResponse;
//        HttpServletRequest request = (HttpServletRequest) servletRequest;
//        response.sendRedirect(request.getContextPath() + "/afternoon/login.html");
    }
}

password:

public class Filter02_PasswordFilter implements Filter {


    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("PasswordFilter...");
        filterChain.doFilter(servletRequest,servletResponse);
        //        HttpServletRequest request = (HttpServletRequest) servletRequest;
//        HttpServletResponse response = (HttpServletResponse) servletResponse;
//
//        String password = request.getParameter("password");
//        if(Objects.equals(password,"123456")){
//            response.sendRedirect(request.getContextPath() + "/afternoon/welcome.html");
//            return;
//        }
//        response.sendRedirect(request.getContextPath() + "/afternoon/login.html");
    }
}

html页:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="../login2.do" method="post">
        账号:<input type="text" name="username">
        密码:<input type="password" name="password">
        <input type="submit" value="登录">
    </form>
</body>
</html>
 

 

标签:02,09,HttpServletResponse,servletResponse,html,2022,过滤器,servletRequest,response
来源: https://www.cnblogs.com/wxp0909/p/16651275.html