目录
JSP是什么
JSP本质是Servlet,主要负责与用户交互,将网站的最终界面呈现给用户,HTML+JS+CSS+JAVA的混合文件
当服务器接收到一个后缀是jsp请求时,将会把该请求交给JSP引擎去出来,每一个JSP页面第一次被访问是,JSP引擎会将它翻译成一个Servlet文件,再由Web容器调用Servlet完成响应
从开发角度,JSP就是在HTML中嵌入java程序
嵌入方式
JSP脚本,用<% %>包裹java代码
<% java代码 %>
JSP声明:定义java方法 (不能调用)
<%!
java方法
%>
JSP表达式:把java对象直接输出到HTML页面中
<%= java变量 %>
JSP内置对象
常用request、response、session、application、pageContext
作用域探讨对象:
page、request、session、application
这四个都有setAttribute和getAttribute,可以存取数据
page<request<session<application
对象 | 对象 | 作用域 |
---|---|---|
page | 内置对象是pageContext | 只在当前页面有效 |
request | 内置对象是request | 只在一次请求有效 |
session | 内置对象是session | 只在一次会话有效 |
application | 内置对象是application | 对应整个web应用 |
request
表示一次请求,由HttpServletRequest这个类产生的对象
String getParamater(String key)
获取客户端传来的参数
通过地址栏?+变量名=值
来获取传输值
void setAttribute(String key, Object value)
通过键值对的形式来保存数据
RequestDispatcher getRequestDispatcher(String path)
返回一个ResquestDispatcher对象,该对象的forward方法用于请求转发(见上图)
Object getAttribute(String key)
通过key取出value,服务器页面内部传递信息
以上3个函数共同作用结果如下
String[] getParameterValues()
获取同一个变量的一组数据(客户端传过来的)
void setCharacterEncoding(String charset)
指定每个请你求的编码
response
表示一次响应,由HttpServletResponse这个类产生的对象
sendRedirect(String path)
把请求从一个页面传递到另一个页面(request.getRequestDispatcher()也可以做到,但两者效果不同)
转发(即getRequestDispatcher)和重定向(sendRedirect)的区别:
转发:把同一个请求传递给下一个页面,请求在服务器内部传递,地址栏不变
重定向:创建一个新请求传递给下一个页面,本次请求生命周期结束,新的请求由客户端发给新页面,地址栏会改变
如果两个页面之间需要request来传值,必须使用转发,不能使用重定向
pageContext
页面上下文,获取页面信息
session
服务器无法识别每一次HTTP请求的出处(不知道来自哪个终端),它智慧接收到一个请求信号,所以就存在一个问题:将用户的响应发送给其他人,必须有一种技术让服务器知道请求来源于哪,这就是会话技术
会话:就是客户端与服务器之间发生的一系列连续的请求和响应过程
会话状态:指服务器和浏览器在会话过程中产生的状态信息。借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来
实现会话的两种方式
- session
- cookie
属于同一次会话的请求
用于保存用户信息,来源于HttpSession类
String getId()
获取sessionID
void setMaxNactiveInterval()
设置session的失效时间,单位为秒
int getMaxNactiveInterval()
获取session的失效时间,单位为秒
void invalidate()
设置session立即失效
void setAttribute(String key, Object value)
通过键值对的形式存储数据
Object getAttribute(String key)
通过键值对获取数据
void removeAttribute(String key)
通过键值删除对应数据
application
表示当前Web应用,是个全局对象,保存用户共享信息,来源于ServletContext类
config
当前JSP对应的Servlet的ServletConfig对象,获取当前Servlet信息
out
向客户端输出数据,来源于JspWriter类
page
当前JSP对应的Servlet对象,来源于Servlet类
exception
表示JSP页面发生的异常,来源于Exception类
http请求状态码
数字 | 含义 |
---|---|
200 | 正常 |
404 | 资源找不到 |
400 | 请求类型不匹配 |
500 | Java程序抛出异常 |
Cookie
cookie是服务器在HTTP响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了某个cookie,在之后的请求和响应中,会将此cookie来回传递,这样就可以通过cookie这个载体完成客户端和服务器的数据交互
创建cookie
以键值对的方式存储数据,且只能存储String类型数据
Cookie cookie = new Cookie("name","zs");
response.addCookie(cookie);
获取cookie
获取cookie数组的方式来获取内容,遍历输出
Cookie cookie1 = new Cookie("name","zs");
response.addCookie(cookie1);
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
out.write(cookie.getName()+":"+cookie.getValue()+"</br>");
}
Cookie常用方法
方法 | 含义 |
---|---|
void setMaxAge | 设置Cookie的有效时间,单位:秒 |
int getMaxAge() | 获取Cookie的有效时间 |
String getName() | 获取Cookie的name |
String getValue() | 获取Cookie的value |
session和cookie的区别
角度\对象 | session | cookie |
---|---|---|
保存位置 | 服务器 | 浏览器本地 |
保存数据对象 | Object | String |
生命周期 | 随着会话的结束而销毁,即关闭浏览器就销毁 | 可以长期保存在浏览器、与会话无关 |
保存内容 | 重要信息 | 不重要信息 |
存储方式 | setAttribute(key,value) | response.addCookie(name,“value”) |
获取方式 | getAttribute(“key”) | 获取cookie数组,遍历数组处理数据 |
EL表达式
可以替代jsp页面中数据访问的复杂编码,快捷地取出对象(四大对象都能取)
语法
${变量名}
效果:
${}4个对象都能取
但page优先级最高
JSTL
Jsp Standard Tag Library即JSP标准标签库,是JSP为开发者提供的一些列标签,这些使用这些标签可以完成一些逻辑处理,比如循环遍历集合,让代码更加简洁,不再出现JSP脚本穿插的现象
实际开发过程中,EL和JSTL结合使用,JSTL侧重于逻辑处理,EL负责数据展示
JSTL的使用
-
导入两个jar包:jstl.jar和standard.jar(放在WEB-INF目录下,记得add as library)
-
在JSP页面开始的地方导入JSTL标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 在需要的地方用相关语句
循环遍历:
<c:forEach items="${userlist}" var="user">
<tr>
<td>${user.name}</td>
<td>${user.time}</td>
<td><%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())%></td>
<td>${user.session.maxInactiveInterval}</td>
<td><a href="/kick?id=${user.name}">踢出</a></td>
</tr>
</c:forEach>
JSTL优点
- 提供了统一的标签
- 可以用于编写各种动态功能
JSTL常用方法
表达式控制标签:set、out、remove、catch
流程控制标签:if、choose、when、otherwise
循环标签:forEach、forTokens
URL操作标签:import、url、redirect、param
具体操作见 传送门