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 本质是一个 Java 类(Servlet),我们可以在 JSP 页面中嵌入 Java 代码,即:JSP = HTML + Java。
JSP是一种动态网页开发技术,和html相似,但html是一种静态网页,除非改变html源码,否则页面内容不会改变
,而JSP则不同,请求JSP文件时,服务器会经历一次动态资源(JSP)到静态资源(HTML)的转化,服务器会自动把 JSP 中的 HTML 片段和数据拼接成静态资源响应给浏览器。也就是说,JSP 运行在服务器端,但最终发给客户端的是已经转换好的 HTML 静态页面。
JSP 的功能与 CGI 相似,但相对于 CGI 来说,JSP 具有很多优势。
JSP 是 Java EE 不可或缺的一部分,是一个完整的企业级应用平台。这意味着 JSP 可以用最简单的方式来实现最复杂的应用。
JSP 生命周期定义了 JSP 从创建到销毁的整个过程。
JSP生命周期的各个阶段:
将JSP编译成 Servlet。
当编译结束时,容器会调用jspInit() 方法来进行初始化,可以在这里进行一些初始化的参数配置等一次性工作。
容器调用 _jspService() 方法,由jsp容器自动创建的处理jsp Page的方法,由jsp容器创建,不能由作者定义。
容器调用 jspDestroy()方法,jsp Page由于某种原因被关闭的时候调用该方法,由作者创建。
feng.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%out.print("Hello f0njl!");%>
效果:
jsp文件主要由五部分组成,由feng.jsp文件为例:
JSP指令用来设置整个JSP页面相关的属性
指令可以有多个属性,以键值对的形式表示,并用逗号隔开,语法格式为:
<%@ directive attribute="value" %>
feng.jsp中的指令部分为:<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
JSP中的三种指令标签:
指令 | 描述 |
---|---|
<%@ page … %> | 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入标签库的定义 |
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 | 确定脚本元素能否被使用 |
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。
Include指令的语法格式如下:
<%@ include file="文件相对 url 地址" %>
代码:
index.jsp
<%@page language="java" pageEncoding="UTF-8"%>
include指令实例
<%out.print("Hello f0njl!");%>
<%@include file="time.jsp"%>
time.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
当前时间:
<%= new Date() %>
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
该指令实例不太会用,就不写了。
修改一下feng.jsp文件,加一个注释。
注释分为显示注释(html)和隐式注释(jsp)。
显示注释:客户端在查看源码时能够看得见的注释内容。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%out.print("Hello f0njl!");%>
效果:
隐式注释:客户端在查看源代码时看不到注释内容。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%out.print("Hello f0njl!");%><%--注释内容--%>
效果:
语法:
<% 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 %>
效果:
注意,必须要引用到自己所需要用到类文件。
在JSP页面中定义变量,方法或类。
示例:
<%@ page contentType="text/html;charset=GB2312"%>
<%!
int num=0;
synchronized void countPeople()
{
num++;
}
%>
<%
countPeople();
%>
您是第<%=num%>个访问本站的客户。
效果:
size指定的是字体大小,BGCOLOR指定背景颜色。
可以将动态信息显示在页面上
<%= 变量或表达式%>
示例:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
当前时间:
<%= new Date() %>
效果:
与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。
利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
动作元素只有一种语法,它符合XML标准:
动作元素基本上都是预定义的函数,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动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
f0njl博客
include 动作实例
time.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
当前时间:
<%= new Date() %>
jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。
这个功能非常有用,因为它使得我们可以发挥 Java 组件复用的优势。
jsp:useBean动作最简单的语法为:
TestBean.jsp
<%@ page language = "java" import="test.TestBean" %>
JSP中使用 Java Bean的测试
消息:
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;
}
}
jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性page。语法格式如下所示:
以下是forward相关联的属性:
属性 | 描述 |
---|---|
page | page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个 Java Servlet. |
forward.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
JSP中jsp:forward的基本语法
forward动作示例页面
time.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
当前时间:
<%= new Date() %>
jsp:plugin动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。
如果需要的插件不存在,它会下载插件,然后执行Java组件。 Java组件可以是一个applet或一个JavaBean。
plugin动作有多个对应HTML元素的属性用于格式化Java 组件。param元素可用于向Applet 或 Bean 传递参数。
这个没见到过,不太会用,见到以后再补充。
jsp:element 、 jsp:attribute、 jsp:body动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。
jsp:text动作元素允许在JSP页面和文档中使用写入文本的模板,语法格式如下:
模板数据
我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理。浏览器中使用 GET 和 POST 方法向服务器提交数据。
<%@ 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")%>
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")%>
index.html
效果图:
JSP 和 Servlet 中的过滤器都是 Java 类。
过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
过滤器
过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法:
序号 | 方法 & 描述 |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法完成实际的过滤操作,当客户端的请求与过滤器设置的 URL 匹配时,Servlet 容器将先调用过滤器的 doFilter 方法。FilterChain 用于访问后续过滤器。 |
2 | public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。 |
3 | public void destroy() Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。 |
设置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")%>
feng.html
Cookie设置
访问feng.html然后即可设置cookie。
直接用分析使用上边的代码就可以。
基本文件上传都会存在一个前端的html文件,然后其可以直接作用到后端文件分析的文件,最后会又有一个响应的文件回显。
设置页面十秒自动刷新
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
response.setIntHeader("Refresh", 10);
Date date = new Date();
out.print(date);
%>
参考:JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
标签库的出现感觉就是为了方便使用许多方法,让开发者更加便捷。
析使用上边的代码就可以。
基本文件上传都会存在一个前端的html文件,然后其可以直接作用到后端文件分析的文件,最后会又有一个响应的文件回显。
[外链图片转存中…(img-s28Do2lZ-1668134980650)]
设置页面十秒自动刷新
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
response.setIntHeader("Refresh", 10);
Date date = new Date();
out.print(date);
%>
参考:JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
标签库的出现感觉就是为了方便使用许多方法,让开发者更加便捷。