jsp(2)
JavaBean简介
JavaBeans就是符合某种特定的规范的java类,使用Javabeans的好处是解决代码重复编写,
减少代码冗余,功能区分明确,提高了代码的维护性
JSP动作元素
JSP动作元素,动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名
的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。
jsp动作标签
<jsp:useBeans>
作用:在jsp页面中实例化或者在指定范围内使用javabean:
<jsp:useBean id = "标识符" class = "java类名" scope = “作用范围”/>
<jsp:setProperty>
作用:给已经实例化的JavaBean对象的属性赋值,一共有四种形式
<jsp:getProperty>
作用:获取指定JavaBean对象的属性值
Javabean的四个作用域范围
说明:使用useBeans的scope属性可以用来指定javabean的作用范围
page 仅在当前页面有效
request 可以通过HttpRequest.getAttribute()方法取得javaBean对象
session 可以通过HttpSession.getAttribute()方法取得JavaBean对象
application 可以通过application.getAttribute()方法取得javabean对象
JSP状态管理
http协议的无状态性
无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求。
但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是
刚才那个浏览器
简单的说,就是服务器不会去记得你,所以就是无状态协议
保存用户状态的两大机制
Session、Cookie
Cookie是Web服务器保存在客户端的一系列文本
Cookie的作用
对特定对象的追踪
保存用户网页浏览记录与习惯
简化登录
安全风险:非常容易泄露用户的信息
JSP中Cookie的使用
创建: Cookie newCookie = new Cookie(String key,Object value);
写入: response.addCookie(newCookie);
读取: Cookie[] cookies = request.getCookies();
常用方法
void setMaxAge(int expiry) 设置cookie的有效期,秒为单位
void setValue(String value) 在cookie创建后,对cookie进行赋值
String getName() 获取cookie的名称
String getValue() 获取cookie的值
int getMaxAge() 获取cookie的有效时间,秒为单位
Session与Cookie的对比
session在服务器端保存用户信息
cookie在客户端保存用户信息
session中保存的是Object类型
cookie中保存的是String类型
session会随会话的结束而将其存储的数据销毁
cookie可以长期保存在客户端
session常用于保存重要的信息
cookie保存不重要的用户信息
指令与动作
include指令
语法:<%@include file="URL"%>
forward动作
<jsp:forward page="URL"/>
等同于
request.getRequestDispatcher("/url").forward(request,response);
param动作
<jsp:param name="参数名" value="参数值">
常常与<jsp:forward>一起使用,作为其的子标签
JavaBeans就是符合某种特定的规范的java类,使用Javabeans的好处是解决代码重复编写,
减少代码冗余,功能区分明确,提高了代码的维护性
JSP动作元素
JSP动作元素,动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名
的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。
jsp动作标签
<jsp:useBeans>
作用:在jsp页面中实例化或者在指定范围内使用javabean:
<jsp:useBean id = "标识符" class = "java类名" scope = “作用范围”/>
<jsp:setProperty>
作用:给已经实例化的JavaBean对象的属性赋值,一共有四种形式
<jsp:getProperty>
作用:获取指定JavaBean对象的属性值
Javabean的四个作用域范围
说明:使用useBeans的scope属性可以用来指定javabean的作用范围
page 仅在当前页面有效
request 可以通过HttpRequest.getAttribute()方法取得javaBean对象
session 可以通过HttpSession.getAttribute()方法取得JavaBean对象
application 可以通过application.getAttribute()方法取得javabean对象
JSP状态管理
http协议的无状态性
无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求。
但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是
刚才那个浏览器
简单的说,就是服务器不会去记得你,所以就是无状态协议
保存用户状态的两大机制
Session、Cookie
Cookie是Web服务器保存在客户端的一系列文本
Cookie的作用
对特定对象的追踪
保存用户网页浏览记录与习惯
简化登录
安全风险:非常容易泄露用户的信息
JSP中Cookie的使用
创建: Cookie newCookie = new Cookie(String key,Object value);
写入: response.addCookie(newCookie);
读取: Cookie[] cookies = request.getCookies();
常用方法
void setMaxAge(int expiry) 设置cookie的有效期,秒为单位
void setValue(String value) 在cookie创建后,对cookie进行赋值
String getName() 获取cookie的名称
String getValue() 获取cookie的值
int getMaxAge() 获取cookie的有效时间,秒为单位
案例:
<%
request.setCharacterEncoding("utf-8");
String[] isUseCookies = request.getParameterValues("isUseCookie");
if(isUseCookies!=null&&isUseCookies.length>0){
//这样做可以解决cookie中不能保存中文的问题
String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
String password = URLEncoder.encode(request.getParameter("password"),"utf-8");
Cookie usernameCookie = new Cookie("username",username);
Cookie passwordCookie = new Cookie("password",password);
usernameCookie.setMaxAge(864000);
passwordCookie.setMaxAge(864000);
response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
}else{
Cookie[] cookies = request.getCookies();
if(cookies != null &&cookies.length > 0){
for(Cookie c : cookie){
if(c.getName().equals("username")||c.getName().equals("password")){
c.setMaxAge(0);
response.addCookie(c);
}
}
}
}
%>
Session与Cookie的对比
session在服务器端保存用户信息
cookie在客户端保存用户信息
session中保存的是Object类型
cookie中保存的是String类型
session会随会话的结束而将其存储的数据销毁
cookie可以长期保存在客户端
session常用于保存重要的信息
cookie保存不重要的用户信息
指令与动作
include指令
语法:<%@include file="URL"%>
forward动作
<jsp:forward page="URL"/>
等同于
request.getRequestDispatcher("/url").forward(request,response);
param动作
<jsp:param name="参数名" value="参数值">
常常与<jsp:forward>一起使用,作为其的子标签
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理