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" %>
<html>
<head>
  <title></title>
</head>
<body>
<%out.print("Hello f0njl!");%>
</body>
</html>

效果:

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" %>

该指令的例子就时上边的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 地址" %>
include指令示例

代码:

index.jsp

<%@page language="java" pageEncoding="UTF-8"%>
<html>
<head>
  <title>include指令实例</title>
</head>
<body>
<center>
  <%out.print("Hello f0njl!");%>
  <hr>
  <%@include file="time.jsp"%>
</center>
</body>
</html>

time.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<body>
<h1>当前时间: </h1>
<%= new Date() %>
</body>
</html>
效果

image-20221110181625346

Taglib指令

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

Taglib指令的语法:

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

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

2.注释

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

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

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title></title>
</head>
<body>
<%out.print("Hello f0njl!");%><!--注释内容-->
</body>
</html>

效果:

image-20221110173903241

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title></title>
</head>
<body>
<%out.print("Hello f0njl!");%><%--注释内容--%>
</body>
</html>

效果:

image-20221110174159949

3.脚本

语法:
<% Java代码 %>

代码示例:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="java.text.*" %>
<html>
<body>
<% out.println("Hello f0njl!"); %>
<br>
<%!
  SimpleDateFormat feng = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  String s = feng.format(new Date());
%>
The current time is <%=s %>
</body>
</html>

效果:

image-20221110175027404

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

4.声明

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

示例:

<%@ page contentType="text/html;charset=GB2312"%>
<HTML>
<BODY BGCOLOR=#8a2be2>
<FONT Size=4>
  <%!
    int num=0;
    synchronized void countPeople()
    {
      num++;
    }
  %>
  <%
    countPeople();
  %>
  <p>您是第<%=num%>个访问本站的客户。
  <p>
</FONT>
</BODY>
</HTML>

效果:

image-20221110175633993

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

5.表达式

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

示例:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<body>
<h1>当前时间: </h1>
<%= new Date() %>
</body>
</html>

效果:

image-20221110175934917

JSP 动作元素

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

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

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

<jsp:action_name attribute="value" />

动作元素基本上都是预定义的函数,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动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:

<jsp:include page="相对 URL 地址" flush="true" />

代码实例

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>f0njl博客</title>
</head>
<body>

<h2>include 动作实例</h2>
<jsp:include page="time.jsp" flush="true" />

</body>
</html>

time.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<body>
<h1>当前时间: </h1>
<%= new Date() %>
</body>
</html>

效果

image-20221110190916448

jsp:useBean动作元素

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

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

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

<jsp:useBean id="name" class="package.class" />

代码实例

TestBean.jsp

<%@ page language = "java" import="test.TestBean" %>

<html>
<head>
    <title>JSP中使用 Java Bean的测试</title>
</head>
<body>
<jsp:useBean id="test" class="test.TestBean" />
<jsp:setProperty name="test" property="name" value="Hello f0njl"/>
<jsp:setProperty name="test" property="message" value="Hello feng"/>
<jsp:setProperty name="test" property="coon" value="Hello long"/>

<p>消息:<br>
    <jsp:getProperty name="test" property="name" />
    <br>
    <jsp:getProperty name="test" property="message" />
    <br>
    <jsp:getProperty name="test" property="coon" />
</body>
</html>

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;
    }
}

效果图

image-20221110202436930

jsp:forward 动作元素

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

<jsp:forward page="相对 URL 地址" />

以下是forward相关联的属性:

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

代码实例

forward.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>JSP中jsp:forward的基本语法</title>
</head>
<body>
<h1>forward动作示例页面</h1>
<jsp:forward page="time.jsp"/>
</body>
</html>

time.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<body>
<h1>当前时间: </h1>
<%= new Date() %>
</body>
</html>

效果图

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页面和文档中使用写入文本的模板,语法格式如下:

<jsp:text>模板数据</jsp:text>

表单处理

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

GET方法示例

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<body>
<h1>使用 GET 方法读取数据</h1>
<ul>
  <li><p><b>站点名:</b>
    <%= request.getParameter("name")%>
  </p></li>
  <li><p><b>网址:</b>
    <%= request.getParameter("url")%>
  </p></li>
</ul>
</body>
</html>

image-20221110205139958

POST方法示例

test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<body>
<h1>使用 POST 方法读取数据</h1>
<ul>
  <li><p><b>站点名:</b>
    <%
      String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8");
    %>
    <%=name%>
  </p></li>
  <li><p><b>网址:</b>
    <%= request.getParameter("url")%>
  </p></li>
</ul>
</body>
</html>

index.html

<!DOCTYPE html>
<html>
<body>

<form action="test.jsp" method="POST">
  站点名: <input type="text" name="name">
  <br />
  网址: <input type="text" name="url" />
  <input type="submit" value="提交" />
</form>

</body>
</html>

效果图:

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 );
%>
<html>
<head>
  <title>设置 Cookie</title>
</head>
<body>

<h1>设置 Cookie</h1>

<ul>
  <li><p><b>cookie为:</b>
    <%= request.getParameter("cookie")%>
  </p></li>
</ul>
</body>
</html>

feng.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Cookie设置</title>
</head>
<body>

<form action="main.jsp" method=GET>
  cookie输入:<input type="text" name="cookie">
</form>

</body>
</html>

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

image-20221111103411276

image-20221111103421371

JSP 文件上传

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

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

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

image-20221111103944382

JSP 自动刷新

设置页面十秒自动刷新

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<body>
<%
    response.setIntHeader("Refresh", 10);
    Date date = new Date();
    out.print(date);
%>
</body>
</html>

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"%>
<html>
<body>
<%
    response.setIntHeader("Refresh", 10);
    Date date = new Date();
    out.print(date);
%>
</body>
</html>

JSP 发送邮件

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

JSP 标准标签库(JSTL)

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

f0njl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值