Jsp技术
Java server pages ----- java服务页面
Servlet技术的延续:替换之前项目中用来展示页面(View)的Servlet
Jsp 技术 = html标签 + java代码
1、简化开发 (代码的简洁)
2、避免修改代码重启服务器
展示系统当前时间!!!
java代码需要进行嵌套(使用脚本 )
访问Jsp
1、需要将jsp页面部署到服务器中
2、路径 locahost:8989/项目名称/jsp页面名称
3、位置 Webroot目录中 和 html等静态资源位置相同。
一、脚本语法
1.1 输出脚本 *
将脚本中的内容输出到网页中。
相当于 System.out.print(输出控制台)
注意:输出脚本中结尾没有 ;
1.2 声明脚本
变量、方法、类 等等的声明
1.3 普通脚本 *
脚本中嵌套java代码。 唯一:不能去声明方法。
注意: 脚本 和 html标签/脚本 之间的互相嵌套
使用jsp页面输出99乘法表,奇偶行不同颜色。
for(int j=1;j<=i;j++){
if(i%2==0){%>
*=
*=
}%>
二、指令
语法 :
2.1 page
1. import="java.sql.*,java.util.*" 或者书写多个page指令标签
2. pageEncoding="UTF-8" 从.jsp到.class过程中的编码
3. contentType="text/html;charset=UTF-8" 输出页面的编码格式
4. session="true" true/false 和 Servlet中相同
5. isELIgnored="false" 是否忽略EL表达式 ***
6. errorPage="错误的提示页面路径" 本页面发生异常会跳转至错误的提示页面
7. isErrorPage="true" 提示页面必须将false改为true
注意: Jsp页面本质上就是一个Servlet,由服务器解析的时候自动生成 .java 和 .class文件
.jsp ----> .java -----> .class 文件
2.2 include 静态包含(源码包含)
一个jsp页面由多个独立页面组成,包含是在本页面中去引入其他页面代码。
file="另一张jsp页面的路径"
问题:
相互引用页面会产生代码的冲突。维护成本会增加。
2.3 taglib
三、动作
3.1 include 动态包含(结果包含)
一个jsp页面由多个独立页面组成,包含是在本页面中去引入其他页面的执行结果。
3.2 跳转 (了解)
四、隐含对象 (内置对象)
不需要开发人员手动创建,就可以直接使用的对象。(在脚本中使用!!) 九个必须都记住!!!
*1.request
//接收数据request.getParameter();
//作用域 request.set/getAttribute();
//动态获取项目名称 request.getContextPath()
2.response
*3.session
//作用域相关 session.set/getAttribute();
4.application (ServletContext)
//作用域相关 application.set/getAttribute();
5.config
6.out
7.page 相当于 this
8.exception 在iserrorPage=“true”中使用
*9.pageContext
9.1 是一个作用域 当前页面
pageContext可以操作其他三个作用域
pageContext.setAttribute("key", "value",pageContext.REQUEST_SCOPE);
*9.2 获取其他八个内置对象
pageContext.getXXXX();
五、EL表达式
从作用域中获取数据 ${ 作用域.name }
存:request.setAttribute(String name, Object value);
取:
脚本: request.getAttribute(String name);
EL : ${requestScope.name}
注意:
1.el表达式没有数据的展示可能是本身没有数据或者语法书写错误。
2.如果没有数据el不展示但是脚本会显示null
EL中的作用域都是什么?
脚本中的内置对象作用域:pageContext request session application
EL表达式中获取数据的作用域: pageScope requestScope sessionScope applicationScope
特殊: ${ name } 从小到大进行作用于中name的依次匹配,最终输出作用域范围最小的那一个。
1. 基本类型 + String + Date
2. 自定义类型(对象)
脚本:
EL : ${requestScope.u.name}
注意: .name 是调用了User类中的 getName()方法
. 相当于get 首字母由大写转换为小写
//对象中的属性又是自定义对象
${requestScope.u.address.city}
3. 支持运算
算术运算 + - * / %
${requestScope.u.id + 1 }
比较运算 > gt < lt >= ge <= le == eq != ne
逻辑运算 && || !
${requestScope.flag1 && requestScope.flag2}
${!requestScope.flag1}
empty 空运算 判断作用域中 键name 是否存在
是否为空 true:空 false:非空
内置对象 (EL表达式中)
1、 pageContext 可以获取其他内置对象
EL获取项目名称?
${pageContext.request.contextPath}
2、 param
用来接收提交的数据 相当于request.getParamter();
http://localhost:8989/Jsp_Day2/el2.jsp?name=liuyang
收数据 ${ param.name }
3、 cookie
cookie.getName() cookie.getValue();
${cookie}
${cookie.JSESSIONID}
${cookie.JSESSIONID.name}
${cookie.JSESSIONID.value}
记录用户名密码?
完成登陆操作之后创建两个Cookie对象 username 、 password
注意:中文的处理
六、JSTL标签
Jsp 标准标签库
和EL表达式一起使用替换页面中所有的脚本(展示数据用的脚本)
引入标签库 :
uri : 标签库的资源路径 prefix : 别名 在页面中使用的开头标识。
常用标签
1. 判断相关的标签
1.1
hello world
没有else的!!!!!
1.2
id 大于 5
id 大于 6
2. 集合数据的输出
List/Set 集合
${addr.city}
${addr.street}
Map 集合
${addr}
${addr.key}
${addr.value.city}
补充: 标签中的属性
begin="0" end="2" 从哪开始遍历到哪结束遍历 list 顺序 set、map 个数 数量
step="2" 步伐 隔行展示 3:中间间隔两个
varStatus="a" 遍历的状态
遍历下标:${a.index}
遍历次数:${a.count}
是否是第一次遍历:${a.first}
是否是最后一次遍历:${a.last}
JSTL标签的补充
日期
URL重写
cookie禁用了session怎么办? jsp页面中的访问路径需要进行url重写
// action=“/项目名称/资源路径”
context=“项目名称” value=“资源路径”
/Jsp_Day2/资源路径;jsessionid=622D6234E21CE7FB4B56DD5758E89443
两张表
用户表 id username realname password sex age
商品表 id pro_name price description
功能:
登陆、注册、验证码
展示所有商品、删除、修改、添加
展示当前时间、安全退出、强制登陆、显示当前登陆用户、模糊搜索
分页!!购买!!
分页
SQL语句的分页 rownum
购物车
1、数据存入对象 全新的对象 VO类 shopitem
2、使用什么集合存储 多个shopitem对象? Map集合 key-value 商品ID – shopitem
3、Map集合应该存在哪个作用域中? session作用域