JSP

1、什么是JSP

Java Server Pages:Java服务端页面,也和 Servlet 一样,用于动态 web 技术。

最大的特点:

  • 写 JSP 就像在写 HTML
  • 区别:
    • HTML 只给用户提供静态的数据
    • JSP 页面中可以嵌入 Java 代码,为用户提供动态数据

2、JSP 原理

思路:JSP 到底怎么执行的?

  • 代码层面没有任何问题

  • 服务器内部工作

    tomcat中有一个work目录;

    IDEA中使用Tomcat的会在IDEA的tomcat中生成一个work目录;

    例如:

    C:\Users\guancheng\.IntelliJIdea2019.1\system\tomcat\Unnamed_javaweb-cookie-session\work\Catalina\localhost\javaweb\org\apache\jsp

    发现页面转变成了Java程序!

    index_jsp.class

    index_jsp.java

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet。

JSP 最终也会转换成 Java 类!

JSP 本质上就是一个Servlet

在JSP页面中:

只要是JAVA代码就会原封不动的输出;

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

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

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

3、JSP基础语法

任何语言都有自己的语法,Java中有,JSP 作为 Java技术的一种应用,它拥有一些自己扩充的语法,Java所有语法都支持!

jsp表达式

<%--JSP表达式
作用:用来将程序的输出,输出到客户端
公式:<%= 变量或者表达式%>
--%>
<%= new  java.util.Date()%>

jsp脚本片段

<%--jsp脚本片段--%>
<%
    int sum = 0;
    for (int i = 0; i <= 100; i++) {
        sum += i;
    }
    out.print("<h1>sum=" + sum + "</h1>");
%>

脚本片段的再实现

<%--在代码中嵌入HTML元素--%>
<%
    for (int i = 0; i < 5; i++) {
%>
    <h1>hello world <%= i%></h1>
<%
    }
%>

jsp声明

<%!
    static {
        System.out.println("Loading Servlet!");
    }

    private int globalVar = 0;

    public void test() {
        System.out.println("进入了test方法!");
    }
%>

JSP声明:会被编译到JSP生成的Java类中。其他的就会被生成到_jspService方法中!

在JSP中,嵌入Java代码即可!

<%%> 		片段
<%=%> 		表达式输出一个值
<%!%> 		定义全局的变量、方法等
<%--注释--%> 注释

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

4、JSP指令

<%@page args...%>
<%@include file=""%>

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

<hr>

<%--jsp标签
jsp:include 拼接页面,本质还是三个    
--%>
<jsp:include page="commom/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="commom/footer.jsp"/>

5、九大内置对象

  • PageContext 存东西
  • Request 存东西
  • Response
  • Session 存东西
  • Application (ServletContext) 存东西
  • config (ServletConfig)
  • out
  • page
  • exception
<%
    pageContext.setAttribute("name1", "张三01"); //保存的数据只在一个页面中有效
    request.setAttribute("name2", "张三02");// 保存的数据只在一次请求中有效,请求转发会携带这个数据
    session.setAttribute("name3", "张三03");// 保存的数据只在一次会话中有效,开启浏览器到关闭浏览器
    application.setAttribute("name4", "张三04");// 保存的数据只在服务器中有效,开启服务器到关闭服务器
%>

<%--脚本片段中的代码会被原封不动的生成到JSP.java中
所以必须保证代码的语法正确--%>
<%
    // 使用pageContext取出,通过寻找的方式来
    // 从底层到高层(作用域)
    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");// 不存在的数据
%>

<%--使用EL表达式输出 ${}--%>
<h1>取到的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<%--因为name5不存在,所以使用EL表达式不会输出--%>
<h3>${name5}</h3>
<%--因为name5不存在,所以会输出 null--%>
<h3><%=name5%></h3>

request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻

session:客户端向服务器发送请求,产生的数据,用户用完一会儿可能还有用,比如:购物车

application:客户端向服务器发送请求,产生的数据,一个用户用完另一个用户还可能用,比如:聊天数据

