JSP详解

文章目录

JAVA web

八、JSP

1、什么是JSP

Java Server Page :java服务端页面,也和Servlet一样,用于动态Web技术;

最大的特点:
  • 写JSP就像在写HTML;
  • 区别:
    • Html 只给用户提供静态的数据
    • jsp页面中可以嵌入java代码,为用户提供动态数据;

2、JSP原理

  • JSP的执行过程

    1、客户端发出请求。

    2、Web容器将JSP转译成Servlet源代码。

    3、Web容器将产生的源代码进行编译。

    4、Web容器加载编译后的代码并执行。

    5、把执行结果响应至客户端。

JSP详解

  • 代码模块
    • 在JSP页面中,只要是 JAVA代码就会原封不动的输出;

    • 如果是HTML代码,就会被转换为:

    out.write("<html>\r\n");
    

    这样的格式,输出到前端!

3、JSP的基本语法

  • JSP页面可以嵌入HTML标签、指令、动作、脚本、扩展标签等。

  • 这些内容可以分成元素和模板数据。

    • 元素是在JSP基本语法中定义的内容,JSP容器在转换阶段将元素翻译成相应的Java代码。

    • JSP页面中其他的所有内容都是模板数据。JSP容器对模板数据不做处理。

    • JSP定义的元素有4种类型。

      指令:用于设置整个页面属性
      脚本:JSP中嵌入的Java代码
      动作:利用XML语法格式的标记来控制JSP容器的行为
      表达式语言(EL):$(表达式),计算表达式括号内的表达式的值,将其转换为String类型并进行显示

1、脚本元素
  • jsp表达式
 <%--jsp表达式
  作用:将程序的输出结果,输出到客户端
  --%>
 <%= new java.util.Date()%>
  • 声明
 <%--声明--%>
  <%!
    static {
      System.out.println("Loading...");
    }
    private int globVar =0;
    public void myMethod{
    System.out.println("我进入到没有myMethod方法里了");
  }
  %>
  • 脚本小程序(在jsp中嵌入一段代码)
<%
  java代码  
%>
2、指令元素
<%@page args.... %>
<%@include file=""%>

<%--@include会将两个页面合二为一--%>
<%@include file="file/header.jsp"%>
<h1>网页主体</h1>

<%@include file="file/footer.jsp"%>

<hr>


<%--jSP标签
    jsp:include:拼接页面,本质还是三个
    --%>
<jsp:include page="/file/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/file/footer.jsp"/>
3、动作元素

JSP的动作利用XML语法格式的标记来控制JSP容器的行为。

<jsp:action_name attribute="value"/>

与JSP指令不同的是,JSP动作元素在请求处理阶段起作用

4、EL表达式 ${ }

计算表达式括号内的表达式的值,将其转换为String类型并进行显示

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象
注释
<!--html注释内容-->
<%--jsp注释--%>
    <%//单行注释%>
    <%/*
        多行
        注释
     */%>

JSP的注释,不会在客户端显示,HTML就会!
JSP详解

4、九大内置对象和四大作用域

1、九大内置对象
  • **输出输入对象:**request、response、out
  • **通信控制对象:**pageContext、session、application
  • **Servlet对象:**page、config
  • **错误处理对象:**exception
2、四大作用域
   <%--内置对象--%>
<%
    //存入数据
    pageContext.setAttribute("name1","马龙");//只在一个页面中有效
    request.setAttribute("name2","张继科");//保存的数据只在一次请求中有效,请求转发会携带这个数据
    session.setAttribute("name3","陈梦");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
    application.setAttribute("name4","孙颖莎");//保存的数据只在服务器中有效,从打开服务器懂啊关闭服务器
%>
<%
    //从底层到高层(作用域):page——》request——》session——》application
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");//不存在的数据
%>
<%--输出数据到页面--%>
    <h1>乒乓球运动员有哪些</h1>
    <p>${name1}</p>
    <p>${name2}</p>
    <p>${name3}</p>
    <p>${name4}</p>
    <p>${name5},来自EL表达式</p>
    <p><%=name5%>,来自EL表达式</p>

JSP详解
**

5、JSP标签、JSTL标签

在web.xml中导入依赖

 		<!-- JSTL表达式依赖 -->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- standard 标签库 -->
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
JSP标签
    <%--转发,转发的时候可以传递参数--%>
    <jsp:forward page="file/jsptag02.jsp">
        <jsp:param name="name" value="马龙"/>
        <jsp:param name="age" value="33"/>
    </jsp:forward>
JSTL表达式

JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签供我们使用,标签的功能和java代码一样!根据JSTL标签所提供的功能,可以将其分为5个类别:

  • 格式化标签

  • SQL标签

  • XML标签

  • JSTL函数

  • 核心标签
JSTL标签库使用步骤
  • 引入对应的 taglib

  • 使用其中的方法

  • 在Tomcat 也需要引入 jstl的包,否则会报错:JSTL解析错误

c:if 判断
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>if测试</h3>
<hr>
<form action="coreif.jsp" method="get">
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>
    <%--判断如果提交的用户是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="登录成功,欢迎您!!"></c:out>
</c:if>
<c:out value="${isAdmin}"/>
</body>
</html>
c:choose c:when 选择
<%--定义一个变量score,值为85--%>
<c:set var="score" value="55"/>

<c:choose>
    <c:when test="${score>=90}">
        你的成绩为优秀
    </c:when>
    <c:when test="${score>=80}">
        你的成绩为一般
    </c:when>
    <c:when test="${score>=70}">
        你的成绩为良好
    </c:when>
    <c:when test="${score<=60}">
        你的成绩为不及格
    </c:when>
</c:choose>

c:forEach 循环

<%
    ArrayList<String> people = new ArrayList<>();
    people.add("张三");
    people.add("李四");
    people.add("王五");
    people.add("赵六");
    people.add("田六");
    request.setAttribute("list",people);
%>


<%--
var , 每一次遍历出来的变量
items, 要遍历的对象
begin,   哪里开始
end,     到哪里
step,   步长
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/> <br>
</c:forEach>

<hr>

<c:forEach var="people" items="${list}" begin="1" end="3" step="1" >
    <c:out value="${people}"/> <br>
</c:forEach>

上一篇:救生艇 -- LeetCode -- 8.26


下一篇:Java数组:什么是数组