Loading

jsp笔记

1、java脚本

<%=...%>: java表达式,用于输出一条表达式(或变量)的结果

<%--...--%>: 注释,不会发送到客户端

<%!...%>: 声明,用来创建类的成员变量和成员方法

<%...%>: java代码片段,用于输出java语句

九个内置对象

  • out: jsp的输出流,用来向客户端响应(等同于response.getWriter())
  • page: 当前jsp对象! 它的引用类型是Object,即真身中有如下代码:Object page = this;
  • config: ServletConfig对象!
  • pageContext: 一个顶9个!域对象
  • request: HttpServletEequest对象
  • response: HttpServletResponse对象
  • exception: Throwable对象
  • session: HttpSession对象
  • application: ServletContext对象
  • pageContext
    • Servlet中有三大域,而JSP中有四大域,它就是最后一个域对象!  
      • ServletContext:整个应用程序    
      • session:整个会话(一个会话中只有一个用户)    
      • request:一个请求链!    
    • pageContext:一个jsp页面!(通常在使用el的时候使用此对象)这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据!  
    • 域对象  
      • 代理其他域:pageContext.setAttribute("xxx", "XXX", PageContext.SESSION_SCOPE);    
      • 全域查找:pageContext.findAttribute("xxx");从小到大,依赖查找!    
      • 获取其他8个内置对象:    

2、jsp三指令

  • page: 比较复杂:<%@page language="java" info="xxx"...%>
    • pageEncoding和contentType:(不设置,默认编码为iso)  
      • pageEncoding:设置响应头,(直接指定编码,默认MIME类型)等同与response.setContentType("text/html;charset=utf-8");    
      • contentType:添加一个响应头:Content-Type!(可以指定其他文本编码)等同与response.setContentType("text/html;charset=utf-8");    
    • import:导包!可以出现多次  
    • errorPage和isErrorPage  
      • errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定    
      • isErrorPage:它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!而且这个页面可以使用9大内置对象中的exception!    
    • autoFlush和buffer  
      • autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新!默认为true,如果为false,那么在缓冲区满时抛出异常!    
      • buffer:指定缓冲区大小,默认为8kb,通常不需要修改!    
    • isELIgnored:是否忽略el表达式,默认值为false,不忽略,即支持!  
  • include:静态包含
    • 将另一个jsp文件搬过来  
    • <%@include%> 它是在jsp编译成java文件时完成的!他们共同生成一个java(就是一个servlet)文件,然后再生成一个class!  
    • 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。  
  • taglib:
    • 两个属性:  
      • prefix:指定标签库在本页面中的前缀!由我们自己来起名称!    
      • uri: 指定标签库的位置!    
      • <%@taglib prefix="s" uri="/struts-tags"%> 前缀的用法<s:text>    

3、JSP动作标签
这些jsp的动作标签,与html提供的标签有本质的区别。
动作标签是由tomcat(服务器)来解释执行!它与java代码一样,都是在服务器端执行的!
html由浏览器来执行!

  • <jsp:forward>:转发!它与RequestDispatcher的forward方法是一样的,一个是在Servlet中使用,一个是在jsp中使用!
  • <jsp:include>:包含:它与RequestDispatcher的include方法是一样的,一个是在Servlet中使用,一个是在jsp中使用!
  • <jsp:param>:它用来作为forward和include的子标签!用来给转发或包含的页面传递参数!

