1
2
3
4
5
6
7
8
9
<html>
<head>
<title>jsp</title>
</head>
<body>
<%
out.println("hello,world");
%>
</body>

jsp 处理

  • 浏览器发送HTTP请求给服务器
  • 服务器识别出这是对JSP的请求,并将该请求传递给JSP引擎,
  • JSP引擎从磁盘载入JSP文件,然后将他们转换为Servlet。
  • JSP引擎将servlet编译成可执行类,并且将原始请求传递给Servlet引擎。
  • Web 服务器的某组件将会调用 Servlet 引擎,然后载入并执行 Servlet 类。在执行过程中,Servlet 产生 HTML 格式的输出并将其内嵌于 HTTP response 中上交给 Web 服务器。
  • Web 服务器以静态 HTML 网页的形式将 HTTP response 返回到您的浏览器中。

    JSP 生命周期

  • 编译阶段:

    servlet容器编译servlet源文件,生成servlet类

  • 初始化阶段:

    加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

  • 执行阶段:

    调用与JSP对应的servlet实例的服务方法

  • 销毁阶段:

    调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

属性范围

1
2
3
4
page: 只在一个页面中保存属性,跳转之后无效。
request: 只在一次请求中保存,服务器跳转后依然有效。(地址没变就是一次请求)
session: 在一次会话范围内, 无论何种跳转都可以使用,但是新开浏览器就无法使用了。
application: 在整个服务器上保存,所有用户都可以使用。

JSP 语法

脚本程序的语法格式<% 代码片段 %>

如果要正常显示中文,在JSP 文件头添加

1
<%@ page language="java" contentType="text/html"; charset=UTF-8 pageCoding="UTF-8"%>

JSP 声明

一个声明语句可以声明一个或者多个变量方法,供后面Java代码使用

1
2
3
<%! declaration; [ declaration; ]+ ... %>
<%! int i=0;%>
<%! Book book = new Book(); %>

JSP 表达式

JSP的表达式先被转化为String, 然后插入到表达式出现的地方 不用分号结束表式。

1
2
<%= 表达式%>
<%= (new java.util.Date()).toString()%>

JSP注释

1
<%--zhushi--%>

JSP 指令

1
2
3
4
<%@ directive attribute="value"%>
<%@ page attribute="value" %>
<%@ include file="文件相对 url 地址" %>
<%@ taglib uri="uri" prefix="prefixOfTag" %>//URI确定标签库位置,prefix确定标签库前缀。

JSP 行为

1
<jsp:action_name attribute="value" />

JSP 隐藏对象

七大对象

Request Response Out Session Application Config PageContext Page Exception

MIME

(Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。

JSP 标准标签库 (JSTL)和EL表达式

EL(Expression Language) 表示式语言

EL表达式的主要作用
  • 获取数据 。EL 表达式主要用于替换JSP页面的脚本表达式,以从各种类型WEB作用域中检索Java对象,获取数据
  • 执行运算。利用EL 表达式进行基本的关系运算,逻辑运算 ,算术运算。
  • 获取WEB 开发常用对 。EL 表达式定义了一些隐式对象。

EL表达式以${ }定义 结构如下

1
${expression}         ${x+y}

EL 表达式可以返回任意类型的值,如果返回一个带属性的值,用 . 或者 [ ] 访问其属性。如果 class.propertyName 的propertyname不是Java变量名,则只能使用[]运算符。要访问HTTPSession 可以 /获取HTTpsession的Id

1
${pageContext.session}   ${pageContext.session.id}
EL表达式运算符
1
2
3
4
+ - * / % &&和and ||和or !和not == != >= <= < >  
关系运算符返回boolean 值 ${1==2} 返回false
${statement ?A:B} 正确A 错误B
empty 用来检测作用域中该变量是否存在, 例:${empty username}
EL的11个隐式对象
  • pageContext JSp的上下文对象
  • param 一个包含所有请求参数并用参数名做key的map ${param.name} 取出参数
  • paramValues一个包含所有请求参数并用参数名做key的map 检索一个字符串数组而不是单个的值
  • header 包含请求标题 并用标题名做key 的map
  • headerValues 包含请求标题 并用标题名做key 的map 是个数组
  • cookie 包含当前请求对象cookie对象的map
  • initparam 包含所有环境初始化参数
  • pagescope map 包含页面域内所有属性
  • requestscope map 包含请求域内所有属性
  • Sessionscope map 包含会话域内所有属性
  • applicationscope map 包含应用程序上下文域内的所有属性
JSTL

有五个类别,分别是 核心标签(包含web常见工作,循环,输入输出等),格式化标签(语言区域,消息,数字,日期格式化),SQL 标签(访问数据库),XML标签(访问xml文件),函数标签(集合长度 字符串操作)

1
<%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core"%>

通过上述方式引入标签

Core 标签库

14个标签被分成4类

  • 多用途核心标签 <c:out> <c:set> <c:remove> <c:catch>
  • 条件控制标签 <c:if> <c:choose><c:when> <c:otherwise>
  • 循环控制标签 <c:foreach> <c:fortokens>
  • URL相关标签 <c:import> <c:url><c:redirect><c:param>

#####<c:out> 用于显示数据

1
<c:out value=${sessionScope.username} default="游客">

<c:set> 为变量赋值

1
2
3
4
var 表示创建的变量名 
<c:set var="username" value="wkn" scope="page"/>
target 要被赋值的javabean实例名称 property javabean 属性名称
<c:set target=${pagescope.user} property="username" value="w">

<c:remove> 删除scope中的值

1
<c:remove var="username" scopre="page"/>

<c:if> 对条件进行测试

1
2
3
4
test 判断条件 var 保存判断结果的变量名为true或者false scope 范围
<c:if test="${param.loginmae=='wkn'&& param.pass=='123'}">
成功
</c:if>

<c:choose> <c:when> <c:otherwise>

复杂的判断条件用上面三个 choose只作为父标签存在,另外两个是子标签

when标签等价于if标签

1
2
3
4
5
6
7
8
<c:choose>
<c:when test="${param.loignname==‘w’}">
success
</c:when>
<c:otherwise>
fail
</c:otherwise>
</c:choose>

<c:foreach> 循环控制

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
33
begin 开始条件 end 结束条件  step 步长 items集合的遍历对象
var 循环集合中元素的变量名
varstatus='status' 保持循环状态的变量 (该绑定值封装了当前遍历的状态,比如,可以从该对象上查看是遍历到了第几个元素:${status.count}
${status.index} 查看序列号${status.first}返回bool(是否是首个)

遍历list
<table>
<tr>
<c:foreach items=${requestscope.booklist} var="book">
<td>${book}</td>
</c:foreach>
</tr>
</table>


<table>
<tr><td>编号</td><td>名字</td><td>作者</td></tr>
<c:foreach items=${requestscope.booklist} var="book">
<tr>
<td>${book.id}</td><td>${book.name}</td><td>book.au</td>
</tr>
</c:foreach>
</table>

map
<table>
<tr><td>key</td><td>编号</td><td>名字</td></tr>
<c:foreach items=${requestscope.bookmap} var="book">
<tr>
<td>${book.key}</td><td>${book.value.id}</td><td>book.value.name</td>
</tr>
</c:foreach>
</table>

<c:fortokens>使用分隔符分隔指定的字符串

1
2
3
4
delims 分隔符
<c:fortokens items="aa,bb,cc,dd" delims="," var="s">
${s}
</c:fortokens>

<c:import>包含另一个标签

1
<c:import url="title.jsp"/>

c:url 组合一个正确的url地址

核心标签

是最常用的JSTL 标签, 引用核心标签库的语法如下

1
2


1
2
<c:out> 在JSP 中显示数据 <c:set> 用于保存数据 <c:remove> 删除数据
<c:catch>处理异常 <c:import>检索URI,并传给页面<c:forEach> 基础迭代标签 <c:param>给包含或重定向的页面传递参数<c:redirect>重定向一个新的URL <c:url>使用可选参数创造一个URL
格式化标签
1
2
<%@ taglib prefix="fmt" 
uri="http://java.sun.com/jsp/jstl/fmt" %>