JSP
指令标记,动作标记和自定义标记
指令标记
page标记
1 | |
contentType:设置MIME类型和字符编码
import:导入类
pageencoding:定义jsp的编码格式
include标记
1 | |
导入整个页面
动作标记
include标记
1 | |
通过jsp:include可以导入页面(通过动态标签的方式)
在标签对里面使用jsp:param可以在导入页面的时候传参
forward标记
执行页面跳转——转发
page属性指定转发的页面
1 | |
通过forward标签可以转发到指定页面
注:forword转发后导航栏网址不变,其目标是简化问题的解决
JSP内置对象
概念:在JSP页面的java程序片和java表达式中可以直接使用的局部变量
- request
1 | |
- response
1 | |
注:区别于转发和重定向,转发是服务端操作,浏览器地址不改变,重定向是浏览器操作,浏览器地址栏改变
- out
response.getWriter获取的对象
out.print显示结果
- session
- public void setAttribute(String key,Object value)
- public Object getAttribute(String Key)
- public void removeAttribute(String key)
从打开浏览器开始到关闭浏览器结束
实质上是请求中的方法 request.getSession()
session不同于请求和响应,不会随着请求响应的变化而关闭
- application
以服务器开始为开始,以服务器结束为结束
application的方法和session基本相同
- page、pageContext、config、exception
page对象以页面为存活时间,无论是转发,重定向都会消失
page对象是当前JSP页面转译生成的java文件所创建的对象
pageContext对象可以获取当前页面的访问对象及相关页面信息
setAttribute方法
getAttribute方法
findAttribute()方法
javabean
javaBean也分为三大类,分别是成员类、工具类、判别类
三个基本动作标记
- <jsp:useBean>
- <jsp:getProperty>
- <jsp:setProperty>
使用useBean标签寻找/创建对象
1 | |
useBean的运行步骤
最开始先从scope(内置对象)中寻找相应存在attribute中的id(对象名)
这一步用了getAttribute的方法
如果没有,就向外层寻找,比如scope写的是request,当request中没有时,向Session或application中寻找
这一步用了findAttribute方法
如果找到在1,2的步骤中找到,则标签返回此对象
如果都没找到,则在scope中的Attribute中根据class(类)实例化此对象
使用访问器
1 | |
使用此访问器可直接访问对象中某一成员变量,返回值是该成员变量。
此访问器除直接访问变量之外,还可以访问以get/is开头的方法,直接返回其方法的返回值
使用修改器
1 | |
使用此修改器能直接修改对象中成员变量的属性
需注意,Property取值为*,必须保证传参时变量名称一致
由于表单中传过来的数据类型都是String 类型的,Jsp内在机制会把这些参数转化成Bean属性对应的类型。
1 | |
使用此修改器能直接修改对象中成员变量的属性
同方式一,也会把param传来的参数自动转化成成员变量的类型
1 | |
使用此修改器能直接修改对象中成员变量的属性
同方式一,也会把value中的值(表达式或字符串)自动转化成成员变量的类型
Servlet
继承于HttpServlet类的一个子类
Jsp相当于把java程序片卸载网页中,Servlet相当于把网页写在;Java类中
常用方法
public void init(ServletConfig config)
public void doGet/doPost(HttpServletRequest request,HttpServletResponse response)
publie void destroy()
步骤
创建Servlet类
在web.xml文件中注册Servlet对象,格式:
1
2
3
4
5
6
7
8
9
10
11<web-app>
……
<servlet>
<servlet-name>Servlet对象名</servlet-name>
<servlet-class>Servlet类全名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet对象名</servlet-name>
<url-pattern>/格式</url-pattern>
</servlet-mapping>
</web-app>或者在创建Servlet时利用@WebServlet完成配置Servlet:格式
1
2
3
4@WebServlet("/格式")
public class XxxServlet extends HttpServlet{
}亦或者多配置一些信息(对象名,多个格式,或者是带一些默认值)
1
2
3
4
5
6
7
8
9
10@WebServlet(name="对象名字",
urlPatterns={
"/格式1",
"/格式2"
}
initParams={
@WebInitParam(name="param",value="123"),
……
}
……)
内置对象的一些特殊的定义方法
因为request和response是形参,可以直接使用。但是其他的内置对象需要单独定义
out:
1 | |
session:
1 | |
1 | |
application:
1 | |
EL
Expression Language(表达式语言)
EL的底层操作就是调用内置对象方法
表达式的构成
隐式对象
param、paramValues、initParam
jsp内置对象 EL隐式对象 request.getParameter(“a”) ${param.a} request.getAttribute(“a”) ${requestScope.a} session.getAttribute(“a”) ${SessionScope.a} pageConpage.findAttribute(“a”) ${a} 获取a中的属性value ${sessionScope.a.value}
scope中文释义:范围
- 常量:boolean、整数、浮点数、字符串和null
- 运算符:算术运算符、关系运算符、逻辑运算符、空
JSTL
JSP Standard Tap Liberary(JSP标准标记库)
引入格式
1 | |
标记库类型
- 核心标记库(core)——c
- 数据库访问标记库(sql)——sql
- XML标记库(xml)——x
- 国际化标记库(fmt)——fmt
- 函数标记库(functions)——fn
核心标记库
forEach
1 | |
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。
我们一般用<c:forEach> 来遍历需要的数据,为了方便使用,varStatus属性可以方便我们实现一些与行数相关的功能,如:奇数行、偶数行差异;最后一行特殊处理等等。
varStatus 是循环索引。先就varStatus属性常用参数总结下:
| 属性值 | 功能 |
|---|---|
| ${status.index} | 输出行号,从0开始。 |
| ${status.count} | 输出行号,从1开始。 |
| ${status.current} | 当前这次迭代的(集合中的)项 |
| ${status.first} | 判断当前项是否为集合中的第一项,返回值为true或false |
| ${status.last} | 判断当前项是否为集合中的最后一项,返回值为true或false |
if
1 | |
if用于单分支判断
choose、when和otherwise
1 | |
choose、when和otherwise用于多分支判断
具体使用时可与if elseif else 与switch类比
set
1 | |
新建变量
1 | |
为对象成员变量赋值
url
1 | |
该标签用于生成一个 URL 路径的字符串,该符串可用于 标记实现 URL 的链接,或者用于网页转发和重定向等
1 | |
redirect
1 | |
重定向
注:例如url和redirect标记均可写成双标记形式,在中加入c:param标记传参
数据库访问标记库
setDataSource
1 | |
建立与数据库的连接源
query
1 | |
注:需使用查询结果变量的rows方法返回查询结果集
可使用c:foreach标签遍历结果集