文章目录
我的学习路线
——本次学习的简单说明
本次的学习分为九节
注:点击题目会跳转到其他博客链接
Day1:JSP的入门&环境的配置&Tomcat的注意点
Day2:简单项目的创建和基本的功能的实现(打war包,共享项目)
Day3:JSP基础语法
Day4:JSP 九大内置对象及四个作用域
Day5:JavaBean 组件
Day6:Servlet 开发
Day7:EL 表达式
Day8:Jsp 自定义标签
Day9:Jsp 标准标签库持续更新中:新的博客写完会加链接
下面是Day5的学习
Javabean组件引入
JavaBean是使用Java语言开发的一个可重用的组件,在JSP开发中可以使用JavaBean减少重复代码,使用JSP代码的开发更简单。
Student的代码
package model;
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
jsp的代码如下
<%@page import="model.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Student student=new Student();
student.setName("张三");
student.setAge(10);
%>
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
</html>
效果
useBean创建javabean
<jsp:useBean id=“实例化对象名称” scope=“保存范围” class=“类完整名称”/> Scope,一共有
page,request,session 和 application4 个属性范围,默认是 page;
代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="student" scope="page" class="model.Student"></jsp:useBean>
<%
student.setName("张三");
student.setAge(10);
%>
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
</html>
效果
setProperty设置javabean属性值
<jsp:setProperty property=“属性名称” name=“实例化对象的名称” value=“属性值”
param=“参数名称”/> Property=”*” 自动匹配所有
先复习一下最原始的写法
首先创建一个Student.jsp用来得到一个表单,获取我们想要的属性元素
代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="javaBean03.jsp" method="post">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
form表单,实现一个表格的信息录入,submit实现提交,这里其实就像是一个响应事件,javaBean03就是在事件响应之后跳转的页面
javaBean03的代码如下
<%@page import="model.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//解决乱码的问题
request.setCharacterEncoding("UTF-8");
//response是通过name属性来获得用户输入的text的
String name=request.getParameter("name");
String age=request.getParameter("age");
Student student=new Student();
student.setName(name);
student.setAge(Integer.parseInt(age));
%>
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
</html>
效果
提交之后的效果
下面是把setProperty引入的效果,最终实现的功能的javaBean03的是一样的,这个下面的代码是javaBean04,很显然代码大大的减少了,注意基本模板的使用。
<%@page import="model.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//解决乱码的问题
request.setCharacterEncoding("UTF-8");
%>
<!-- 下面的这一行是定义对象 -->
<jsp:useBean id="student" scope="page" class="model.Student"/>
<!-- 设置属性,name是实例化对象的名称,就是上面的id -->
<jsp:setProperty property="*" name="student"/>
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
</html>
getProperty获取javabean属性值
<jsp:getProperty property=“属性名称” name=“实例化对象的名称”/>
下面的Student对象用的还是上面的那个,然后这个是新建的javaBean06.jsp
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="student" scope="page" class="model.Student"></jsp:useBean>
<%
student.setName("张三");
student.setAge(10);
%>
<h1>姓名:<jsp:getProperty property="name" name="student"/></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
</html>
效果:
这里的getProperty 就是把下面这个两行代码取代了
上面的属性名称其实就是实例化的对象里面的那个属性,通过这个属性名称来获得实例化的这个对象中的属性
javabean的保存范围
Javabean 的保存范围有 page,request,session.application,默认是 page;
这四个范围是什么?不懂的可以看看这个
关于JSP的Day4的学习https://blog.youkuaiyun.com/qq_43918130/article/details/100585996
page范围:
如图:这个是限制范围的,一般默认的都是page范围的
request范围
结构图如下:
JavaBean01代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="student" scope="request" class="model.Student"></jsp:useBean>
<jsp:setProperty property="name" name="student" value="很帅"/>
<jsp:setProperty property="age" name="student" value="12"/>
<!-- 下面一行代码是内部跳转 -->
<jsp:forward page="target.jsp"/>
</body>
</html>
target代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="student" scope="request" class="model.Student"></jsp:useBean>
<h1>姓名:<jsp:getProperty property="name" name="student"/></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
</html>
效果图
我们跨越了页面获取数据,因此这里的request是有效的。
session范围
直接取值是没法取到的,注意session的使用范围,想要获得session类型的页面的数据,必须要打开这个session的页面,也就是说,session中的数据是存储在服务器上的
结构图
javaBean02的代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="student" scope="session" class="model.Student"></jsp:useBean>
<jsp:setProperty property="name" name="student" value="很帅"/>
<jsp:setProperty property="age" name="student" value="12"/>
<h1>session数据设置完毕</h1>
这要这个页面不关闭,就一直可以访问里面的数据,因为session的东西是存在服务器端的
</body>
</html>
target02的代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>session中取值</h1>
<jsp:useBean id="student" scope="session" class="model.Student"></jsp:useBean>
<h1>姓名:<jsp:getProperty property="name" name="student"/></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
</html>
先看一下直接取值的效果
然后运行session的,再看一下取值的效果
再取值
还是很奇妙的吧,这个就是session的范围,在四大作用域里面学了的,session的特点就是在一个浏览器上可以,看在新的页面中,我们还是没法访问到服务器中存储的数据的
application范围
这个范围是最大的,可以解决页面的问题,也就是上面说的开新窗口不能访问的问题
结构图
javaBean03代码
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
Application数据设置完毕
这要这个页面不关闭,就一直可以访问里面的数据,因为Application的东西是存在服务器端的 target03代码<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>application中取值</h1>
<jsp:useBean id="student" scope="application" class="model.Student"></jsp:useBean>
<h1>姓名:<jsp:getProperty property="name" name="student"/></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
</html>
如果不把Application跑起来,那么也是不能访问值的
现在就能跨窗口进行访问了
javabean 删除
Page 范围
pageContext.removeAttribute(“javaBean Name”); request
request范围
request.removeAttribute(“javaBean Name”); session
session范围
session.removeAttribute(“javaBean Name”); application
application范围
application.removeAttribute(“javaBean Name”);
随便找一个范围的来实现一下,比如session的范围的
具体流程
用上面的session的那个的代码
然后在这个里面加一个delete02,其他的两个jsp的代码都有不变
delete02的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% session.removeAttribute("student"); %>
<h1>JavaBean已删除</h1>
</body>
</html>
然后先把JavaBean02的代码跑起来,只有把这个跑起来的target里面才能访问到数据,然后再把delete02跑起来,刷新target02的页面,可以看到,我们没法取到数据了,因为javaBean02中的数据已经被delete02移除了,其实本质移除的是一个对象,这个对象存储的位置在session区域的服务器中,效果就不具体演示了。