jsp学习笔记

  • Servlet不支持HTML语法,生成网页需要通过response输出流输出,导致生成页面的代码非常复杂.JSP支持HTML语法,生成HTML页面比较简单
  • JSP和Servlet的区别和关系?
    • JSP和Servle都是用来动态生成网页的
    • Servlet不支持HTML语法,生成网页麻烦
    • JSP支持HTML语法,生成网页比较简单
    • JSP运行时会被翻译成Servlet再执行.所以JSP就是Servlet

jsp脚本元素

  • JSP中的脚本元素
    • 声明
      • 代码 : <%! %>
      • 作用 : 声明的内容会被翻译成Servlet的成员变量, 方法和类 !
    • 表达式
      • 代码 : <%= %>
      • 作用 : 用于向页面输出内容,等价于out.print(). 不能在内容后面添加";"分号
    • 代码块
      • 代码 : <% %>
      • 作用 : 在其中书写任意Java代码.代码块可以和html嵌套使用

jsp注释

  • jsp注释:jsp的注释只存在于jsp的源文件里面,在翻译成servlet的时候就消失了

    <%-- 这是jsp的注释 --%>
    
  • jsp中的java注释:和java一样不解释
  • html注释:语法 :
    • 不能阻止java代码和jsp的运行

jsp指令

  • page指令

    import:用来导入包的

    contentType:相当于response.setContentType();jsp页面相依的MIME类型

    pageEncoding:设置的是保存时采用指定的字符编码集

    errorPage:指定当前的页面发生错误的时候跳转到指定的页面

    iserrorPage:设置某个页面是错误页面,设置为true以后,就可以通过exception过去错误信息

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
  • include指令(静态包含)

    file指定的是要包裹进来的文件,会生成一个java文件

    <%@ include file="index.jsp"  %>
    
  • taglib指令

    导入标签库

    uri:命名空间,prefix:命名空间的名字

    <%@ taglib url="" prefix="" %>
    

jsp内置对象

  • request

    类型:HttpServletRequest 请求对象

  • response

    类型:HttpServletResponse 响应对象

  • session

    HttpSession 回话对象

  • application

    ServletContext web应用全局唯一对象

  • config

    ServletConfig 初始化数据

  • page

    Object 当前jsp生成的servlet对象

    如果一定要使用,需要强制转换成HttpServlet对象

    Servlet有三种数据范围:request,session,servletcontext ,JSP在serlvet三种数据范围基础上,新增了page数据范围

  • pageContext

    • PageContext 当前jsp上下文
  • 可以向page范围存取数据

    • findAttribute方法会依次在page 、request 、session 、 application 四个数据范围进行数据查找.如果找到了就不会往下查找
    • 如果在EL表达式中直接使用 ${name}会调用findAttribute方法在四个范围中依次查找数据
  • 可以获得其它八个隐含对象

    • pageContext封装八个隐含对象的作用:框架编写,得到PageContext对象 相当于得到 JSP九个内置对象
  • exception

    Throwable 当页面是一个错误页面,可以获取的对象

  • out

    JspWriter 向输出流输出内容

jsp动作标签

  • jsp中6个动作标签

    :用于在page范围内查找指定名称的javaBean,如果找不到会创建一个User对象, 然后把这个对象赋值为zhangsan;

    scope:定义那一个数据范围获取一个JavaBean;

    class:全类名,包名+类名;

    id:声明的变量名;

    
    

    :用于在jsp页面中设置一个JavaBean属性 相当于调用了某属性的get方法

    name:声明的变量的名字

    value:属性值

    property:属性名

    
    

    :用于在jsp页面中获取一个JavaBean属性 相当于调用了某属性的set方法

    
    

    等价于request.getRequestDispatcher().include() 动态包含

    jsp:include和@include的区别

    • @include是JSP指令,属于静态包含.在jsp翻译为Servlet时完成包含动作,包含的内容是目标页面翻译为Servlet时的源代码,最终只会生成一个Servlet
    • jsp:include是JSP标签,属于动态包含.在servlet执行时完成包含动作,包含的内容是目标jsp翻译为Servlet生成的HTML页面,每个被包含的JSP都会生成一个单独的Servlet,所以最终会生成多个Servlet

    等价于request.getRequestDispatcher.forward()

EL表达式

  • 从数组中获取数据

    ${arr[0]}

  • 从集合中获取数据

    ${list[0]}

  • 从map集合中获取数据

    1. ${map["key"]} 得的值是value
    2. ${map.key} 得的值是value
  • empty运算符

    可以用来判断一个对象是否为null,还可以判断是否为空

    ${empty list} //当list为null或size为0的时候,得出的结果都是true

  • 三元运算符

    ${list == null ? " ": " "}

EL内置对象的使用

  • 获取四个数据范围中的数据
    • pageScope
    • requestScope
    • sessionScope
    • applicationScope
  • pageContext : 代表当前jsp上下文.通过该对象可以获取当前应用的路径${pageContext.request.contextPath },等价于<%=request.getContextPath() %>
  • ${param.name} 等价于 request.getParameter("name")
  • ${paramValues.hobby} 等价于 request.getParameterValues("hobby")
  • ${header.referer} 等价于 request.getHeader("referer")
  • ${headerValues["Accept-Encoding"]} 等价于 request.getHeaders("Accept-Encoding")
  • ${initParam.name} 等价于 getServletContext().getInitParamter("name")
  • cookie隐含对象写法
    • ${cookie.address.value } : 等于从所有Cookie中找出name为address的Cookie,并将其中的值取出来JSTL标签库

核心标签库:

  • c:set

    • 保存数据到四个数据范围
    <%
      session.setAttribute("address","shenzhen");
    %>
    
    
    
    
    • 修改四个数据范围中已存在对象的属性值
    <%
      User user = new User();
      user.setAge(16);
      pageContext.setAttribute("usr",user);
    %>
    
    
    
  • c:if

    • 取代页面if条件判断
    <%
      int a= 8;
    %>
    
    
      a是大于10的
    
    
    
    
      a是小于10的
    
    
    ${result}
    
  • c:foreach

    • 遍历数组和集合
    <%
      pageContext.setAttribute("arr",new int[]{1,2,3});
    %>
    
    
    
      ${a}
    
    
    • 遍历map
    <%
      Map map = new HashMap();
      map.put("a","aaa");
      map.put("b","bbb");
      map.put("c","ccc");
      pageContext.setAttribute("map",map)
    %>
    
    
      ${m.key}==>${m.value}
    
    
    • foreach特殊的用法
    
    
    
    
    
    
    
    
      
    
    
    ${result}
    
  • c:redirect

    
    
    

你可能感兴趣的:(jsp学习笔记)