Skip to content

JSP

基本理解

一个jsp就是一个servlet,目的是为了简化动态网站的开发,可以将java代码和html代码混 合在一起开发,提高效率。

第一个JSP

首先web项目引入jsp的api-jar

xml
<dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
<dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

然后编写第一个jsp文件,然后就可以把访问这个页面了。 文件

html
<%@ page import="java.util.Date" %><%--
  Created by IntelliJ IDEA.
  User: w
  Date: 2022/4/6
  Time: 12:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>First Page</title>
</head>
<body>
<% Date date = new Date();%>
<% out.write("服务器时间"); %>
<% out.write(date.toLocaleString()); %>
</body>
</html>
<%@ page import="java.util.Date" %><%--
  Created by IntelliJ IDEA.
  User: w
  Date: 2022/4/6
  Time: 12:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>First Page</title>
</head>
<body>
<% Date date = new Date();%>
<% out.write("服务器时间"); %>
<% out.write(date.toLocaleString()); %>
</body>
</html>

显示结果

服务器时间 2022年4月6日 下午7:10:35
服务器时间 2022年4月6日 下午7:10:35

JSP的基本原理

tomcat里面有一个work,里面有临时文件,对于idea来说会在一个特殊的地方,比如我的在

C:\Users\www\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\2ba1a2bb-d42b-493f-8b8d-a10a6d38e665\work\Catalina\localhost\JavaWeb_war_exploded\org\apache\jsp
C:\Users\www\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\2ba1a2bb-d42b-493f-8b8d-a10a6d38e665\work\Catalina\localhost\JavaWeb_war_exploded\org\apache\jsp

里面可以看到两个文件

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          2022/4/6     12:24           5669 first_jsp.class
-a----          2022/4/6     12:24           5170 first_jsp.java
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          2022/4/6     12:24           5669 first_jsp.class
-a----          2022/4/6     12:24           5170 first_jsp.java

这不就是java吗?这个名字和我的jsp名字相同。 原来jsp引擎会在页面第一次访问的时候将页面编译成java。 jsp会继承HttpJspBase而HttpJspBase又继承了Servlet,所以可以称jsp就是一个servlet。

当然这个过程也省略了配置web.xml的过程。

语法规则

支持html注释<!-- 注释内容 -->好处是html中可以看到。 支持jsp注释<%-- 注释内容 --%>

<% %>中不能出现

  • 声明变量不能添加访问权限修饰符
  • 不能定义方法
  • 不能添加静态代码语句块 原因时jsp中的内容会被放到一个文件中。

如果想要定义方法需要将方法定义代码放在<%! %>中。 直接输出的内容可以直接放在<%=%>中,等号后面的内容会被直接放在out.write()中。

九大内置对象

PageContext 页面上下文 request session 和servlet一样 application 应用程序 response config out 和printWriter类似继承了io的Writer page 就是this对象 exception

JSP指令

JSP指令可以开启关闭session(session=true) 还有exception对象 (isErrorPage=true) 还可以使用include指令静态引入其他界面(变量不能重复)。 可以指定错误处理界面 errorPage=/error.jsp来指定专门应该处理错误的页面。

EL表达式

全称表达式语言。 会自动进行类型转换。 以“${”开始,以“}”作为结束: 总结来说和js使用很像。 表达错误的时候并不会报错。 可以使用运算符。 el表达式中可以使用一些内置对象。 可以自定义一些el函数(tld文件放在web-inf下)。

JSTL标签

JSTL标签类似一个类库包含了很多常用的工具类。 可以引入jsp文件中使用。 类似于前端开发的lodash。