最近,由于最近项目需要集成到老项目中去,采用原始的前后端不分离开发,需要学习jsp语言。
如有不正确的地方,请大家提出来,我会更正,共同进步,谢谢。
JSP简介
1. JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP 生命周期
1. 编译阶段:
当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
编译的过程包括三个步骤:
解析JSP文件。
将JSP文件转为servlet。
编译servlet。
2. 初始化阶段:
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了,就像下面这样:
123
public void jspInit(){ // 初始化代码}
一般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。
执行阶段:
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。
_jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数,就像下面这样:
12345
void _jspService(HttpServletRequest request, HttpServletResponse response){ // 服务端处理代码}
_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。
销毁阶段:
SP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。
jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。
12345
jspDestroy()方法的格式如下:public void jspDestroy(){ // 清理代码}
JSP语法
语法格式:
<% 代码片段 %>
<jsp:scriptlet>
代码片段
</jsp:scriptlet>
中文编码问题:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
JSP声明
<%! declaration; [ declaration; ]+ ... %>
<jsp:declaration>
代码片段
</jsp:declaration>
例子:
<%! int i = 0; %>
JSP表达式
<%= 表达式 %>
<jsp:expression>
表达式
</jsp:expression>
JSP注释
<%-- 注释 --%>
JSP指令
JSP指令用来设置与整个JSP页面相关的属性。
<%@ directive attribute="value" %>
例子:
<%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库的定义,可以是自定义标签
JSP行为
JSP行为标签使用XML语法结构来控制servlet引擎。
<jsp:action_name attribute="value" />
JSP隐含对象
JSP支持九个自动定义的变量,江湖人称隐含对象。
request HttpServletRequest类的实例
response HttpServletResponse类的实例
判断语句
if-else
<%! int day = %>
<% if (day == 1 | day == 7) { %>
<p>今天是周末</p>
<% } else { %>
<p>今天不是周末</p>
<% } %>
switch-case
<%
switch(day) {
case 0:
out.println("星期天");
break;
case 1:
out.println("星期一");
break;
default:
out.println("星期六");
}
%>
循环语句
for
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
<font color="green" size="<%= fontSize %>">
菜鸟教程
</font><br />
<%}%>
while
<%while ( fontSize <= 3){ %>
<font color="green" size="<%= fontSize %>">
菜鸟教程
</font><br />
<%fontSize++;%>
<%}%>
JSP 字面量
布尔值(boolean):true 和 false;
整型(int):与 Java 中的一样;
浮点型(float):与 Java 中的一样;
字符串(string):以单引号或双引号开始和结束;
Null:null。
JSP指令
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。
<%@ directive attribute="value" %>
Page指令
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
<%@ page attribute="value" %>
<jsp:directive.page attribute="value" />
Include指令
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。
<%@ include file="文件相对 url 地址" %>
<jsp:directive.include file="文件相对 url 地址" />
Taglib指令
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
<%@ taglib uri="uri" prefix="prefixOfTag" %>
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
JSP动作元素
JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。
<jsp:action_name attribute="value" />
JSP隐式对象
JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。
JSP客户端请求
当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的。您可以查阅HTTP协议来获得更多的信息。
JSP服务器响应
Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。
JSP HTTP状态码
以状态行+CRLF(回车换行)开始
零行或多行头模块+CRLF
一个空行,比如CRLF
可选的消息体比如文件,查询数据,查询输出
JSP 表单处理
JSP 读取表单数据
getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型
getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。
getInputStream():调用此方法来读取来自客户端的二进制数据流。
JSP过滤器
JSP 和 Servlet 中的过滤器都是 Java 类。
过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet。过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。
过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
在客户端的请求访问后端资源之前,拦截这些请求。
在服务器的响应发送回客户端之前,处理这些响应。
JSP Cookie 处理
Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息。在servlet技术基础上,JSP显然能够提供对HTTP cookie的支持。
JSP Session
有三种方法来维持客户端与服务器的会话
Cookies
隐藏表单域 <input type="hidden" name="sessionid" value="12345">
重写URL http://w3cschool.cc/file.htm;sessionid=12345
session对象
JSP利用servlet提供的HttpSession接口来识别一个用户,存储这个用户的所有访问信息。
默认情况下,JSP允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。
JSP 文件上传
JSP 日期处理
使用JSP最重要的优势之一,就是可以使用所有Java API。本章将会详细地讲述Java中的Date类,它在java.util包下,封装了当前日期和时间。
JSP 页面重定向
当需要将文档移动到一个新的位置时,就需要使用JSP重定向了。
JSP 点击量统计
JSP 自动刷新
想象一下,如果要直播比赛的比分,或股票市场的实时状态,或当前的外汇配给,该怎么实现呢?显然,要实现这种实时功能,您就不得不规律性地刷新页面。