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

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

时间:2022-09-02 21:35:53浏览次数:52  
标签: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
From: https://www.cnblogs.com/wxp0909/p/16651275.html

相关文章

  • 2022年java第一次随堂测试
    //源代码importjava.util.Scanner;publicclassRoomManagement{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); RoomInformati......
  • CSP_202206-2_寻宝!大冒险!
    CSP_202206-2_寻宝!大冒险题目链接思路相当于判断两个有限集合AB之间是不是满射和单射,只需要保证以下两点A和B元素个数相等A中每个元素都能通过映射\(\psi\)到B中一个......
  • 2022-09-02 第四组 王佳齐 学习笔记
    coolie:保存http状态,保存在客户端,保存在浏览器上的;登录信息,保存在浏览器上,以键值对的形式,不安全。使用cookie的流程:1.创建Cookie对象2.设置最大时效3.把cookie放到Ht......
  • 2022-9-2 cookie 和 session
    会话技术会话:一次会话中包含多次请求和响应。一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止功能:在一次会话的范围内的多次请求间,共享数据......
  • 2022-2023-1 20221424《计算机基础与程序设计》第一周学习总结
    学期:2022-2023-1学号:20221424《计算机基础与程序设计》第1周学习总结作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnb......
  • 「NOI2022」冒泡排序
    题目给定正整数\(n\)和\(m\)条限制,每条限制为非负整数三元组\((L,R,V)\)。现在,你需要构造一个长度为\(n\)的非负整数序列,并且满足每一条限制:一条限制\((L,R,V)\)......
  • leetcode1502-判断能否形成等差数列
      我的原始代码class Solution {public:    bool canMakeArithmeticProgression(vector<int>& arr) {        sort(arr.begin(),arr.end()); ......
  • 2022-09-02 第四小组 王星苹 学习笔记
    学习心得axios对原生ajax的一个封装。学习总结ES6语法。Promise语法。 *axios发送get请求,*请求中如果有参数,还是一个默认的以文档里的形式发送,和之前的任何一......
  • 2022.9.2 - ts笔记
    TypeScript中的代码清道夫:非空断言操作符value:{type!:Array,required:true},类型别名及导入导出,对数组内的对象做限制//util/type.d.ts//......
  • 2022-2023-1-20221405《计算机基础与程序设计》第1周学习总结
    作业信息2022-2023-1-计算机基础与程序设计2022-2023-1计算机基础与程序设计第一周作业学习目标快速浏览教材并提问作业正文https://www.cnblogs.com/lengyu1231/p/1......