Jsp技术
Java Server Pages — java服务页面
页面中直接使用 HTML标签 + Java代码 , 简化现有Servlet开发中VIEWJsp过于繁琐的步骤。
展示系统当前时间
1. 创建页面 xxx.jsp
2. 代码的书写
<html>
<head></head>
<body>
<h1>系统当前时间:<%= new java.util.Date() %></h1>
</body>
</html>
3. 比较与Servlet
1. 简化 Html标签+Java代码
2. 修改完代码不再需要去重启服务器,直接刷新页面
3. 在项目中的存放路径和原有的html位置相同,
访问路径 : localhost:8989/Jsp_Day1/first.jsp
一、脚本
1、普通脚本 <% %>
脚本中书写一般的java代码
2、声明脚本 <%! %>
对于成员变量,类,函数的声明。 特殊:函数,剩下都建议直接使用普通脚本。
3、输出脚本 <%= %>
类似于打印语句, 将java代码输出在页面中。
使用Jsp页面输出99乘法表,同时保证奇偶行颜色不一样。
二、指令
2.1 page <%@page 属性=”属性值“ %>
1. import="包1,包2" 注意:或者可以书写多个page指令标签
2. pageEncoding="utf-8"
3. contentType="text/html; charset=utf-8"
xxx.jsp ---> xxx_jsp.java ---> xxx_jsp.class
pageEncoding="utf-8" jsp 向 .java 转换时的编码格式设置
contentType="text/html; charset=utf-8"
:class 文件向浏览器输出页面的编码格式
response.setContentType("text/html; charset=utf-8");
本质上将jsp页面就是一个servlet类
4. session="true" 默认都是true 只有在不需要的情况下会手动修改成false
request.getSession(true/false);
5. isELIgnored="false" 当前页面是否忽略EL表达式 不忽略
6. isErrorPage="true" 当前页面为错误页面
7. errorPage="错误页面的路径" 发生错误后会跳转至错误页面
2.2 include 包含 (源码包含)
一个页面中可以去引入其他页面的显示结果共同展示。
<%@ include file="其他页面的路径" %> jsp/html
注意: 如果包含页面中出现了相同的方法或变量会存在命名的冲突。
2.3 taglib
使用标签库 需要引入标签库资源。
三、动作
<jsp:include page=“页面路径”> (结果包含) 建议使用的包含形式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovPeXWy8-1594711265606)(E:\JavaWeb\Jsp\笔记\包含的区别.png)]
Jsp页面中需要跳转 同时使用request作用域进行数据的传递
<jsp:forward page=“跳转的页面路径”
跳转是一次请求,可以使用request作用域传递数据,地址栏不发生改变。
四、隐含对象(内置对象)
在jsp页面中 , 普通脚本和输出脚本中不需要创建就可以使用的对象。
1. request *
request作用域相关的方法
request.getContextPath(); 获取当前项目名称
2. response
知道是一个内置对象,用处不大
3. session *
作用域相关操作
4. application *
就是Servlet中的ServletContext 作用域 一个项目(应用)
5. config Servlet中的一些初始化信息参数
6. out 输出流
7. exception 只能在错误页面中使用 isErrorPage="true"
8. page 相当于java中的this 指代当前jsp页面
9. pageContext *
1. 作用域 : 一个页面
注意:不仅仅可以去操作属于自己的作用域,还可以通过参数进行其他作用域的操作。
pageContext.setAttribute("name", "value",pageContext.SESSION_SCOPE);
pageContext.getAttribute("name", pageContext.APPLICATION_SCOPE);
// REQUEST_SCOPE SESSION_SCOPE APPLICATION_SCOPE
2. pageContext.getXXX 方法
获取其他八个隐含对象。
五、EL表达式
本质: 简化脚本(输出脚本),从作用域中获取数据,在页面中进行展示。
语法: ${作用域.name}
存数据:作用域.setAttribute(String name,Object value);
作用域对比
Java程序 : pageContext 、 request 、 session 、 application
EL表达式取值: pageScope / requestScope / sessionScope / applicationScope
展示数据:
EL表达式如果没有从作用域中获取数据则不会进行任何结果的显示。
脚本+Java代码会展示 null
获取数据
1.八种基本类型+String
2.用户自定义类型(对象类型)
脚本+Java代码 :<%= ((User)request.getAttribute("user")).getId() %>
EL表达式: ${requestScope.user.id}
注意: requestScope.user.id
.id 是调用了实体类用 getID() 方法 . 就相当于get关键字
3. 支持运算
3.1 算数运算 + - * / %
3.2 比较运算 >(gt) >=(ge) <(lt) <=(le) ==(eq) !=(ne)
3.3 逻辑运算 && || !
3.4 空运算 empty
是否为空 空:true 非空:false
EL表达式中的内置对象
1.pageContext
<%=request.getAttribute("name") %> 动态获取项目名称
EL表达式中 request 不等于 requestScope 只是跟作用域相关的操作有一定的关联性
${pageContext.request} 获取request对象
${pageContext.request.contextPath} EL动态获取项目名称
2.cookie
new Cookie(String name,String value);
${cookie} ---> 网站中所有cookie
${cookie.name} cookie对象地址
${cookie.name.name} name数据
${cookie.name.value} value数据
3.param 接收数据
修改 ---> 将数据默认进行填充
<a href="${pageContext.request.contextPath}/pm/update.jsp
?username=xiaohong&password=123&age=12">修改</a>
数据的接收
${param.username}
age:<input type="text" name="age" value="${param.age}"/><br/>
六、JSTL标签
Jsp标准标签库
Jstl标签 + EL表达式 在Jsp页面中进行数据的展示,目的为了完全替换用来展示的脚本。
1. 引入标签库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
uri:标签库的资源路径
perfix : 标签库的标识 约定俗成: c
2. 使用 进行数据的展示
2.1 有条件的判断展示
<c:if test="EL表达式">
</c:if>
注意: 没有else标签的存在
2.2 集合的数据展示
List、Set 集合
for(泛型 当前遍历对象:集合){}
for(泛型 var:items){}
items="EL表达式"
var="当前遍历的数据对象"
<c:forEach items="需要遍历的集合对象" var="当前遍历的数据对象 user">
${user.id}
</c:forEach>
Map 集合
var: 当前对象 key=value Entry对象
entry.key
entry.value
users:Map集合
<c:forEach items="${requestScope.users}" var="user" >
<h4>${user}</h4>
<h4>${user.key}</h4>
<h4>${user.value}</h4>
<h4>${user.value.id}</h4>
<hr/>
</c:forEach>
其余forEach中的属性:
和集合类型是没有任何关系
开始下标 : begin="1"
结束下标 : end="1" 集合中开始遍历的下标 0~n
步幅 : step="2"
遍历状态 : varStatus="u"
${u.index} 遍历下标
${u.count} 当前遍历的次数
${u.first} 是否是第一次遍历
${u.last} 是否是最后一次遍历
<c:url> 路径重写
避免cookie禁用而seesion失效的问题
JSESSIONID cookie的传输问题
action=“/项目名称/资源路径”
${pageContext.request.contextPath}/cookie
<c:url context="${pageContext.request.contextPath}" value="/cookie"></c:url>
/Jsp_Day2/cookie;jsessionid=E6141A92E5CF759DE45576E607EC4362
action=“<c:url context="${pageContext.request.contextPath}" value="/cookie"></c:url>”
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd HH:mm:ss"/>
功能
用户的 登录 和 注册
user表 字段 id username realname age password sex
展示所有的商品、添加商品、修改商品、删除
product 商品表 id name price message
展示系统当前时间、展示当前登录用户、安全退出
搜索: 按名称、价格、描述
提升:
购买、分页
yyyy-MM-dd HH:mm:ss"/>
### 功能
> 用户的 登录 和 注册
>
> user表 字段 id username realname age password sex
>
> 展示所有的商品、添加商品、修改商品、删除
>
> product 商品表 id name price message
>
> 展示系统当前时间、展示当前登录用户、安全退出
>
> 搜索: 按名称、价格、描述
>
> 提升:
>
> 购买、分页