• Java开发系列-JSP


    概述

    JSP是java 服务器页面,它运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.

    JSP主要作用是将内容的生成与页面相分离。

    JSP脚本

    JSP脚本就是在JSP编写Java代码。常见的三种脚本

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<%
    		/* Java代码 */
    		System.out.print("JSP脚本");
    		int i = 10;
    	%>
    	
    	<!-- 转变成Servlet的代码
    	/* Java代码 */
    	System.out.print("JSP脚本");
    	int i = 10; -->
    	
    	
    	<%=
    		/* 后面不要添加封号 */
    		i
    	%>
    	
    	<!-- 转变成Servlet的代码
    	 out.print(i); -->
    	 
    	
    	<%! 
    		/* 声明成员 */
    		String name = "jake";
    	%>
    	
    	<!-- 转变成Servlet的代码
    	public final class Hello_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent {
    
    		/* 声明成员 */
    		String name = "jake";
    	} -->
    

    El表达式达式语言

    从jsp2.0开始,jsp的内置表达式语言,用来替代<%=..%>。常见的用法: 获取域中数据、执行运算、获取常见的web对象、调用java的方法。格式:${el表达式}

    获取简单数据

    格式:${pageScope | requestScope | sessionScope | applicationScope.属性名}
    开发经常简写:
    ${属性名}:依次从pageContext,request,session,application查找指定属性,若查找到返回值,结束该次查找
    若查找不到,返回""

    获取容器数据

    • 获取数组中的数据
      • ${域中的名称[index]}
    • 获取list中的数据
      • ${域中的名称[index]}
    • 获取map中的数据
      • ${域中的名称.键名}

    JavaBean导航

    首先javabean规范:
    1. 必须是一个公共的具体的类 public class
    2. 提供私有的字段 private String id;//id称之为字
    3. 提供公共访问字段的方法 get|set|is方法
    4. 提供一个无参的构造器
    5. 一般实现序列化接口 serializable

    获取JavaBean数据的el格式: ${域中javabean名称.bean属性}

    El内置对象

    JSP共有9大内置对象,对应的数据类型如下:

    JSP内置对象 类型
    out JspWriter
    request HttpServletRequest
    response HttpServletResponse
    session HttpSession
    exception Throwable
    page Servlet(this)
    config ServletConfig
    application ServletContext
    pageContext PageContext

    其中有application、session、request、pageContext域对象的生命周期为:整个项目、一次会话、一次请求、一个页面。
    pageContext作用可以操作其它域对象与获取其它内置对象

    <%
    // 操作其它内置域对象
    /* request.setAttribute("username", "jake"); */
    pageContext.setAttribute("rKey", "rValue", pageContext.REQUEST_SCOPE);
    
    // 获取其内置对象
    pageContext.getRequest();
    pageContext.getResponse();
    %>
    

    JSP动作标签

    请求转发

    <!-- 请求转发 age="内部路径" -->
    <jsp:forward page="/index.jsp"></jsp:forward>
    

    注意:请求转发输入的路径是内部路径。

    动态包含

    动态包含:将被包含页面或者servlet的运行结果包含到当前页面中.

    <jsp:include page="内部路径"></jsp:include>
    

    JSP指令

    JSP指令主要是用来声明jsp页面的一些属性和动作。格式:<%@指令名称 属性="值" 属性="值"%>。JSP指令主要分为三大类

    • page:主要声明jsp页面的一些属性
    • include:静态包含.
    • taglib:导入标签库
      注意:指令可以放在任意位置,一般都放在jsp页面最上面.

    page


    其中创建的属性:

    • contentType
      • 设置响应流的编码,及通知浏览器用什么编码打开.设置文件的mimetype
    • pageEncoding
      • 设置页面的编码
    • 导入所需要的包
    • contentType和pageEncoding联系:
      • 若两者都出现的时候,各自使用各自的编码
      • 若只出现一者,两个都使用出现的这个编码
      • 若两者都不出现,使用服务器默认的编码 tomcat7使用的iso-8859-1

    page属性

    language:当前jsp页面里面可以嵌套的语言
    buffer:设置jsp页面的流的缓冲区的大小
    autoFlush:是否自动刷新
    extends:声明当前jsp的页面继承于那个类.必须继承的是httpservlet 及其子类
    session:设置jsp页面是否可以使用session内置对象
    isELIgnored:是否忽略el表达式
    errorPage:当前jsp页面出现异常的时候要跳转到的jsp页面
    isErrorPage:当前jsp页面是否是一个错误页面
    	若值为true,可以使用jsp页面的一个内置对象 exception
    

    include指令

    静态包含,就是将其他页面或者servlet的内容包含进来,一起进行编译运行.生成一个java文件.
    格式:<%@include file="相对路径或者是内部路径" %>

    taglib指令

    taglib指令用于导入标签库。
    格式:<%@taglib prefix="前缀名" uri="名称空间" %>

    jstl

    jsp标准的标签库语言,apache的用来替代java脚本。通常我们是使用其中的核心类库core。
    在使用需要先导入jar包(jstl.jar和standard.jar)。其次在导入标签库

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

    c:if

    格式:<c:if test="${el表达式}">满足的时候输出的内容</c:if>

    <c:if test="${3>4 }">
    		3>4;
    	</c:if>
    	
    	<c:if test="${3<4 }">
    		3<4;
    	</c:if>
    

    c:forEach

    <c:forEach begin="1" end="10" step="1" var="i">
    		${i }
    	</c:forEach>
    
    	<c:forEach begin="1" end="10" step="1" var="i" varStatus="vs">
    		<!-- 记录循环的次数 -->
    		${vs.count }
    		<!-- 当前遍历的内容 -->
    		${vs.current }
    	</c:forEach>
    
    	<%
    		// List
    		ArrayList list = new ArrayList();
    		list.add("jake");
    		list.add("rose");
    		list.add("jerry");
    		request.setAttribute("list", list);
    	%>
    	<c:forEach items="${requestScope.list }" var="i">
    		${i }
    	</c:forEach>
    
  • 相关阅读:
    无线渗透开启WPS功能的路由器
    写代码怎能不会这些Linux命令?
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
    Innodb 中的事务隔离级别和锁的关系
    线上操作与线上问题排查实战
    MySQL 四种事务隔离级的说明
    一次由于 MTU 设置不当导致的网络访问超时
    SYN 和 RTO
    The story of one latency spike
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9484842.html
Copyright © 2020-2023  润新知