JSTL常用标签,自定义标签,web三大组件:

JSTL常用标签:
单分支判断if标签:

           <c  : if  test = “EL条件表达式”> 
           满足条件执行 
           </c  : if >   

多分支判断choose标签:

            <c  : choose > 
             <c  : when test = “EL表达式”> 
                         满足条件执行 
                  </c  : when> 
             … 
             <c  : otherwise> 
                         不满足上述when条件时执行 
             </c  : otherwise> 
            </c  : choose >   

循环forEach标签:

        <c  : forEach  var= “循环变量”  
            items= “集合” varStatus= “状态变量”  
       > 
            …  … 
           </c  : forEach>   

JSTL自定义标签:

如果上面几个标签不能满足需求,程序员也可以自定义标签,步骤如下:

  1. 编写标签类 ,继承SimpleTagSupport或TagSupport
  2. 重写父类方法(doTag或doStartTag、doEndTag)
  3. 配置标签说明文件 (tld标签库文件 )

编写标签的Java类和doTag方法处理:

      public class PagerTag extends SimpleTagSupport  { 

            private int pageSize;//定义标签属性 
            //省略了set和get方法 

           public void doTag() throws JspException,  
      IOException  { 
                JspWriter out = this.getJspContext().getOut(); 
                out.print( “要输出的HTML内容”); 
           } 
      }   

定义标签库文件,放置到WEB-INF下:

             <?xml version= "1.0 " encoding="UTF-8 " ?> 
             <taglib xmlns= "http ://java.sun.com/xml/ns/javaee " 
                 xmlns:xsi= "http ://www.w3.org/2001/XMLSchema-instance " 
                 xsi:schemaLocation= "http ://java.sun.com/xml/ns/javaee 
                 http ://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version= "2.1">   
               <tlib-version>1.0</tlib-version> 
               <short-name>xdl</short-name> 
               <uri>http://www.lampbrother.net/pager</uri> 
               <tag> 
                 <description>生成分页按钮</description> 
                 <name>pager</name> 
                 <tag-class>com.xdl.tag.PagerTag</tag-class> 
                 <body-content>empty</body-content> 
                 <attribute> 
                     <description>每页显示记录数</description> 
                     <name>pageSize</name> 
                     <required>true</required> 
                     <rtexprvalue>true</rtexprvalue> 
                 </attribute> 
              </tag>   
             </taglib>   

在JSP中添加taglib指令引入标签库使用:

       <%@ page language= "java " import="java.util.* "  
       pageEncoding="UTF-8 "%> 
       <%@taglib prefix= "xdl"   
       uri="http ://www.lampbrother.net/pager "%> 
       <html> 
         <head> 
           <title>自定义标签应用</title> 
         </head> 
         <body> 
           <xdl:pager totalSize= "21" pageSize="5 "/> 
         </body> 
       </html>   

Servlet:

HTML –> 静态网页
Servlet –> 接收用户的参数 | 准备HTML响应体
JSP –> 更方便的准备HTML响应体

字符转(字符编码) ‘A’ = 65

HashMap
1001 : 考试
1002 : 提交成绩

堆内存 –> Java的规则

JSON :

var person = {"name":"张三", "age":18};  
var user = {"username","123","password":"456"};  

XML :

<person>
    <name>张三</name>
    <age>18</age>
</person>

JSP心得:
功能该分开要分开,避免耦合度过高
将一个大项目拆分成多个模块
避免耦合度过高

web三大组件:
Servlet是web的三大组件之一.

  1. Servlet
  2. Filter 过滤器
  3. Listener 监听器

Filter 过滤器:

过滤的是请求.
面向切面编程思想
使用步骤:

  1. 编写一个类,实现Filter接口
  2. 通过web.xml 或 注解的方式,配置过滤器的过滤地址.

doFilter中的请求与响应对象 为什么不是http的 ?

过滤器在早期设计时,不只是针对HTTP请求,针对所有协议的请求都可以进行过滤.
因为我们现在都是使用HTTP协议,所以感觉很怪异
想要操作HTTP相关的请求对象 与 响应对象 怎么办?
只需要将请求对象强制转换为HttpServletRequest 将响应对象 强制转换为HttpServletResponse 即可

过滤器链:
当多个过滤器的过滤地址重复时,就形成了过滤器链,
用户的一次请求,需要经过多次过滤放行.

过滤器链的执行顺序是:
web.xml中配置的顺序:
按照xml中配置的先后顺序来执行的, web.xml中配置代码靠前的,优先执行.

注解配置的顺序:
按照类名的自然排序执行.
注意: 注解配置的过滤器,一定执行在web.xml过滤器之后
例如:
类名Filter1 执行在类名Filter2之前.
类名Aaa 执行在 类名Aab之前

Listener监听器:
事件驱动,监听的是tomcat产生的事件:
两类事件:

  1. 生命周期相关的事件
  2. 域对象中数据的变化事件

ServletContextAttributeListener监听器:
监听Servlet上下文中数据的 增加,删除 以及修改.

HttpSessionListener:
用于监听session的创建与销毁
因为我们服务器中每一个session表示一次用户的会话
一个客户端就会创建一个单独的session. 可以将session的数量,理解为在线用户的数量.
所以我们经常在session创建与销毁的监听中, 计算当前在线的人数.

HttpSessionAttributeListener:
用于监听session中的数据增加,删除,修改