关于 JSP 的极简入门

    技术2022-07-10  100

    JSP 是什么

    全称: java server page , java 服务器的页面。

    本质上还是一个 servlet。这里就看看他的原理部分,是怎么运作的:

    浏览器请求一个 .jsp 的页面时,

    服务器这边,会将 .jsp 文件,编译成 .java 文件和 .class 文件。

    然后就可以 .class 文件被虚拟机加载就可以用了。

    比如:

    在 idea 里实验 out 文件夹找不到输入文件,

    在 tomcat 的安装目录试就行了,webapps 目录下,一个文件夹,就是一个新项目,

    然后去 work 文件夹里找工作产生的文件

    那些网页显示的静态画面,就是通过 out 对象,输出出来。

    JSP 的书写格式

    <%-- 声明标签 <%!变量或者方法声明%> --%> <%-- 表达式标签 <%= 表达式%> 在页面上显示的效果 --%> <%-- 程序代码标签 <%java代码%> 页面上动态展示内容 --%> <%! String str = "test 中文";%> str = <%= str + " appendStr"%> <% request.setAttribute("request-key", "req-value"); %> <!-- 可写 html 的注释,查看源码时可见 --> <%-- 可写 jsp 的注释, 查看源码时不可见 --%>

    9 大内置对象

    jsp 里不需要导包,直接拿来就可以用的对象。

    request、resposne、session、application、pageContext、page、config、out、exception

    看个图,看看他们都是怎么赋值的:

    常用的也就那么几个,注意他们的作用域范围:

    request : 只针对单个请求有效。

    session : 为每个用户创建一个 session, 针对用户有效。

    application : 保存在 服务器端 的信息。 可以做有多少访客这个功能。

    pageContext : 对当前页面有效。

    理解下 page、exception 对象,虽然不怎么用。。

    page 就是指当前的 jsp, 类似于 java 里的 this 指针。

    exception : 需要和 @page 指令里的 isErrorPage = “true”, errorPage=“xxx.jsp” 结合使用。

    比如:

    index.jsp 里的 @page 指令内容:

    <%@ page pageEncoding="utf-8" errorPage="error.jsp" contentType="text/html;charset=UTF-8" l anguage="java" %>

    在 error.jsp 里的 @page 指令内容:

    <%@ page language="java" isErrorPage="true" import="java.util.*" pageEncoding="UTF-8"%>

    然后就可以在 error.jsp 使用 exception 对象了。。。 但也没什么用,一般就 getMessage() 一下。。。

    3 大指令

    page 指令。

    定义一些关于页面的属性。

    比如:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.util.ArrayList" %>

    include 指令

    主要就是在 jsp 页面,引入另外的页面来用。

    比如:

    <%@ include file="bottom.jsp" %> <!-- 写在 body 里面的 -->

    taglib 指令。

    主要配和 jstl (需要用相应的 2 个 jar 包)来使用,配置一些相关定义。

    比如:

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

    EL 表达式

    全称: expression language , 表达式语言。

    之前在 jstl 中, 在 JSP2.0 中, 从 jstl 抽取出来了,放在 JSP 的规范里。

    主要式用来显示动态数据的。 格式 : ${ 要显示的变量名 } , 这样比 使用 <%= %> 简洁、方便很多。

    注意: EL 是用来获取数据的,前提是要有数据。 没有数据可以先在相应的作用域 setAttribute( ) 存储下。

    如果作用域里有相同的 key 名时,

    比如:

    <% request.setAttribute("key", "req-value"); session.setAttribute("key", "session-value"); application.setAttribute("key", "application-value"); pageContext.setAttribute("key", "pageContext-value"); %> ${key}

    这样在获取 key 的值时, 查找的顺序是: page、request、session、application。

    JSTL

    全称:Java server pages standarded tag library, jsp 的标准标签库。

    一般比较常用的就是 核心标签 : <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>, 这里 prefix 前缀取得名字可以随便写,之后的代码里也相应的变一下就好了,但一般都是取 c 这个前缀。

    core 核心标签,主要有:

    表达式操作 out、set、remove、catch流程控制 if、choose、when、otherwise迭代操作 forEach、forTokensURL操作 import、param、url、redirectSet标签 <c:set> 主要用来将变量存储至JSP范围中 或是JavaBean的属性或Map对象中

    示例: 常用的还是 if、forEach 标签。。。

    <body> <h1>before delete ...</h1> <c:set value="c-set-value" var="str" scope="request"></c:set> str --> ${str} <br> str --> <c:out value="${str}"></c:out> <c:remove var="str" scope="request"></c:remove> <h1>after delete ...</h1> str --> ${str} <br> str --> <c:out value="${str}"></c:out> <hr> <h1>if...</h1> <c:set var="age" value="23" scope="request"></c:set> <c:if test="${age>18 && age <30}"> 青年。。。 </c:if> <h1>choose...</h1> <c:choose> <c:when test="${age<18}"> 未成年。。。 </c:when> <c:when test="${age<30}"> 青年人。。。 </c:when> <c:otherwise> 其他情况。。。 </c:otherwise> </c:choose> <hr> <h1>list</h1> <% ArrayList arrayList = new ArrayList(); arrayList.add("this is a list..."); arrayList.add(100); arrayList.add(new Object()); request.setAttribute("list", arrayList); %> <c:forEach items="${list}" var="element" varStatus="sta"> varStatus -- > ${sta}<br> varStatus.count -- > ${sta.count}<br> varStatus.index -- > ${sta.index}<br> element -- > ${element}<br> </c:forEach> </body>
    Processed: 0.013, SQL: 9