一文学懂JSP(上)

简介: 一文学懂JSP

正文开始 ----------


f7c073520f44ecc6ea0608376e31114f.png


第1章 为什么要学习JSP

1.1 现有技术不足

Servlet可以通过转发或重定向跳转到某个HTML文档。但HTML文档中的内容不受Servlet的控制。比如登录失败时,跳转回登录表单页面无法显示诸如“用户名或密码不正确”的错误消息,所以我们目前采用的办法是跳转到一个错误信息页面。如果通过Servlet逐行输出响应信息则会非常繁琐。


Servlet输入html页面的程序代码:


package com.manman.web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
/**
 * @author Gaoziman
 * @version 1.0
 * description:
 * @date 2022/8/23 19:27
 */
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置返回的数据内容的数据类型和编码
        response.setContentType("text/html; charset=utf-8");
        // 获取字符输出流
        Writer writer = response.getWriter();
        //输出页面内容!
        writer.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");
        writer.write("<html>");
        writer.write("<head>");
        writer.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
        writer.write("<title>Insert title here</title>");
        writer.write("</head>");
        writer.write("<body>");
        writer.write("这是由Servlet程序输出的html页面内容!");
        writer.write("</body></html>");
    }
}

接着,在浏览器中输入访问Servlet的访问路径得到以下结果:

上面的代码我们不难发现。通过Servlet输出简单的html页面信息都非常不方便。那我们要输出一个复杂页面的时候,就更加的困难,而且不利于页面

的维护和调试。

1.2 Servlet与HTML

Servlet HTML
长处 接收请求参数,访问域对象,转发页面 以友好方式显示数据
短处 以友好方式显示数据 动态显示数据

1.3 总结

那能否将Servlet和HTML二者的长处结合起来呢?

能!sun公司推出一种叫做JSP的动态页面技术帮助我们实现对页面输出繁锁工作。

第2章 JSP简介

2.1 JSP全称

  • JSP全称Java Server Pages,顾名思义就是运行在java服务器中的页面。由Sun 公司专门为了解决动态生成HTML文档的技术,也就是在我们JavaWeb中的动态页面。

JSP能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML。

JSP其本质就是一个Servlet。Servlet能做的事情 JSP 都能做。

JSP必须运行在服务器中,不能直接使用浏览器打开。

JSP是Web网页的技术标准,主要语法组成包括:指令,html模板元素,脚本片段(小脚本),表达式,声明,注释,后缀是*.JSP。

JSP的主要作用是代替Servlet程序回传HTML页面的数据

web目录(或其他)右击 --> new --> JSP/JSPX --> 输入文件名 --> 选择JSP file创建


2.2 JSP与HTML的区别

  • JSP是动态页面,html是静态页面。
动态页面 静态页面
运行原理 通过服务器解析后,将数据在浏览器中显示 直接在浏览器中解析运行
维护成本 较低,可以修改后台数据,进而影响页面中的数据 较高,必须将修改后的页面覆盖原页面
数据库 可以连接数据库 不可连接数据库
访问速度 较慢 较快
书写代码 可以书写java代码 不能书写java代码

2.3 JSP与Servlet分工


JSP本质是一个Servlet ,翻译后的文件结构为:class helloworld_JSP : HttpJSPBase : HttpServlet。

JSP主要负责显示及获取数据,从表面上看,JSP 相对于在html中嵌入java代码:JSP=html+java。

Servlet主要负责处理业务,从表面上看,Servlet相当于在java中嵌入html代码:Servlet=java+html。

总结:相比于Servlet,JSP更加善于处理显示页面,而Servlet更善于处理业务逻辑,两种技术各有专长,所以一般我们会将Servlet和 JSP 结合使用,Servlet负责业务,JSP 负责显示。

2.4 JSP基本格式

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP页面</title>
</head>
<body>
  这是我的第一个JSP页面。
</body>
</html>

2.5 JSP的本质

JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏输入路径),Tomcat服务器会将此JSP页面翻译成为一个Java源文件,并对其进行编译成为.class字节码文件(一个.java,一个.class),当打开.java文件时发现其中的内容是:


d00bc7fb08ec254bf8e612ea322ce8fb.png

而HttpJspBase类直接继承于HttpServlet类,即JSP翻译出来的Java类间接继承于HttpServlet类,证明JSP页面是一个Servlet程序

第3章 JSP初体验

3.1 创建一个JSP动态页面程序:HelloWorld

① 选中Web目录,右键创建一个jsp文件

7c47cd00fd386bf88478e45977917e9c.png

②在body标签中添加你想要显示的文本内容


image-20220823195139844.png


③然后在浏览器中输入jsp页面的访问地址


jsp页面的访问地址和html页面的访问路径一样http://ip:端口号/工程名/文件名。也就是https://localhost:8080/day07/demo.jsp


1fd56548fd983d84e751119099184b2c.png

注意事项:


1、jsp 页面是一个类似于 html 的一个页面。 jsp直接存放到 web目录下,和html一样访问 jsp 的时候,也和访问html一样


2、jsp 的默认编码集是 ISO-8859-1,修改 jsp 的默认编码为UTF-8


3.2 JSP运行原理


jsp的本质其实是一个Servlet程序。


