JSP
JSP可以用来进行数据交互,数据实时更新
程序框架
-
C/S
服务器/客户端 - B/S
浏览器/服务器
执行原理- 基于请求和向右的
- 客户端向服务器发生请求
- 服务器向右客户端
关键字 URL、HTTP、URI(地址中端口后边的部分)
tomcat服务器
apache推出的web应用服务器
可以把java编译的代码运行到服务器,端口配置需要在服务器配置
运行web项目时,需要配置tomcat环境。
JSP基本使用
- JSP基本用法
可以直接在html页面中嵌入java代码
<% %> //书写代码
<%= %> //表达式
<%! %> //注释
<%@page %> //指令
<%@page import="com.hnxy.dbutils.JdbcUtils"%>
<%@page import="org.apache.commons.dbutils.QueryRunner"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
- JSP执行过程
- 翻译
将jsp文件翻译成java文件 - 编译
将java文件编译成字节码文件 - 执行
执行字节码问题
- 翻译
内置对象
jsp内置对象是web容器创建的一组对象
引入原因
由于功能原因,比如客户端/服务端的区分,可以创建多个jsp文件,多个jsp文件需要互相传递数据
那么就需要内置对象了,以此来处理数据。后续会详细介绍
- request
代表了客户端的请求信息
作用域为一次请求 - response
代表了对客户端的相应
只在jsp页面中有效 - session
由服务器自动创建的与用户请求相关的对象
服务器为每一个用户生成一个session - application
可以将信息保存在服务器中
类似于全局变量 - out
在浏览器输出信息 - pageContext
取得任何范围的参数 - config
获得服务器的配置信息 - page
对象代码的jsp本身 - exception
显示异常信息el
el Expression Language
表达式语言:
引入原因
JSP中嵌入java代码,整体感觉java代码与html代码互相嵌套
<%
for(Person p : persons){
%>
<tr>
<td> <%=p.getId() %> </td>
<td> <%=p.getName() %> </td>
<td> <%=p.getSex() %> </td>
<td> <%=p.getAge() %> </td>
<td> <%=p.getFrom() %> </td>
</tr>
<%
}
%>
使用el与jstl后
<c:forEach items = "${persons }" var="p">
<tr>
<td>${p.id }</td>
<td>${p.name }</td>
<td>${p.sex }</td>
<td>${p.age }</td>
<td>${p.from }</td>
</tr>
</c:forEach>
可以做到 HTML代码中没有java代码,使用统一的标签形式
- 语法规则
${EL expression}// 在Servlet或JSP中保存数据 request.setAttribute("username", "admin"); // 在JSP中访问数据 姓名: ${username}
jstl
JavaServer Pages Standard Tag Library
引入原因
el作为简单的表达式,不能做逻辑、控制等
jstl优点就是提供一组标签,做逻辑运算。
<%-- 通用标签 --%>
<c:set var="a" value="123"></c:set>
el:${a}<br>
jstl:<c:out value="${a}"></c:out>
<c:remove var="a"></c:remove>
el:${a} <br>
jstl:<c:out value="${a}"></c:out>
<br>
<%-- 分支标签 --%>
<c:set var="b" value="1"></c:set>
<c:if test="${b>=0}">
>=0
</c:if>
<c:if test="${b<0}">
b<0
</c:if>
<c:choose>
<c:when test="${b>0}">
>0
</c:when>
<c:when test="${b==0}">
b=0
</c:when>
<c:otherwise>
coco
</c:otherwise>
</c:choose>
<br>
<%-- 循环标签 --%>
<c:forEach var="i" begin="1" end="9" step="2">
${i},
</c:forEach>
请求转发与重定向
-
请求转发
request.getRequestDispatcher("page2.jsp").forward(request,response);
- 重定向
response.sendRedirect("page2.jsp");
# | 请求转发 | 重定向 |
---|---|---|
1 | 地址栏中不会显示最终跳转的地址 | 地址栏中会跳转到最终页面的地址 |
2 | 服务端行为 | 客户端行为 |
3 | 查询 | 增删改 |
session对象
保存在服务端
会话描述
一个会画就是在一段时间内,一个客户端与web服务器的一连串相关的交互过程
- 会话
在一段时间内,客户端与服务器的一连串的交互过程 - 作用域
一次会话有效,无论使用数据转发还是重定向,都可以保存数据 - 应用场景
用户登录成功,保存用户信息 - session失效
- 关闭浏览器
- 调用invalidate方法
- 最大不活动时间到期了
<!-- page1.jsp -->
<%
//在session作用域保存数据
session.setAttribute("msg3", "session msg");
//输出回话的id
System.out.println(session.getId());
%>
session:${msg3}<br>
<%
//移除session保存的数据
session.removeAttribute("msg3");
//使session失效
session.invalidate();
//设置最大不活动时间,单位秒
session.setMaxInactiveInterval(10);
%>
<!-- page2.jsp -->
PageContext:${msg}<br>
request:${msg2}<br>
session:${msg3}<br>
application:${msg4}<br>
<%
System.out.println(session.getId());
%>
cookie对象
保存在客户端
- 写
- 创建cookie对象,保存名值对
- 设置cookie的有效期
- 将cookie的数据写到客户端
- 读
- 使用request对象,获得客户端所有的cookie信息
- 遍历cookie数组
<!-- page1.jsp -->
<%
//cookie的使用,写
//创建对象
Cookie cookie = new Cookie("msg5", "cookie msg");
//设置有效期,单位是秒
cookie.setMaxAge(7 * 24 * 60 * 60);
//写到客户端
response.addCookie(cookie);
%>
<!-- page2.jsp -->
<%
System.out.println(session.getId());
//读cookie 保存的数据
//获得客户端所有的cookie信息
Cookie[] cookies = request.getCookies();
//遍历数组,查找自己保存的cookie信息
for(Cookie c:cookies){
if("msg".equals(c.getName())){
System.out.println(c.getValue());
}
}
%>
session与cookie对比
# | session | cookie |
---|---|---|
1 | 保存在服务器 | 保存在客户端 |
2 | 数据类型是Object | 数据类型是String |
3 | 随着session的失效数据销毁 | 在有效期范围内有效 |
2 | 保存重要信息 | 保存不重要信息 |