zoukankan      html  css  js  c++  java
  • 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()}
    
  • 相关阅读:
    C# httpclient获取cookies实现模拟web登录
    C# httpclient获取cookies实现模拟web登录
    长连接与短连接的区别以及使用场景
    长连接与短连接的区别以及使用场景
    vuejs项目性能优化总结
    vuejs项目性能优化总结
    C# 发送HTTP请求(可加入Cookies)
    C# 发送HTTP请求(可加入Cookies)
    集合框架系列教材 (十六)- 其他
    集合框架系列教材 (十五)- 关系与区别
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/13872689.html
Copyright © 2011-2022 走看看