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>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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