美文网首页
第九篇学习总结

第九篇学习总结

作者: 拼搏男孩 | 来源:发表于2020-01-27 13:19 被阅读0次

第九篇学习总结

一、Filter

过滤器会在请求到实际指向目标的时候先截获到请求,并且在请求离开目标之后再次截获请求。Filter是Servlet技术的核心技术,可以利用其完成自动登录、编码过滤、权限控制、过滤请求、压缩数据等。

1、编写过滤器

  • 定义类实现Filter接口:public class MyFilter implements Filter{}

  • 指定Filter的拦截范围

    • 配置式:在web.xml文件中配置
    <filter>
    <filter-name>myfilter</filter-name>
    <filter-class>com.qianfeng.user.MyFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>myfilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    • 注解式:在过滤器中配置,@WebFilter("/*"),拦截所有
  • 多过滤器下的优先级:如果采用配置式,按照注册顺序调用,写在前面的先调用;如果采用注解式,按照类名的字符串顺序调用

  • 自动登录:

public class AutoLoginFilter implements Filter {
    //过滤器的生命周期 : 服务器启动诞生  服务器运行 活着   服务器关闭  消亡
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //为什么要强转?
        //Session是和Http协议配合的, 所以只有HttpServletRequest才能获取到
        //能安全的强转吗?
        //如果请求是http协议的, 那么, tomcat造的就是HttpServletRequest对象, ServletRequest 是HttpServletRequest父类
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        Object obj = req.getSession().getAttribute("login");//获取登录标志
        if(obj==null){
            //做自动登录
            Cookie[] cookies = req.getCookies();//如果前台一个cookie都没有传递过来, 这里会获取到null
            if(cookies!=null){
                for (Cookie cookie : cookies) {
                    String name = cookie.getName();
                    if("autologin".equals(name)){
                        String value = cookie.getValue();
                        String[] strs = value.split("=");
                        if(Message.users.containsKey(strs[0])&&Message.users.get(strs[0]).equals(strs[1])){
                            req.getSession().setAttribute("login",true);
                            break;//不能写return, 如果是return的话, 放行代码都无法执行了
                        }
                    }
                }
            }
        }

        filterChain.doFilter(servletRequest,servletResponse); //放行请求

    }

    @Override
    public void destroy() {

    }
}

二、监听器

监听器用于监听web应用中某些对象、信息的创建、销毁、增加、修改、删除等动作的发生,然后作出响应处理。常用于统计在线人输和在线用户,系统加载时进行信息初始化,统计网站的访问量等。

1、编写监听器

  • 定义类实现对应的监听器接口
  • 重写方法
  • 配置:
    • 注解式
    • 配置式
  • 优点:非侵入式检测

三、JSP

1、HTML作为展示页的缺点

1.1 缺点

  • 缓存问题,浏览器如果认为是同一个HTML页面,不会重新请求
  • 回显问题,无法动态页面展示
  • 动态显示页面

2、解决办法

  • MIME类型
  • 使用servlet,动态拼接代码

2、JSP介绍

JSP是Java Server Pages,基于html模板,可以在html模板中嵌入Java代码,同时还可以和CSS与JavaScript结合。

  • jsp是servlet,不是静态页面,所以不会缓存
  • 优势:
    • 与纯Servlet相比,很方便的编写或者修改HTML网页而不用去面对大量的println语句
    • 与JavaScript相比,JavaScript很难与服务器交互。
    • 与静态HTML相比:静态HTML不包含动态信息
  • 缺点:
    • 传输量大,可以使用异步,尽量不刷新页面
    • 每次都要拼接大量的字符串:页面静态化

3、JSP指令

  • page指令:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  • include指令:静态包含 <%@ include file="header.jsp" %>
  • taglib指令:引入其他标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

4、JSP的动作(尽量不用)

  • jsp:include动态包含:<jsp:include page="header.jsp"></jsp:include>
  • 静态包含与动态包含的区别:翻译的时间段不同,静态包含在翻译时就把两个文件进行合并,动态包含不会合并文件,当代码执行到include时才会合并。

5、JSO九大内置对象

  • 对象名 类型 说明
    request javax.servlet.http.HttpServletRequest
    response javax.servlet.http.HttpServletResponse
    session javax.servlet.http.HttpSession 由session=“true”开关
    application javax.servlet.ServletContext
    exception java.lang.Throwable 由isErrorPage=“false”开关
    page java.lang.Object当前对象this 当前servlet实例
    config javax.servlet.ServletConfig
    pageContext javax.servlet.jsp.PageContext
    out javax.servlet.jsp.JspWriter javax.servlet.jsp.JspWriter

六、JSP的四大域对象

  • pageContext:标识当前JSP页面
  • request域:常用于转发
  • session域:同一个浏览器法除的多个请求共享一个域
  • servletContext域:最大的一个域,被所有请求共享

七、EL表达式

EL表达式不是一种语言,是JSP中获取数据的一种规范

  • 格式:${参数名称}

八、JSTL

这是一款强大的逻辑标签库,可以在JSP页面进行逻辑判断,在使用之前需要导入外部标签库,主要用到的是两个标签:判断与循环。

  • 导入外部标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
  • 判断:<c:if test=""></c:if>
  • 循环:<c:forEach items="" var=""></c:forEach>

相关文章

  • 第九篇学习总结

    第九篇学习总结 一、Filter 过滤器会在请求到实际指向目标的时候先截获到请求,并且在请求离开目标之后再次截获请...

  • 学习总结第九篇 5.11

    内容总结: 1、求余运算注意判断除数是否为0 2、格式控制符号: %3d 占三个字符的位置,不足三个字符的补空格,...

  • 美容院团队中的“和平者”

    这个专题的文章共九篇,本文是第九篇。内容用来为“安秀阳光微课堂”的听众,提供文字版课程总结及学习内容补充。 所以本...

  • 学会写书评之后,第一次小总结

    今天完成了第九篇书评,距离最初的目标还差一篇。 接下来总结一下在这段时间里,学习写书评的心得体会。 首先,从开始到...

  • 常用机器学习算法汇总比较(完)

    机器学习入门系列(2)--如何构建一个完整的机器学习项目,第九篇! 该系列的前八篇文章: 机器学习入门系列(2)-...

  • 教育正悄悄发生一场革命–9

    ————“勇气读书会”第九篇 嗨,大家好! 今天的学习对于我来说,更像是一节教育思想...

  • 论语学习第九篇

    原文:曾子曰:慎终追远,民德归厚矣。 译文:曾子说:"谨慎地办理父母的丧事,虔诚地追念祭祀祖先,这样做就可以使老百...

  • 【009期】JavaSE面试题(九):集合之Set

    开篇介绍 大家好,我是Java面试题库的提裤姐,今天这篇是面试系列的第九篇,主要总结了JavaSE中集合相关面试题...

  • 持续输出面试题系列之Dubbo篇

    开篇介绍 大家好,我是Java最全面试题库的提裤姐,今天这篇是JavaEE面试题系列的第九篇,主要总结了Dubbo...

  • 学习,改变,进步

    感赏日记第九篇6月20日 前几天女儿看到我打印了那么多资料问我干嘛呢,我说妈妈学习亲子课程,学习改变自己,当时女儿...

网友评论

      本文标题:第九篇学习总结

      本文链接:https://www.haomeiwen.com/subject/tmfethtx.html