实际上Tomcat在运行JSP时,并不是直接显示的我们所编写的JSP页面,而是将JSP页面转换成了一个Java类,这个Java类是什么,我想大家也能猜到了,它实际上就是一个Servlet。

这个Servlet在哪呢?在Tomcat目录中work目录中,在那个目录下保存着 Tomcat自动生成的一些内容,下面让我们来找到那个目录。


在work目录下的…work\Catalina\localhost\day07_jsp\org\apache\jsp文件夹中我们可以发现两个文件index_jsp.java和index_jsp.class,前者就是Tomcat自动生成的Servlet的源码,后者是编译后的.class文件。


832dcd6f3efd993559b4517a95aaf2f6.png


打开index_jsp.java文件部分内容如下:


图一:


702d8207cf16e3cae7d48f0b6f000c45.png


我们打开index_jsp.java文件查看里面的内容:发现,生成的类继承于HttpJspBase类。这是一个jsp文件生成Servlet程序要继承的基类!于是,我们关联源代码。去查看一下HttpJspBase类的内容。从源码的类注释说明中,我们发现。HttpJspBase这个类就是所有JSP文件生成Servlet程序需要去继承的基类。并且这个HttpJspBase类继承于HttpServlet类。我们访问JSP时服务器就是调用了该Servlet来响应请求。所以JSP也是一个Servlet小程序。


d6de272f3f691d2db33811abd0d4a00b.png


我们分别在工程的WebContent目录下创建多个jsp文件。然后依次访问。它们都被翻译为.java文件并编译成为.class字节码文件。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A9HeCUmf-1661441820762)(https://gaoziman.oss-cn-hangzhou.aliyuncs.com/img/JSP%E5%8E%9F%E7%90%86.png)]


我们顺着代码向下看,会发现_jspService()方法。会发现有九个对象(实际上默认会看到八个),这是后面要讲到的重点。


图二:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sG1Eo9Ro-1661441820763)(https://gaoziman.oss-cn-hangzhou.aliyuncs.com/img/jsp%E7%BF%BB%E8%AF%91servlet%E5%90%8E%E9%83%A8%E5%88%86%E6%BA%90%E7%A0%812.png)]


小结:


从生成的文件我们不难发现一个规则:


a.jsp 翻译成 java文件后的全名是 a_jsp.java文件


b.jsp 翻译成 java文件后的全名是 b_jsp.java文件


那么当我们访问 一个xxx.jsp文件后翻译成java文件的全名是 xxx_jsp.java文件。


xxx_jsp.java文件是一个Servlet程序。原来jsp中的html内容都被翻译到Servlet类的service方法中原样输出。


1b13996145711bba2f058ec1e70aee4d.png


Servlet是需要在web.xml中配置的,而我们并没有配置JSP的serlvet映射,那他是如何访问的呢?实际在tomcat下的conf目录中的web.xml早已配置好了JSP的映射信息,具体内容如下:

<servlet>
  <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
    <param-name>fork</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <param-name>xpoweredBy</param-name>
    <param-value>false</param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

总结Jsp运行原理

  1. 第一次访问jsp页面时,服务器会将xxx.jsp文件翻译成xxx_jsp.java文件,再编译成xxx_jsp.class文件。
  2. 以后在访问同一个jsp文件
  • 如果文件未改变,不会被翻译和编译
  • 如果文件改变,会翻译和编译
目录
相关文章
|
存储 前端开发 Java
|
Java
2022年欢迎来到Jsp编程第二课:JSP核心九大内置对象
2022年欢迎来到Jsp编程第二课:JSP核心九大内置对象
91 0
|
Java 应用服务中间件
JavaWeb 速通JSP
JavaWeb——服务器渲染技术 JSP 内容分享。
40 0
|
SQL XML 前端开发
JavaWeb开发 JSP技术详解(一)
JavaWeb开发 JSP技术详解(一)
|
Java 应用服务中间件 Apache
JSP详细基础教学
前言 JSP(JavaServer Pages)是一种用于开发动态网页的Java技术。它允许将Java代码嵌入HTML页面中,以便在服务器端生成动态内容。在本次教程中,我将向您介绍如何开始使用JSP。 环境设置 首先,确保您已经安装了Java开发工具包(JDK)和一个支持JSP的Web服务器,如Apache Tomcat。确保将JDK的路径添加到系统环境变量中。 创建JSP文件 创建一个新的文本文件,并将其保存为以".jsp"为扩展名的文件,例如"index.jsp"。 编写基本的JSP代码 打开您创建的JSP文件,并使用以下代码作为模板来编写基本的JSP代码:
84 0
|
SQL 存储 搜索推荐
基于jsp的塞北村镇旅游网站的设计与实现--【毕业论文】
基于jsp的塞北村镇旅游网站的设计与实现--【毕业论文】
|
JavaScript 前端开发 Java
一文学懂JSP(下)
一文学懂JSP
78 0
|
前端开发 JavaScript Java
【JavaWeb】快速通关JSP(一)
【JavaWeb】快速通关JSP(一)
|
存储 前端开发 Java
【JavaWeb】快速通关JSP(三)
【JavaWeb】快速通关JSP(三)
|
前端开发 Java 应用服务中间件
【JavaWeb】快速通关JSP(二)
【JavaWeb】快速通关JSP(二)