JSP 相关

引入

  1. jsp文件相对路径引用
    // 例如访问:http://localhost:8080/user/users
    //  引用到:http://localhost:8080/user/js/layui/layui.js
    <script src="../js/layui/layui.js"></script>
  1. web工程的相对路径
    // 例如访问:http://localhost:8080/user/users
    //  引用到:http://localhost:8080/user/users/js/layui/layui.js
    <script src="js/layui/layui.js"></script>
  1. web工程的绝对路径
    // 例如访问:http://localhost:8080/user/users
    //  引用到:http://localhost:8080/js/layui/layui.js
    <script src="/js/layui/layui.js"></script>

jsp指令

page指令

定义网页依赖属性,比如脚本语言、error页面、缓存需求等等

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

属性:

属性 描述 header
buffer 指定out对象使用缓冲区的大小
autoFlush 控制out对象的 缓存区
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends 指定servlet从哪一个类继承
import 导入要使用的Java类
info 定义JSP页面的描述信息
isThreadSafe 指定对JSP页面的访问是否为线程安全
language 定义JSP页面所用的脚本语言,默认是Java
session 指定JSP页面是否使用session
isELIgnored 指定是否执行EL表达式
isScriptingEnabled 确定脚本元素能否被使用

taglib指令

引入标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix='fmt' %>  

include指令

包含其他jsp页面

index.jsp包含foot.jsp页面

<body>
      <%@include file="common/foot.jsp" %>
</body>

foot.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div class="layui-footer">
    <!-- 底部固定区域 -->
    © layui.com - 底部固定区域
</div>

jsp动作元素

隐式对象

jsp九个隐式对象

对象 描述
request HttpServletRequest 接口的实例
response HttpServletResponse 接口的实例
out JspWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

作用域

对象 作用域
pageContext 当前页面
request 一次请求
session 当前会话
application 全局,所有用户共享

jsp执行过程

  1. 浏览器访问jsp页面,tomcat将jsp翻译成java源文件(hello_jsp.java)
  2. tomcat将字节码翻译成class字节码文件(hello_jsp.class)
  3. tomcat构造生成的类对象(hello_jsp对象)
  4. 调用类对象中方法
    再次访问就直接调用方法,无需构造类对象

work目录: 存放jsp运行时的临时文件

jsp中嵌入java源码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div class="layui-footer">
    <%
       java代码
    %>
</div>

服务端跳转

  <jsp:forward page="path"/>

客户端跳转

  <%response.sendRedirect("path");%>

自定义标签

导包

    <!-- jsp自定义标签 -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
    </dependency>

定义标签类

  • 继承OutSupport类
  • 重写doStartTag方法
  • 页面属性需要类中相应成员及setter方法
  • setter中处理el表达式
public class MyTag extends OutSupport {
    // 页面标签中的属性,必须包含set方法
    private String number;

    public void setNumber(String number) throws JspException {
        // 对el表达式的处理
        Object num = ExpressionEvaluatorManager.evaluate("number", number.toString(), Object.class, this, pageContext);
        String number1 = (String) num;
        StringBuffer buffer = new StringBuffer(number1);
        int length = buffer.length();
        // 每隔4位数字插入一个空格
        for (int cnt = 4;cnt < length;cnt+=4){
            buffer.insert(cnt, ' ');
            cnt++; //插入空格时,需要偏移一位
            length++; //插入时长度也会改变
        }
        this.number = buffer.toString();
    }

    StringWriter sw = new StringWriter();

    @Override
    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.write(number);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SKIP_BODY;
    }
}

tld文件

  • 文件位置在WEB-INF中,需要在jsp页面中引用
属性 描述
name 定义属性的名称。每个标签的是属性名称必须是唯一的
required 指定属性是否是必须的或者可选的,如果设置为false为可选。
rtexprvalue 声明在运行表达式时,标签属性是否有效。
type 定义该属性的Java类类型 。默认指定为 String
description 描述信息
fragment 如果声明了该属性,属性值将被视为一个 JspFragment。
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>Example TLD</short-name>
    <tag>
        <name>Hello</name>
        <tag-class>com.hd.tag.MyTag</tag-class>
        <attribute>
            <name>number</name>
            <!--定义此属性必须存在-->
            <required>true</required>
            <!--EL表达式支持-->
            <rtexprvalue>true</rtexprvalue>
            <!--类型,默认String-->
            <type>java.lang.String</type>
            <!--说明-->
            <description>This is number attribute.</description>
        </attribute>
        <body-content>empty</body-content>
    </tag>
</taglib>

jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%--引用WEB-INF下custom.tld标签,前缀xyg--%>
<%@ taglib uri="/WEB-INF/custom.tld" prefix="xyg"%>
<html>
<head>
    <title>VMDS</title>
</head>
<body>
<%--在标签中name属性为Hello的类作为处理--%>
<xyg:Hello number="${num}"></xyg:Hello>
</body>
</html>

JSTL

引入

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

设值

  <c:set var="" value="" scope="作用域"/>

输出

  <c:out value=""/>

删除

  <c:remove var="" scope="作用域">

判断

<c:if test="逻辑表达式"></c:if>

<!-- var: 保存var表达式结果的值-->
<!-- socope:指定var作用域 -->
<c:if test="${!empty sessionScope.param2}" var="result" scope="page">
	<div style="color:red;">in session: ${sessionScope.param2 } </div>
</c:if>

循环

<c:forEach items="es" var="e" varStatus="status">	
</c:forEach>

status.index行数0开始
status.count行数1开始

字符串拆分

<!-- 字符串拆分 -->
<c:set var="str" value="page|requst|session" ></c:set>
<!-- !!var标签使用param会导致取不出值 -->
<c:forTokens items="${str}" delims="|;" var="p">
	<p style="color:green;"><c:out value="${p}"></c:out></p>
</c:forTokens>

choose/when/otherwise

<c:set var="varTemp" value="5" ></c:set>
<c:choose>
<c:when test="${varTemp==1 }">
varTemp is 1
</c:when>
<c:when test="${varTemp==2 }">
varTemp is 2
</c:when>
<c:otherwise>
varTemp is ${varTemp }
</c:otherwise>
</c:choose>

格式化

引入

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix='fmt' %>  

格式化日期

<%
  Date now = new Date();
  pageContext.setAttribute("now", now);
%>
<fmt:formatDate value="${now}" pattern="yyyy年MM月dd日 HH时mm分ss秒"/>

处理字符串

${fn:length()}
${fn:join()}
posted @ 2020-10-25 11:33  熊云港  阅读(129)  评论(0编辑  收藏  举报