6、JSP标签、JSTL标签,EL表达式

导入依赖:

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

EL表达式:${}

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象
  • 调用Java方法

JSP标签:

<%--jsp:include--%>

<jsp:forward page="/jsptag01.jsp">
    <jsp:param name="name" value="张三"/>
    <jsp:param name="age" value="20"/>
</jsp:forward>
<%--取出参数--%>
名字:<%=request.getParameter("name")%>
年龄:<%=request.getParameter("age")%>

JSTL表达式:

JSTL 标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签供我们使用,标签的功能和Java代码一样。

JSTL标签库使用步骤:

  1. 引入对应的 taglib
<%--引入JSTL标签库,我们才能使用 JSTL 标签 core--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  1. 使用其中的方法
<body>
<h4>if测试</h4>
<hr>

<form action="coreif.jsp" method="get">
<%--EL表达式获取表单数据:
  ${param.参数名}
  --%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="提交">
</form>

<%--判断如果提交的是管理员(admin),就登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="登录成功,管理员欢迎您!"/>
</c:if>

<c:out value="${isAdmin}"/>
</body>
<body>
<h1>choose-when测试</h1>

<c:set var="score" value="50"/>
<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:when test="${score < 60}">
        不及格😭
    </c:when>
</c:choose>
</body>
<body>

<h1>forEach测试</h1>

<%
    ArrayList<String> poetry = new ArrayList<>();
    poetry.add("一为迁客去长沙,西望长安不见家。");
    poetry.add("二月江南花满枝,他乡寒食远堪悲。");
    poetry.add("三万里河东入海,五千仞岳上摩天。");
    poetry.add("四月清和雨乍晴,南山当户转分明。");
    poetry.add("五月榴花照眼明,枝间时见子初成。 ");
    poetry.add("六出飞花入户时,坐看青竹变琼枝。");
    poetry.add("七夕今宵看碧霄,牵牛织女渡河桥。");
    poetry.add("八月长江万里晴,千帆一道带风轻。");
    poetry.add("九曲黄河万里沙,浪淘风簸自天涯。");
    poetry.add("十里长街市井连,月明桥上看神仙。");
    poetry.add("二十年来万事同,今朝岐路忽西东。");
    poetry.add("三十骅骝一烘尘,来时不锁杏园春。");
    poetry.add("四十年来画竹枝,日间挥写夜间思。");
    poetry.add("五十年间万事非,放翁依旧掩柴扉。");
    poetry.add("六十衰颓愧鬓蓬,黄花更负一年中。");
    poetry.add("七十衰翁卧故山,镜中无复旧朱颜。");
    poetry.add("八十昂藏一老翁,得钱长是醉春风。");
    poetry.add("九十春光斗日光,山城斜路杏花香。");
    poetry.add("百啭千声随意移,山花红紫树高低。");
    poetry.add("千里莺啼绿映红,水村山郭酒旗风。");
    poetry.add("万里清江万里天,一村桑柘一村烟。");
    poetry.add("十万貔貅出羽林,横空杀气结层阴。");
    poetry.add("百万苍生罹热恼,三年素女苦高寒。");
    poetry.add("千万乘骢沈司户,不须惆怅郢中游。");
    request.setAttribute("list", poetry);
%>
<%--
var:每一次遍历出来的对象
items:需要遍历的对象
--%>
<c:forEach var="poetry" items="${list}">
    <c:out value="${poetry}"/> <br>
</c:forEach>
<%--
var:每次遍历出来的对象
begin:从哪开始
end:到哪结束
step:步长
items:遍历的对象
--%>
<c:forEach var="poetry" begin="0" end="10" step="1" items="${list}">
    <c:out value="${poetry}"/> <br>
</c:forEach>

</body>

7、JavaBean

实体类

JavaBean的特定写法:

  • 必须要有一个无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法

一般用来和数据库的字段做映射!

ORM:对象关系映射

  • 表 ==> 类
  • 字段 ==> 属性
  • 行记录 ==> 对象
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