jsp

JSP

一. 什么是JSP

​ JSP全称Java Server Page(Java服务端页面),通俗上来讲就是可以编写Java代码的HTML页面。在最早期是没有JSP的,那么后端开发人员想要展示一个网页,就是在Servlet中 拼接html. 于是就有了JSP, 但是JSP不是一门新的技术,他的本质上还是Servlet, 意思是服务器还是会将 JSP 转成Java代码,在Java代码中,还是去拼接的页面。

​ 案例:1. 在页面输出3个“你好”.

​ 2.在页面展示一个4行5列的表格,表格中的数据从1到20.

jsp的执行流程

二. JSP语法分类

2.1 编译指令

页指令

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

contentType:内容类型;

language: 页面的语言

import: java.lang.❄ 、javax.servlet.❄、javax.servlet.jsp.❄、javax.servlet.http.*四个包不需要显式的导入。

包含指令

<%@ include file=”” %>

用法是在file中书写另外一个jsp页面,该指令是一个编译期的行为。

标签库指令

<%@ taglib %>

注意:标签库指令是讲到jstl的时候会用到。

2.2 脚本语法

html注释

<!-- -->

隐藏注释

<%-- --%>

隐藏注释,在前端页面通过查看页面源代码的方式是无法查看到的。

脚本段

<%  %>

脚本端中就是书写Java代码的,如下图所示:

JSP声明

<%! int a = 3 %>

​ 可以透过JSP所生成的Java代码看出,通过jsp的声明的变量为一个成员变量。而普通的声明方式生成的Java代码可以看出是以及局部变量。

表达式

<%=a %>

使用jsp表达式,会将值直接输出到html页面中。

2.3 动作指令或者标准动作

jsp:include

<jsp:include page=""></jsp:include>

include的动作指令与编译指令,最大的区别在于动作指令是一个运行期的行为,就在在代码的运行阶段才会将页面拼接到一起,而include的编译指令是一个编译期的行为,即页面是在编译阶段就已经合并到一起了。

jsp:forward与jsp:param

<jsp:forward page="forwarded.jsp">
      <jsp:param name="username" value="zhangsan"/>
</jsp:forward>

​ jsp:forward指令的意思是直接跳转到page对应的页面,可以通过 jsp:param携带参数。而到被跳转的页面可以直接通过 request(jsp内置对象) 来获取参数的值,获取的方式如下:

<%
    String name = request.getParameter("username");
%>
<%=name %>

jsp:useBean、jsp:setProperty、jsp:getProperty

<%-- 相当于实例化了一个对象:User user = new User() --%>
<jsp:useBean id="user" class="com.qf.domain.User"/>

<%-- 相当于 user.setUsername("张三") --%>
<jsp:setProperty name="user" property="username" value="张三"></jsp:setProperty>

<%-- 相当于 user.getUsername() --%>
<jsp:getProperty name="user" property="username"/>

三. jsp九大内置对象

​ 所谓的内置对象的意思就是可以直接使用,而不需要实例化。

​ 最常用的主要有三个 request、session、application. 其他的不用了解。

四. EL与JSTL

4.1 EL

El(Expression Language),全称表达式语言,目的是尽量的消除JSP页面中的java代码,使用方式如下:

${param.username}              # 相当于request.getParameter(“”)
${sessionScope.name}           # session.getAttribute(“name”)
${applicationScope.name}       # application.getAttribute(“name”);
${requestScope.name}           # request.getAttribute(“name”)
${3 + 4}  
${7 * 8}  
${8 / 7}
${sessionScope.user.name}     # 获取session中user的name属性
${user.name}                  # 会按照request -> session -> application的顺序查找
{empty requestScope.gender}   #判断一个数据是否为null, 或者一个字符串为空或""
${empty requestScope.gender ? "默认值" : requestScope.gender}  
5 > 3: ${5 > 3} <br>
5 > 3: ${5 gt 3} <br>  <%-- greater than --%>
14 < 3: ${14 < 3} <br>
14 < 3: ${14 lt 3} <br>  <%-- less than --%>
14 >= 3: ${14 ge 3} <br>  <%-- greater to equals --%>
14 <= 3: ${14 le 3} <br>  <%-- less to equals --%>
14 == 3: ${14 eq 3} <br>  <%-- equals --%>

4.2 JSTL

​ JSTL(jsp standard tag library)全称为"标准标签库",使用一套标准的标签库,来极大的简化代码的编写,必须要配置EL来使用,使用步骤如下:

​ 1) 引入javax.servlet.jsp.jstl.jar和jstl-impl.jar两个jar包

  1. 在jsp页面的头顶加上标准标签库指令:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
4.2.1 if语法

一个条件

<c:if test="${requestScope.age gt 18}">
        成年人.
</c:if>

多个条件

<c:if test="${empty requestScope.gender && requestScope.age gt 18}">
        性别为空,并且是成年人.
</c:if>
4.2.2 choose..when..otherwise
<c:choose>
    <c:when test="${requestScope.age > 40}">
        中年人
    </c:when>
    <c:when test="${requestScope.age > 30}">
        壮年
    </c:when>
    <c:when test="${requestScope.age > 18}">
        成年人.
    </c:when>
    <c:otherwise>  <!-- 否则 -->
        小青年
    </c:otherwise>
</c:choose>
4.2.3 foreach
<%--
    begin是开始的值;
    end是结束;
    var是定义的变量名.
    step是步进的意思,就是每次加多少
--%>
<c:forEach var="i" step="10" begin="50" end="100">
    ${i}
</c:forEach>
<!-- 代码可以转换为如下形式 -->
 <%--
        for(int i = 50; i <= 100; i+=10) {

        }
--%>
<!-- items: 取出集合数据
         var : 遍历的时候的变量名
         varStatus: 变量的状态,用的不多:
            first: 是否为第一条数据
            last:  是否为最后一条数据
            index:  数据的索引
            count: 第几条数据
        for(User u : userList) {

        }
-->
<f:forEach items="${requestScope.userList}" var="u" varStatus="status">
        <!-- u.id 在底层还是通过 u.getId来取的数据 -->
        ${u.id} -- ${u.name} -- ${u.gender == 'F' ? '女' : '男'}
        -- ${status.first} -- ${status.last} -- ${status.index} -- ${status.count} <br>
</f:forEach>

附录:

jsp的<%@ include file="" %> 通常是包含 jsp页面,但是一定要包含html页面的话,那么会产生乱码问题,可以使用如下方式来解决,在web.xml文件中添加如下内容:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.html</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,442评论 0 13
  • Part 1 @Description:Report of Servlet Basic, Part 1 @Date...
    susu2016阅读 638评论 0 3
  • 一、JSP基础 1.1什么是JSP JSP(Java ServerPage)是Java服务器端动态页面技术。是su...
    晨星资源阅读 1,147评论 0 6
  • (一)JSP的回顾 一、什么是JSP JSP:JavaServerPages(Java服务器端页面) JS...
    Y_f1c8阅读 354评论 0 0
  • 一、jsp介绍 jsp作用jsp全称java server pages(java服务器页面),本质是一个servl...
    圣贤与无赖阅读 1,248评论 0 14