🤓 JSP(一)

简介: 🤓 JSP

JSP


今日目标:


  • 理解 JSP 及 JSP 原理
  • 能在 JSP中使用 EL表达式JSTL标签
  • 理解 MVC模式三层架构
  • 能完成品牌数据的增删改查功能


1,JSP 概述


==JSP(全称:Java Server Pages):Java 服务端页面。==是一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义 Java代码的动态内容,也就是 JSP = HTML + Java。如下就是jsp代码


<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h1>JSP,Hello World</h1>
        <%
         System.out.println("hello,jsp~");
        %>
    </body>
</html>


上面代码 h1 标签内容是展示在页面上,而 Java 的输出语句是输出在 idea 的控制台。


那么,JSP 能做什么呢?现在我们只用 servlet 实现功能,看存在什么问题。如下图所示,当我们登陆成功后,需要在页面上展示用户名


网络异常,图片无法展示
|

上图的用户名是动态展示,也就是谁登陆就展示谁的用户名。只用 servlet 如何实现呢?在今天的资料里已经提供好了一个 LoginServlet ,该 servlet 就是实现这个功能的,现将资料中的 LoginServlet.java 拷贝到 request-demo 项目中来演示。接下来启动服务器并访问登陆页面


网络异常,图片无法展示
|


输入了 zhangsan 用户的登陆信息后点击 登陆 按钮,就能看到如下图效果


网络异常,图片无法展示
|


当然如果是 lisi 登陆的,在该页面展示的就是 lisi,欢迎您,动态的展示效果就实现了。那么 LoginServlet 到底是如何实现的,我们看看它里面的内容


上面的代码有大量使用到 writer 对象向页面写标签内容,这样我们的代码就显得很麻烦;将来如果展示的效果出现了问题,排错也显得有点力不从心。而 JSP 是如何解决这个问题的呢?在资料中也提供了一个 login.jsp 页面,该页面也能实现该功能,现将该页面拷贝到项目的 webapp下,需要修改 login.html 中表单数据提交的路径为下图


网络异常,图片无法展示
|


重新启动服务器并进行测试,发现也可以实现同样的功能。那么 login.jsp 又是如何实现的呢?那我们来看看 login.jsp 的代码


网络异常,图片无法展示
|


上面代码可以看到里面基本都是 HTML 标签,而动态数据使用 Java 代码进行展示;这样操作看起来要比用 servlet 实现要舒服很多。


JSP 作用:简化开发,避免了在Servlet中直接输出HTML标签。


2,JSP 快速入门


接下来我们做一个简单的快速入门代码。


2.1  搭建环境


创建一个maven的 web 项目,项目结构如下:


网络异常,图片无法展示
|


pom.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>jsp-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
      <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>
</project>

2.2  导入 JSP 依赖


dependencies 标签中导入 JSP 的依赖,如下


<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>

该依赖的 scope 必须设置为 provided,因为 tomcat 中有这个jar包了,所以在打包时我们是不希望将该依赖打进到我们工程的war包中。


2.3  创建 jsp 页面


在项目的 webapp 下创建jsp页面


网络异常,图片无法展示
|


通过上面方式创建一个名为 hello.jsp 的页面。


2.4  编写代码


hello.jsp 页面中书写 HTML 标签和 Java 代码,如下


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>hello jsp</h1>
    <%
        System.out.println("hello,jsp~");
    %>
</body>
</html>


2.5  测试


启动服务器并在浏览器地址栏输入 http://localhost:8080/jsp-demo/hello.jsp,我们可以在页面上看到如下内容


网络异常,图片无法展示
|


同时也可以看到在 idea 的控制台看到输出的 hello,jsp~ 内容。


3,JSP 原理


我们之前说 JSP 就是一个页面,那么在 JSP 中写 html 标签,我们能理解,但是为什么还可以写 Java 代码呢?


因为 ==JSP 本质上就是一个 Servlet。==接下来我们聊聊访问jsp时的流程


网络异常,图片无法展示
|


  1. 浏览器第一次访问 hello.jsp 页面
  2. tomcat 会将 hello.jsp 转换为名为 hello_jsp.java 的一个 Servlet
  3. tomcat 再将转换的 servlet 编译成字节码文件 hello_jsp.class
  4. tomcat 会执行该字节码文件,向外提供服务


