ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-02 21:30:29  阅读:202  来源: 互联网

标签:02 09 HttpServletResponse servletResponse html 2022 过滤器 servletRequest response


学习心得

在浏览器禁用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有