1. JSP

2. 语法

  • 注释 <%-- 内容 --%>
  • java代码块 <% java代码 %>
  • jsp表达式 <%= 表达式 %> 相对应out.println()
  • jsp声明 <%! 声明变量或者方法 %> <%! String str ="abc"; %> 如果加! 则声明是成员变量 不加则是局部变量 方法必须加!

3. 指令

  • page指令 配置 <%@ page 属性名=属性值 属性名=属性值 %>

    • 50. JSP - 图1
  • include指令 包含其他页面 <%@ include file=包含的页面 %>
  • taglib指令 可以引入外部标签库 <%@ taglib uri=标签库的地址 prefix=前缀名称 %>

4. 细节

  • 九大隐式对象 不需要创建,jsp已经帮我们创建了

    • 50. JSP - 图2
  • PageContext 对象 是JSP独有,在Servlet中没有 是四大域对象中的页面域对象,还可以操作其他三个域对象中的属性 还可以获取其八个隐式对象 生命周期随着JSP 每一个JSP都有一个PageContext 对象

  • 四大域对象

    • 50. JSP - 图3

5. MVC 模型

50. JSP - 图4

6. EL 表达式

在JSP页面中获取数据 让我们的JSP脱离java代码块和JSP表达式

${表达式内容} 等效于 <% out.println(request.getAttribute("user"))%><%=request.getAttribute("user") %>

只要是四大域的内容都可以获取出来

先用setAttribute() 共享数据

6.1. 获取数据

  • 基本数据

    • ${name}
  • 自定义对象数据

    • ${对象名}
    • ${对象名.属性名} 调用相对应的get方法
  • 数组类型数据

    • ${arr}
    • ${arr[0]}
  • List集合数据

    • ${list}
    • ${list[0]}
  • Map集合数据

    • ${map}
    • ${map.key}

6.2. 注意事项

  • 没有空指针异常
  • 没有索引越界异常
  • 没有字符串的拼接
  • 获取四大域对象是从小到大查找

6.3. 运算符

50. JSP - 图5

50. JSP - 图6

50. JSP - 图7

6.4. EL 表达式隐式对象

50. JSP - 图8

7. JSTL

JSP 标准标签库 可以利用这些标签取代JSP页面上的JAVA 代码 从而提高的可读性

50. JSP - 图9

7.1. 核心标签库

50. JSP - 图10

  1. 导入jstl.jar包并添加到项目中

  2. 在jsp中添加

    1. <%@ taglib uri="http://java.sun.com/jsp/jst1/core" prefix="自定义标签"%>
  1. 使用jstl标签

8. Filter

过滤器, Filter是用来过滤请求资源和资源响应的对象 , 并且按需求来处理不同的请求

50. JSP - 图11

8.1. FilterChain

50. JSP - 图12

  • 继承javax.servlet.Filter

  • 重写doFilter()方法

  • 处理逻辑

  • 使用FilterChain的dodoFilter放行

  • 使用注解 @WebFilter(“拦截的路径”) 拦截需要拦截请求的路径

    • 使用配置文件方式 在web.xml 与之前servlet类似

      1. <filter>
      2. <filter-name>demo</filter-name>
      3. <filter-class>com.example.demo.demo</filter-class>
      4. </filter>
      5. <filter-mapping>
      6. <filter-name>demo</filter-name>
      7. <url-pattern>/*</url-pattern>
      8. </filter-mapping>

多个过滤器,取决于过滤器映射的顺序

8.2. 生命周期

  • 创建 当应用价值实例化对象并执行init方法
  • 过程 执行doFilter方法
  • 销毁 当应用卸载或者服务器停止 执行 destroy 方法

8.3. FilterConfig

FilterConfig是一个接口 代表过滤器的配置对象 可以加载一些初始化参数 不需要创建 由服务器通过init方法传递提供

  • getFilterName() 获取过滤器名称

  • getInitParameter(String key) 根据key获取value

      1. <filter>
      2. <filter-name>demo</filter-name>
      3. <filter-class>com.example.demo.demo</filter-class>
      4. <!-- 需要添加init-param标签-->
      5. <init-param>
      6. <param-name>key</param-name>
      7. <param-value>value</param-value>
      8. </init-param>
      9. </filter>
  • getInitParameterNames() 获取所有参数的key

  • getrServletContext() 获取应用上下文对象

8.4. 过滤器五种拦截行为

Filter过滤器默认拦截的是请求,如需要拦截请求转发 请求包含 需要在配置文件配置

50. JSP - 图13

  1. <!-- 全局错误页面 -->
  2. <error-page>
  3. <!-- 错误类型-->
  4. <exception-type>java.lang.Exception</exception-type>
  5. <!-- 发生错误后跳转页面 虚拟路径 -->
  6. <location>/err.jsp</location>
  7. </error-page>
  8. <error-page>
  9. <!-- 错误代码 -->
  10. <error-code>404</error-code>
  11. <location>/err.jsp</location>
  12. </error-page>