我们可以到项目所在磁盘目录下找 target\tomcat\work\Tomcat\localhost\jsp-demo\org\apache\jsp 目录,而这个目录下就能看到转换后的 servlet


网络异常,图片无法展示
|


打开 hello_jsp.java 文件,来查看里面的代码


由上面的类的继承关系可以看到继承了名为 HttpJspBase 这个类,那我们在看该类的继承关系。到资料中的找如下目录: 资料\tomcat源码\apache-tomcat-8.5.68-src\java\org\apache\jasper\runtime ,该目录下就有 HttpJspBase 类,查看该类的继承关系


可以看到该类继承了 HttpServlet ;那么 hello_jsp 这个类就间接的继承了 HttpServlet ,也就说明 hello_jsp 是一个 servlet


继续阅读 hello_jsp 类的代码,可以看到有一个名为 _jspService() 的方法,该方法就是每次访问 jsp 时自动执行的方法,和 servlet 中的 service 方法一样 。


而在 _jspService() 方法中可以看到往浏览器写标签的代码:


网络异常,图片无法展示
|


以前我们自己写 servlet 时,这部分代码是由我们自己来写,现在有了 jsp 后,由tomcat完成这部分功能。


4,JSP 脚本


JSP脚本用于在 JSP页面内定义 Java代码。在之前的入门案例中我们就在 JSP 页面定义的 Java 代码就是 JSP 脚本。


4.1  JSP 脚本分类


JSP 脚本有如下三个分类:


  • <%...%>:内容会直接放到_jspService()方法之中
  • <%=…%>:内容会放到out.print()中,作为out.print()的参数
  • <%!…%>:内容会放到_jspService()方法之外,被类直接包含


代码演示:


hello.jsp 中书写


<%
    System.out.println("hello,jsp~");
    int i = 3;
%>


通过浏览器访问 hello.jsp 后,查看转换的 hello_jsp.java 文件,i 变量定义在了 _jspService() 方法中


网络异常,图片无法展示
|


hello.jsp 中书写


<%="hello"%>
<%=i%>


通过浏览器访问 hello.jsp 后,查看转换的 hello_jsp.java 文件,该脚本的内容被放在了 out.print() 中,作为参数


网络异常,图片无法展示
|


hello.jsp 中书写


<%!
    void  show(){}
 String name = "zhangsan";
%>

通过浏览器访问 hello.jsp 后,查看转换的 hello_jsp.java 文件,该脚本的内容被放在了成员位置


网络异常,图片无法展示
|


4.2  案例


4.2.1  需求


使用JSP脚本展示品牌数据


网络异常,图片无法展示
|


说明:


  • 在资料 资料\1. JSP案例素材 中提供了 brand.html 静态页面
  • 在该案例中数据不从数据库中查询,而是在 JSP 页面上写死
目录
相关文章
uiu
|
缓存 前端开发 JavaScript
JSP还能撑多久? -- 关于WEB开发的一些思考
JSP还能撑多久? -- 关于WEB开发的一些思考
uiu
300 0
|
6月前
|
供应链 Java 数据安全/隐私保护
分享25个JSP源码,总有一款适合您
分享25个JSP源码,总有一款适合您
196 4
|
Java
2022年欢迎来到Jsp编程第二课:JSP核心九大内置对象
2022年欢迎来到Jsp编程第二课:JSP核心九大内置对象
88 0
|
6月前
|
移动开发 开发框架 小程序
分享133个JSP源码,总有一款适合你
分享133个JSP源码,总有一款适合你
339 0
分享133个JSP源码,总有一款适合你
|
Java
欢迎来到Jsp编程课时六——EL表达式(JSP第十五课时)
欢迎来到Jsp编程课时六——EL表达式(JSP第十五课时)
97 0
|
Java 程序员
JSP知识点小结
JSP知识点小结
64 0
|
Java
欢迎来到Jsp编程课时七——JSP第十六课时。JSTL标签库(一)
欢迎来到Jsp编程课时七——JSP第十六课时。JSTL标签库(一)
71 0
|
Java
欢迎来到Jsp编程课时七——JSP第十六课时。JSTL标签库(二)
欢迎来到Jsp编程课时七——JSP第十六课时。JSTL标签库(二)
46 0
|
Java
JavaWeb第九章课后题 JSP详解
JavaWeb第九章课后题 JSP详解
106 0
|
存储 前端开发 Java