4、EL表达式(在页面中使用)
EL替代的是<%= ... %>,也就是说,EL只能做输出!
EL表达式读取数据

  • EL表达式只能读取四大域的对象(pageContext,request,sission,application)
  • 若对象为空,不显示也不报错
  • ${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。
  • ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!
  • ${xxx.name}、${xxx['name'} 调用xxx对象的getname()方法
  • ${xxx[0]} 访问数组或List(不能访问Set,因为Set无序,没有索引)
  • ${xxx.student.name} 访问Map,student为键,访问Map中的student的name
  • ${empty name}: name为未定义变量、null、空字符串、没有元素的数组后List,返回true

EL可以输出的东西都在11个内置对象中

  • 11个内置对象,其中10个是Map! pageContext 不是map,它就是 PageContext 类型
  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • param: 对应参数,它是一个Map,其中key参数名,value是参数值,适用于单值的参数。底层调用request.getParameter();
  • paramValues: 对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。返回的是数组。底层调用request.getParameterValues();
  • initParam: 获取<context-param>内的参数!底层调用servletContext.getInitParameter();
  • header: 对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头
  • headerValues: 对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头
  • cookie
  • pageContext: 它是PageContext类型!项目名: ${pageContext.request.contextPath}

EL函数库(由JSTL提供的)

  • 导入函数库:<%@ tablib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
  • String toUpperCase(String input):把参数转换成大写
  • String toLowerCase(String input):把参数转换成小写
  • int indexOf(String input, String substring):从大串,输出小串的位置!
  • boolean contains(String input, String substring):查看大串中是否包含小串
  • boolean containsIgnoreCase(String input, String substring):忽略大小写的,是否包含
  • boolean startsWith(String input, String substring):是否以小串为前缀
  • boolean endsWith(String input, String substring):是否以小串为后缀
  • String substring(String input, int beginIndex, int endIndex):截取子串(前闭后开)
  • String substringAfter(String input, String substring):获取大串中,小串所在位置后面的字符串
  • substringBefore(String input, String substring):获取大串中,小串所在位置前面的字符串
  • String escapeXml(String input):把input中“<”、">"、"&"、"'"、""",进行转义
  • String trim(String input):去除前后空格
  • String replace(String input, String substringBefore, String substringAfter):替换
  • String[] split(String input, String delimiters):分割字符串,得到字符串数组
  • int length(Object obj):可以获取字符串、数组、各种集合的长度!
  • String join(String array[], String separator):联合字符串数组!

自定义函数库

  • 写一个java类,类中可以定义0~N个方法,但必须是static,而且有返回值的!
  • 在WEB-INF目录下创建一个tld文件
    • 文件约束可以参考 jsp2-example-taglib.tld 文件  
    • 也可以参考 jsp2.tld笔记.txt  
  • 在jsp页面中导入函数库
  • <%@ taglib uri="<uri>" prefix="<tlib-version>" %>
  • 在jsp页面中使用自定义的函数:${<short-name>:<name>() }

5、自定义标签
自定义标签:

  • 自定义java类,继承SimpleTag接口,或继承其实现类SimpleTagSupport,重写doTag()方法,需要在tld文件中声明
    • SimpleTagSupport  
      • public void doTag(): 子类重写该方法,实现对标签的操作    
      • protected JspContext getJspContext(): 获取PageContext对象    
      • protected JspFragment getJspBody(): 获取标签体    
        • JspFragment:      
          • public abstract void invoke(java.io.Writer out): 输出到指定输出流(如果给的是null,则默认PageContext.getOut()流)        
          • 可以将其输出到StringWriter流中,然后调用StringWriter.toString()方法得到字符串        
    • 标签的属性反映到标签处理器中就是一个变量,为变量添加setxxx()方法即可得到属性值    

核心标签库(由JSTL提供的)

  • 导入标签库: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  • <c:set>: 存储变量
    • 属性:  
      • var: 变量名    
      • property:要修改的变量名    
      • value: 变量值    
      • target:修改的属性所属的对象    
      • scope: 指定存放的域(默认pageContext)    
  • <c:out>:输出
    • 属性:  
      • value:要输出的内容    
      • default:输出的默认值    
      • escapeXml:是否忽略XML特殊字符(默认true)    
  • <c:remove>:删除变量
    • 属性:  
      • var: 变量名    
      • scope: 变量所属的域(默认所有域)    
      • scope: 指定域(默认删除所有域)    
  • <c:url>:将URL格式化为一个字符串,然后存储在一个变量中
    • 属性:  
      • value:指定路径(以'/'开头会自动添加项目名)    
      • var:变量名(指定后就不会输出到页面,而是保存到变量中)    
    • 子标签  
      • <c:param>:给url添加参数    
        • 属性:      
          • name:参数名        
          • value:参数值        
  • <c:catch>:标签体中若发生异常,则将错误信息保存到标签属性var中
  • <c:if>:判断表达式的值,如果表达式的值为真则执行
    • 属性:  
      • test:条件    
      • var:用于存储条件结果的变量    
      • scope:var属性的作用域    
  • <c:choose>:与if()else if()else语句的功能一样(无属性)
    • 子标签:  
      • <c:when>:与else if语句一样(属性:test 条件)    
      • <c:otherwise>:与else语句一样(无属性)    
  • <c:forEach>:迭代一个集合、数组中的对象。
    • 在标签体中对var对象进行操作,var要用el表达式取出  
    • 属性:  
      • items:要被循环的信息    
      • begin:开始的元素    
      • end:最后一个元素    
      • step:每一次迭代的步长    
      • var:代表当前条目的变量名称    
      • varStatus:代表循环状态的变量名称    
        • 属性:      
          • count: 当前已遍历元素个数        
          • index: 当前元素下标        
          • first: 是否为第一个元素        
          • last:是否为最后一个元素        
          • current: Object,表示循环的变量        
  • <c:forEach var="i" begin="1" end="10"></c:forEach>其等同于for(int i = 1; i <= 10; i++);
  • <c:forEach items="${strs }" var="str"></c:forEach>等同于for(Object str : strs){}

格式化标签库:(由JSTL提供的)

  • 导入标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
  • <fmt:formatDate>:使用不同的方式格式化日期
    • 属性:  
      • value: 要显示的日期    
      • pattern: 自定义格式模式(yyy-MMM-dd)    
      • var: 存储格式化日期的变量名(默认显示在页面)    
      • scope: 存储变量的域    
  • <fmt:parseDate>:将字符串解析成日期
    • 属性:  
      • value:要显示的日期    
      • pattern:自定义格式模式    
      • var: 存储格式化日期的变量名(默认显示在页面)    
      • scope: 存储变量的域    
  • <fmt:formatNumber>:用于格式化数字、百分比、货币
    • 属性:  
      • value:要显示的数字    
      • pattern: 自定义格式    
      • groupingUsed:是否对数字分组(TRUE或FALSE)    
      • maxIntegerDigits:整型数最大的位数    
      • minIntegerDigits:整型数最小的位数    
      • maxFractionDigits:小数点后最大的位数    
      • minFractionDigits:小数点后最小的位数    
      • var: 存储格式化数字的变量    
      • scope: var属性的作用域    
  • <fmt:parseNumber>: 用来解析数字、百分数、货币
    • 属性:  
      • value:要解析的数字    
      • type: 类型(NUMBER(默认)、CURRENCY、PERCENT)    
      • integerOnly: 是否只解析整型数(true)或浮点数(false)    

JSTL标签库 函数引入
以下任选一种即可:
(1)将 Tomcat\webapps\examples\WEB-INF\lib目录下的jar包复制到项目的\WEB-INF\lib目录下
(2)下载jakarta-taglibs-standard-1.1.2.zip 包并解压,
将jakarta-taglibs-standard-1.1.2/lib/下的两个jar文件:
standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下
(3)下载tomcat的Taglibs,将/lib下的文其拷贝到/WEB-INF/lib/下





























posted @ 2019-01-10 14:27  烟草的香味  阅读(335)  评论(0编辑  收藏  举报