• JSP简单学习


    简介

    JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。

    JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。

    JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。

    JSP文件后缀名为 *.jsp

    JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上。

    为什么要学习JSP

    JSP 本质是一个 Java 类(Servlet),我们可以在 JSP 页面中嵌入 Java 代码,即:JSP = HTML + Java。

    JSP是一种动态网页开发技术,和html相似,但html是一种静态网页,除非改变html源码,否则页面内容不会改变

    ,而JSP则不同,请求JSP文件时,服务器会经历一次动态资源(JSP)到静态资源(HTML)的转化,服务器会自动把 JSP 中的 HTML 片段和数据拼接成静态资源响应给浏览器。也就是说,JSP 运行在服务器端,但最终发给客户端的是已经转换好的 HTML 静态页面。

    JSP 的功能与 CGI 相似,但相对于 CGI 来说,JSP 具有很多优势。

    • JSP 性能更加优越。因为 JSP 可以直接在 HTML 页面中嵌入动态元素,而不需要单独的引入 CGI 文件。
    • JSP 会在服务器调用之前进行编译,而不是像 CGI/Perl 必须先加载解释器和目标脚本。
    • JSP 基于 Java Servlet API,因此,JSP 可以使用各种强大的企业级 Java API,包括 JDBC、JNDI、EJB 和 JAXP 等。
    • JSP 页面可以和处理业务逻辑的 Servlet 一起使用。

    JSP 是 Java EE 不可或缺的一部分,是一个完整的企业级应用平台。这意味着 JSP 可以用最简单的方式来实现最复杂的应用。

    JSP的生命周期

    JSP 生命周期定义了 JSP 从创建到销毁的整个过程。

    image-20221110162813577

    JSP生命周期的各个阶段:

    编译

    将JSP编译成 Servlet。

    初始化

    当编译结束时,容器会调用jspInit() 方法来进行初始化,可以在这里进行一些初始化的参数配置等一次性工作。

    执行

    容器调用 _jspService() 方法,由jsp容器自动创建的处理jsp Page的方法,由jsp容器创建,不能由作者定义。

    销毁

    容器调用 jspDestroy()方法,jsp Page由于某种原因被关闭的时候调用该方法,由作者创建。

    编辑JSP文件

    feng.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
      
    
    
    <%out.print("Hello f0njl!");%>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    效果:

    image-20221110173949485

    jsp文件主要由五部分组成,由feng.jsp文件为例:

    1.指令

    JSP指令用来设置整个JSP页面相关的属性
    指令可以有多个属性,以键值对的形式表示,并用逗号隔开,语法格式为:
    <%@ directive attribute="value" %>

    feng.jsp中的指令部分为:<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

    image-20221110173154196

    JSP中的三种指令标签:

    指令描述
    <%@ page … %>定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
    <%@ include … %>包含其他文件
    <%@ taglib … %>引入标签库的定义

    Page指令

    Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

    Page指令的语法格式:

    <%@ page attribute="value" %>
    
    • 1

    该指令的例子就时上边的feng.jsp。

    属性

    下表列出与Page指令相关的属性:

    属性描述
    buffer指定out对象使用缓冲区的大小
    autoFlush控制out对象的 缓存区
    contentType指定当前JSP页面的MIME类型和字符编码
    errorPage指定当JSP页面发生异常时需要转向的错误处理页面
    isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面
    extends指定servlet从哪一个类继承
    import导入要使用的Java类
    info定义JSP页面的描述信息
    isThreadSafe指定对JSP页面的访问是否为线程安全
    language定义JSP页面所用的脚本语言,默认是Java
    session指定JSP页面是否使用session
    isELIgnored指定是否执行EL表达式
    isScriptingEnabled确定脚本元素能否被使用

    Include指令

    JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

    Include指令的语法格式如下:

    <%@ include file="文件相对 url 地址" %>
    
    • 1
    include指令示例

    代码:

    index.jsp

    <%@page language="java" pageEncoding="UTF-8"%>
    
    
      include指令实例
    
    
    
    <%out.print("Hello f0njl!");%>
    <%@include file="time.jsp"%>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    time.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    
    

    当前时间:

    <%= new Date() %>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    效果

    image-20221110181625346

    Taglib指令

    Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

    Taglib指令的语法:

    <%@ taglib uri="uri" prefix="prefixOfTag" %>
    
    • 1

    该指令实例不太会用,就不写了。

    2.注释

    修改一下feng.jsp文件,加一个注释。

    注释分为显示注释(html)和隐式注释(jsp)。

    显示注释:客户端在查看源码时能够看得见的注释内容。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
      
    
    
    <%out.print("Hello f0njl!");%>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    效果:

    image-20221110173903241

    隐式注释:客户端在查看源代码时看不到注释内容。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
      
    
    
    <%out.print("Hello f0njl!");%><%--注释内容--%>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    效果:

    image-20221110174159949

    3.脚本

    语法:
    <% Java代码 %>

    代码示例:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page import="java.text.*" %>
    
    
    <% out.println("Hello f0njl!"); %>
    
    <%! SimpleDateFormat feng = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = feng.format(new Date()); %> The current time is <%=s %>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    效果:

    image-20221110175027404

    注意,必须要引用到自己所需要用到类文件。

    4.声明

    在JSP页面中定义变量,方法或类。

    示例:

    <%@ page contentType="text/html;charset=GB2312"%>
    
    
    
      <%!
        int num=0;
        synchronized void countPeople()
        {
          num++;
        }
      %>
      <%
        countPeople();
      %>
      

    您是第<%=num%>个访问本站的客户。

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    效果:

    image-20221110175633993

    size指定的是字体大小,BGCOLOR指定背景颜色。

    5.表达式

    可以将动态信息显示在页面上
    <%= 变量或表达式%>

    示例:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    
    

    当前时间:

    <%= new Date() %>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    效果:

    image-20221110175934917

    JSP 动作元素

    与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。

    利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

    动作元素只有一种语法,它符合XML标准:

    
    
    • 1

    动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素如下:

    语法描述
    jsp:include在页面被请求的时候引入一个文件。
    jsp:useBean寻找或者实例化一个JavaBean。
    jsp:setProperty设置JavaBean的属性。
    jsp:getProperty输出某个JavaBean的属性。
    jsp:forward把请求转到一个新的页面。
    jsp:plugin根据浏览器类型为Java插件生成OBJECT或EMBED标记。
    jsp:element定义动态XML元素
    jsp:attribute设置动态定义的XML元素属性。
    jsp:body设置动态定义的XML元素内容。
    jsp:text在JSP页面和文档中使用写入文本的模板

    jsp:include动作元素

    jsp:include动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:

    
    
    • 1

    代码实例

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    
    
    
      
      f0njl博客
    
    
    
    

    include 动作实例

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    time.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    
    

    当前时间:

    <%= new Date() %>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    效果

    image-20221110190916448

    jsp:useBean动作元素

    jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。

    这个功能非常有用,因为它使得我们可以发挥 Java 组件复用的优势。

    jsp:useBean动作最简单的语法为:

    
    
    • 1

    代码实例

    TestBean.jsp

    <%@ page language = "java" import="test.TestBean" %>
    
    
    
        JSP中使用 Java Bean的测试
    
    
    
    
    
    
    
    

    消息:


    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    TestBean.java

    package test;
    
    public class TestBean {
        private String name;
        private String message;
        private String conn;
    
        public String getName() {
            return this.name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getMessage()
        {
            return this.message;
        }
        public void setMessage(String message)
        {
            this.message = message;
        }
        public String getCoon()
        {
            return this.conn;
        }
        public void setCoon(String coon)
        {
            this.conn = this.message+" "+this.name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    效果图

    image-20221110202436930

    jsp:forward 动作元素

    jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性page。语法格式如下所示:

    
    
    • 1

    以下是forward相关联的属性:

    属性描述
    pagepage属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个 Java Servlet.

    代码实例

    forward.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
      JSP中jsp:forward的基本语法
    
    
    

    forward动作示例页面

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    time.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    
    

    当前时间:

    <%= new Date() %>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    效果图

    image-20221110203205603

    jsp:plugin动作元素

    jsp:plugin动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。

    如果需要的插件不存在,它会下载插件,然后执行Java组件。 Java组件可以是一个applet或一个JavaBean。

    plugin动作有多个对应HTML元素的属性用于格式化Java 组件。param元素可用于向Applet 或 Bean 传递参数。

    这个没见到过,不太会用,见到以后再补充。

    jsp:element 、 jsp:attribute、 jsp:body动作元素

    jsp:element 、 jsp:attribute、 jsp:body动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。

    jsp:text动作元素

    jsp:text动作元素允许在JSP页面和文档中使用写入文本的模板,语法格式如下:

    模板数据
    
    • 1

    表单处理

    我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理。浏览器中使用 GET 和 POST 方法向服务器提交数据。

    GET方法示例

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <%@ page import="java.io.*,java.util.*" %>
    
    
    
    

    使用 GET 方法读取数据

    • 站点名: <%= request.getParameter("name")%>

    • 网址: <%= request.getParameter("url")%>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    image-20221110205139958

    POST方法示例

    test.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <%@ page import="java.io.*,java.util.*" %>
    
    
    
    

    使用 POST 方法读取数据

    • 站点名: <% String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8"); %> <%=name%>

    • 网址: <%= request.getParameter("url")%>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    index.html

    
    
    
    
    
    站点名:
    网址:
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    效果图:

    image-20221110205829829

    过滤器

    JSP 和 Servlet 中的过滤器都是 Java 类。

    过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

    过滤器

    Servlet 过滤器方法

    过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:

    序号方法 & 描述
    1public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法完成实际的过滤操作,当客户端的请求与过滤器设置的 URL 匹配时,Servlet 容器将先调用过滤器的 doFilter 方法。FilterChain 用于访问后续过滤器。
    2public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
    3public void destroy() Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

    Cookie

    设置cookie

    main.jxp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <%@ page import="java.net.*" %>
    <%
      // 编码,解决中文乱码
      String str = URLEncoder.encode(request.getParameter("cookie"),"utf-8");
      Cookie cookie = new Cookie("cookie", str);
      // 设置cookie过期时间为24小时。
      cookie.setMaxAge(60*60*24);
      // 在响应头部添加cookie
      response.addCookie( cookie );
    %>
    
    
      设置 Cookie
    
    
    
    

    设置 Cookie

    • cookie为: <%= request.getParameter("cookie")%>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    feng.html

    
    
    
      
      Cookie设置
    
    
    
    
    cookie输入:
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    访问feng.html然后即可设置cookie。

    image-20221111103411276

    image-20221111103421371

    JSP 文件上传

    JSP 文件上传 | 菜鸟教程 (runoob.com)

    直接用分析使用上边的代码就可以。

    基本文件上传都会存在一个前端的html文件,然后其可以直接作用到后端文件分析的文件,最后会又有一个响应的文件回显。

    image-20221111103944382

    JSP 自动刷新

    设置页面十秒自动刷新

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    
    <%
        response.setIntHeader("Refresh", 10);
        Date date = new Date();
        out.print(date);
    %>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    JSP 发送邮件

    JSP 发送邮件 | 菜鸟教程 (runoob.com)

    JSP 标准标签库(JSTL

    参考:JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

    JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

    标签库的出现感觉就是为了方便使用许多方法,让开发者更加便捷。

    析使用上边的代码就可以。

    基本文件上传都会存在一个前端的html文件,然后其可以直接作用到后端文件分析的文件,最后会又有一个响应的文件回显。

    [外链图片转存中…(img-s28Do2lZ-1668134980650)]

    JSP 自动刷新

    设置页面十秒自动刷新

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    
    <%
        response.setIntHeader("Refresh", 10);
        Date date = new Date();
        out.print(date);
    %>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    JSP 发送邮件

    JSP 发送邮件 | 菜鸟教程 (runoob.com)

    JSP 标准标签库(JSTL)

    参考:JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

    JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

    标签库的出现感觉就是为了方便使用许多方法,让开发者更加便捷。

  • 相关阅读:
    数据结构——线性表
    Python爬虫可以爬取什么
    Flink源码解析八之任务调度和负载均衡
    计算机毕业设计 基于SpringBoot产业园区智慧公寓管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
    JavaScript入门--数组
    警惕 “格机软件” 格式化手机全字库..不要轻易给不明觉厉的软件给root权限
    众和策略:美国芯片出口管制升级,万亿AI巨头回应!一度跌超7%
    CyclicBarrier和CountDownLatch
    C++ IO流_数据的旅行之路
    IntelliJ IDEA 常用快捷键一览表
  • 原文地址:https://blog.csdn.net/akxnxbshai/article/details/127802189