一、JavaBean简介
1.1 含义
自定义的、符合某种规范的Java类。
1.2 优势
(1)功能明确。
(2)代码精简,代码重复利用率高,冗余低。
(3)代码可维护性高。
1.3 JavaBean设计原则
(1)属性私有化,提供getter和setter方法。
(2)必有无参构造函数。
(3)该类必须为公有(public class 修饰)。
// 1.public class 修饰的类
public class Student{
// 2.属性私有化
private String name;
// 3.必有无参构造函数。
public Student(){
}
// 4.提供getter和setter方法获取和设置属性。
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
注意:即可以封装数据,也可以封装业务逻辑
二、JSP 动作标签
2.1 基础
2.1.1 含义
action elements。标签。
2.1.2 作用
(1)JSP动作使用XML语法结构来控制Servlet引擎的行为。
(2)可以动态地插入文件,重用JavaBeans组件,用户转发到另一个页面。
(3)为Java插件生成HTML。
语法 | 目的 |
---|---|
jsp:include | 包括页面被一次请求的文件 |
jsp:useBean | 查找或实例化一个JavaBean |
jsp:setProperty | 设置一个JavaBean的属性 |
jsp:getProperty | 插入一个JavaBean的属性到输出 |
jsp:forward | 转发请求到一个新的页面 |
jsp:plugin | 生成特定浏览器的代码,使对象或嵌入标签Java插件 |
jsp:element | 定义XML元素动态 |
jsp:attribute | 定义动态定义XML元素的属性 |
jsp:body | 定义动态定义的XML元素主体 |
jsp:text | 用于编写模板文本在JSP页面和文档 |
2.1.3 组成
遵循XML元素语法。但需要再元素名前加“jsp:”
2.1.4 语法
<jsp:actionElements_name attribute="value" />
2.2 与存储JavaBean有关的动作标签
作用:在jsp页面或指定范围内,创建JavaBean类的实例对象并使用。
语法 | 目的 |
---|---|
jsp:useBean | 查找或实例化一个JavaBean |
jsp:setProperty | 设置一个JavaBean的属性 |
jsp:getProperty | 插入一个JavaBean的属性到输出 |
2.2.1 jsp:useBean
作用:声明并创建JavaBean的实例对象。
语法:
<jsp:useBean id="实例对象名" class="JavaBean类名的全路径" scope="作用范围:page|request|session|application" />
2.2.2 jsp:setProperty
作用:设置实例对象的属性值。
(1)从表单中获取属性值
语法:
<!-- 自动匹配 -->
<jsp:setProperty name="实例对象名" property="*" />
<!--
自动匹配原则:表单中的name值要与JavaBean类中的属性值要一一对应。
-->
<jsp:setProperty name="实例对象名" property="JavaBean属性名" />
(2)从request内置对象中的参数有关
<form name="loginForm" action="dologin.jsp?mypass=9999999" method="post"></form>
<jsp:setProperty name="实例对象名" property="propertyName" param="request中的参数名"/>
(3)手工设置
<jsp:setProperty name="实例对象名" property="propertyName" value="自定义属性值"/>
2.2.3 jsp:getProperty
作用:获取指定JavaBean对象的属性值。
<jsp:getProperty name="实例对象名" property="属性名"/>
也可通过表达式获取:
<%=user.getName() %>
2.3 基本动作标签
语法 | 目的 |
---|---|
jsp:include | 包括页面被一次请求的文件 |
jsp:forward | 转发请求到一个新的页面 |
jsp:plugin | 生成特定浏览器的代码,使对象或嵌入标签Java插件 |
jsp:param | 设置传递的自定义参数或原有参数。 |
jsp:params | |
jsp:fallback |
2.3.1 jsp:include
含义:包括页面被一次请求的文件。
语法:<jsp:include page=“URL” flush=“true|false”/>
include_action.jsp:
<%@ page language="java" contentType="text/html; charset=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>include动作</title>
</head>
<body>
<h1>include动作</h1><hr/>
今天的日期:<jsp:include page="date.jsp" flush="false"/>
</body>
</html>
2.3.2 jsp:forward
含义:请求转发。
语法:<jsp:forward page=“URL”/>
等同于:
request.getRequestDispatcher(“RUL”).forward(request,response)
login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.net.*" %>
<!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>用户登录</title>
</head>
<body>
<div id="container">
<div class="logo">
<a href="#"><img src="#" alt="" /></a>
</div>
</div>
<div id="box">
<form name="loginForm" action="forward_action.jsp" method="get">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value=""/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value=""/></td>
</tr>
<tr>
<td colspan="2"><input type="checkbox" name="isUseCookie"
value="read" />记住用户名和密码功能10天。</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
</div>
</body>
</html>
forward_action.jsp:
<%@ page language="java" contentType="text/html; charset=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>forward动作</title>
</head>
<body>
<h1>forward动作</h1><hr/>
<%-- 今天的日期:<jsp:forward page="users.jsp"/> --%>
<%
request.getRequestDispatcher("users.jsp").forward(request,response);
%>
</body>
</html>
users.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.net.*" %>
<!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>用户登录</title>
</head>
<body>
<h1>用户信息</h1>
<br />
<%
request.setCharacterEncoding("utf-8");
String username = "";
String password = "";
if(request.getParameter("username") != null){
username = request.getParameter("username");
}
if(request.getParameter("password") != null){
password = request.getParameter("password");
}
%>
用户名:<%=username %><br />
密码:<%=password %><br />
</body>
</html>
2.3.3 jsp:param
含义:设置传递的自定义参数或原有参数。
语法:<jsp:param name="" value=""/>
常常与jsp:forward一起使用,作为其子标签。
login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.net.*" %>
<!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>用户登录</title>
</head>
<body>
<div id="container">
<div class="logo">
<a href="#"><img src="#" alt="" /></a>
</div>
</div>
<div id="box">
<form name="loginForm" action="forward_action.jsp" method="get">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value=""/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value=""/></td>
</tr>
<tr>
<td colspan="2"><input type="checkbox" name="isUseCookie"
value="read" />记住用户名和密码功能10天。</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
</div>
</body>
</html>
param_action:
<%@ 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:forward page="users.jsp">
<jsp:param value="123@163.com" name="email"/>
<jsp:param value="888888" name="password"/>
</jsp:forward>
</body>
</html>
users.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.net.*" %>
<!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>用户登录</title>
</head>
<body>
<h1>用户信息</h1>
<br />
<%
request.setCharacterEncoding("utf-8");
String username = "";
String password = "";
String email = "";
if(request.getParameter("username") != null){
username = request.getParameter("username");
}
if(request.getParameter("password") != null){
password = request.getParameter("password");
}
if(request.getParameter("email") != null){
email = request.getParameter("email");
}
%>
用户名:<%=username %><br />
密码:<%=password %><br />
email:<%=email %>
</body>
</html>
2.4 与JSP Document有关的动作标签
语法 | 目的 |
---|---|
jsp:root | |
jsp:declaration | |
jsp:scriptlet | |
jsp:text | 用于编写模板文本在JSP页面和文档 |
jsp:expression | |
jsp:output |
2.5 动态生成XML元素标签的值的动作标签
语法 | 目的 |
---|---|
jsp:element | 定义XML元素动态 |
jsp:attribute | 定义动态定义XML元素的属性 |
jsp:body | 定义动态定义的XML元素主体 |
2.6 与Tag File有关的动作标签
语法 | 目的 |
---|---|
jsp:invoke | |
jsp:dobody |
三、JSP中使用JavaBeans
3.1 普通方法
第一步:创建JavaBean实例。
放置位置:项目名→Java Resources→src→包名
User.java:
// 1.public class 修饰的类
public class User{
// 2.属性私有化
private String username; // 用户名。
private String password; // 用户密码。
// 3.必有无参构造函数。
public User(){
}
// 4.提供getter和setter方法获取和设置属性。
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return this.username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return this.password;
}
}
第二步:调用。
1、头部导入类
<%@ page import="com.my.entity.*" %>
2、脚本中创建对象
<%
Student stu = new Student();
stu.setUsername("admin");
stu.setPassword("123456");
%>
3、表达式获取内容
用户名:<%=syu.getUsername()%>
密 码:<%=stu.getPassword()%>
放置位置:项目名→WebContent
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%-- 1. 导入JavaBean类文件 --%>
<%@ page import="com.info.User" %>
<!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>JavaBean</title>
</head>
<body>
<h1>使用普通方式创建JavaBean的实例</h1>
<%-- 2. JSP脚本中:创建实例对象,并赋值。 --%>
<%
User user = new User();
user.setUsername("张三");
user.setPassword("123456");
%>
<%-- 3. 使用表达式:输出实例对象属性值。 --%>
用户名:<%=user.getUsername() %><br>
用户名:<%=user.getPassword() %><br>
</body>
</html>
3.2 使用动作标签
第一步:创建JavaBean实例。同3.1。
第二步:调用。
1、创建对象。
<jsp:useBean id="stu" class="com.my.entity.Student" scope="page" />
2、手工赋值。
<jsp:setProperty name="stu" property="username" value="张三"/>
<jsp:setProperty name="stu" property="password" value="123456"/>
3、获取内容
用户名:<jsp:getProperty name="stu" property="username"/>
密 码:<jsp:getProperty name="stu" property="password"/>
放置位置:项目名→WebContent
login.jsp:
<%@ page language="java" contentType="text/html; charset=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>用户登录</title>
</head>
<body>
<div id="box">
<form name="loginForm" action="dologin.jsp?mypass=9999999" method="post">
<p class="main">
<label>用户名:</label>
<input type="text" name="username" value=""/>
<label>密码:</label>
<input type="password" name="password" value=""/>
</p>
<p class="space">
<input type="submit" value="登录" />
</p>
</form>
</div>
</body>
</html>
dologin.jsp:
<%@ page language="java" contentType="text/html; charset=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>用户登录</title>
</head>
<body>
<jsp:useBean id="user" class="com.my.info.User" scope="page" />
<h1>setProperty动作元素</h1><br/>
<%-- <!-- 方式1:从表单中获取属性值,自动匹配 -->
<jsp:setProperty property="*" name="user"/>
<h2>方式1:从表单中获取属性值,自动匹配</h2>
<p>自动匹配原则:表单中的name值要与JavaBean类中的属性值要一一对应。</p>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/> --%>
<%-- <!-- 方式2:从表单中获取属性值,指定匹配 -->
<jsp:setProperty property="username" name="user"/>
<jsp:setProperty property="password" name="user"/>
<h2>方式2:从表单中获取属性值,指定匹配</h2>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/> --%>
<!-- 方式3:URL传参方式赋值 -->
<jsp:setProperty property="username" name="user"/>
<jsp:setProperty property="password" name="user" param="mypass"/>
<h2>方式3:URL传参方式赋值</h2>
<!-- 获取属性值:表达式 -->
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/>
<!-- 获取属性值:动作元素 -->
用户名:<jsp:getProperty property="username" name="user"/><br/>
密码:<jsp:getProperty property="password" name="user"/><br/>
<%-- <!-- 方式4:手工设置 -->
<jsp:setProperty property="username" value="李四" name="user" />
<jsp:setProperty property="password" value="88888" name="user"/>
<h2>方式4:手工设置</h2>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/> --%>
</body>
</html>
四、四种作用域范围
对象 | 范围 | 对象获取 |
---|---|---|
page | 当前页面有效。 | |
request | 请求范围。 | HttpRequest.getAttribute()方法 |
session | 会话范围。 | TttpSession.getAttribute()方法 |
application | 全局 | Appilcation.getAttribute()方法 |
4.1 语法
<jsp:useBean id=“类实例对象名” class=“类所在包名” scope = “scope_name” />
4.2 注意
数据所在页面的scope值要与数据调用页面的scope值相同。
4.3 示例
第一步:创建JavaBean实例。同3.1。
第二步:调用。
放置位置:项目名→WebContent
testScope.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="com.my.info.User" %>
<!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>用户登录</title>
</head>
<body>
<h1>JavaBean的四个作用域范围</h1>
<%-- <h2>测试application最大范围</h2>
<p>获取login.jsp页面中的值,中间隔着dologin.jsp页面(但scope="application")。</p>
<jsp:useBean id="user" class="com.my.info.User" scope="application"/>
<!-- 通过(动作标签)获取 -->
<h3>通过(动作标签)获取</h3>
用户名:<jsp:getProperty property="username" name="user"/><br/>
密码:<jsp:getProperty property="password" name="user"/><br/>
<!-- 通过(内置对象 + 表达式)获取 -->
<h3>通过(内置对象 + 表达式)获取</h3>
用户名:<%=((User)application.getAttribute("user")).getUsername() %><br/>
密码:<%=((User)application.getAttribute("user")).getPassword() %><br/>
<!-- 通过(对象名 + 表达式)获取 -->
<h3>通过(对象名 + 表达式)获取</h3>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/> --%>
<%-- <h2>测试session范围</h2>
<p>获取login.jsp页面中的值,中间隔着dologin.jsp页面(但scope="session")。</p>
<jsp:useBean id="user" class="com.my.info.User" scope="session"/>
<!-- 通过(动作标签)获取 -->
<h3>通过(动作标签)获取</h3>
用户名:<jsp:getProperty property="username" name="user"/><br/>
密码:<jsp:getProperty property="password" name="user"/><br/>
<!-- 通过(内置对象 + 表达式)获取 -->
<h3>通过(内置对象 + 表达式)获取</h3>
用户名:<%=((User)session.getAttribute("user")).getUsername() %><br/>
密码:<%=((User)session.getAttribute("user")).getPassword() %><br/>
<!-- 通过(对象名 + 表达式)获取 -->
<h3>通过(对象名 + 表达式)获取</h3>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/> --%>
<%-- <h2>测试request范围</h2>
<p>获取login.jsp页面中的值,中间隔着dologin.jsp页面(但scope="request")。</p>
<jsp:useBean id="user" class="com.my.info.User" scope="request"/>
<!-- 通过(动作标签)获取 -->
<h3>通过(动作标签)获取</h3>
用户名:<jsp:getProperty property="username" name="user"/><br/>
密码:<jsp:getProperty property="password" name="user"/><br/>
<!-- 通过(内置对象 + 表达式)获取 -->
<h3>通过(内置对象 + 表达式)获取</h3>
用户名:<%=((User)request.getAttribute("user")).getUsername() %><br/>
密码:<%=((User)request.getAttribute("user")).getPassword() %><br/>
<!-- 通过(对象名 + 表达式)获取 -->
<h3>通过(对象名 + 表达式)获取</h3>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/>
<p>请求转发,直接跳过dologin.jsp页面(即没显示)!保证了是一次请求。使该页面能获取到login.jsp提交的值!</p> --%>
<h2>测试page范围</h2>
<p>获取login.jsp页面中的值,中间隔着dologin.jsp页面(但scope="page")。</p>
<jsp:useBean id="user" class="com.my.info.User" scope="request"/>
<!-- 通过(动作标签)获取 -->
<h3>通过(动作标签)获取</h3>
用户名:<jsp:getProperty property="username" name="user"/><br/>
密码:<jsp:getProperty property="password" name="user"/><br/>
<%--为避免出现null。先用脚本改写如下: --%>
<%
String username = "";
String password = "";
if(pageContext.getAttribute("username") != null){
username = ((User)(pageContext.getAttribute("username"))).getUsername();
password = ((User)(pageContext.getAttribute("password"))).getPassword();
}
%>
用户名:<%=username %><br/>
密码:<%=password %><br/>
<h3>通过(内置对象 + 表达式)获取</h3>
用户名:<%=((User)request.getAttribute("user")).getUsername() %><br/>
密码:<%=((User)request.getAttribute("user")).getPassword() %><br/>
<!-- 通过(对象名 + 表达式)获取 -->
<h3>通过(对象名 + 表达式)获取</h3>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/>
<p>请求转发,直接跳过dologin.jsp页面(即没显示)!保证了是一次请求。使该页面能获取到login.jsp提交的值!</p>
</body>
</html>
dologin.jsp:
<%@ page language="java" contentType="text/html; charset=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>用户登录</title>
</head>
<body>
<jsp:useBean id="user" class="com.my.info.User" scope="page" />
<h1>setProperty动作元素</h1><br/>
<%-- <!-- 方式1:从表单中获取属性值,自动匹配 -->
<jsp:setProperty property="*" name="user"/>
<h2>方式1:从表单中获取属性值,自动匹配</h2>
<p>自动匹配原则:表单中的name值要与JavaBean类中的属性值要一一对应。</p>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/> --%>
<!-- 方式2:从表单中获取属性值,指定匹配 -->
<jsp:setProperty property="username" name="user"/>
<jsp:setProperty property="password" name="user"/>
<h2>方式2:从表单中获取属性值,指定匹配</h2>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/>
<%-- <!-- 方式3:URL传参方式赋值 -->
<jsp:setProperty property="username" name="user"/>
<jsp:setProperty property="password" name="user" param="mypass"/>
<h2>方式3:URL传参方式赋值</h2>
<!-- 获取属性值:表达式 -->
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/>
<!-- 获取属性值:动作元素 -->
用户名:<jsp:getProperty property="username" name="user"/><br/>
密码:<jsp:getProperty property="password" name="user"/><br/> --%>
<%-- <!-- 方式4:手工设置 -->
<jsp:setProperty property="username" value="李四" name="user" />
<jsp:setProperty property="password" value="88888" name="user"/>
<h2>方式4:手工设置</h2>
用户名:<%=user.getUsername() %><br/>
密码:<%=user.getPassword() %><br/> --%>
<!-- 请求重定向 -->
<a href="testScope.jsp">请求重定向:测试JavaBean的四个作用域范围。需要客户自己点击。</a><br/>
<!-- 请求转发:测试JavaBean的四个作用域范围。服务器端已经内部转发了 -->
<%
request.getRequestDispatcher("testScope.jsp").forward(request,response);
%>
</body>
</html>
login.jsp:
<%@ page language="java" contentType="text/html; charset=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>用户登录</title>
</head>
<body>
<div id="box">
<form name="loginForm" action="dologin.jsp?mypass=9999999" method="post">
<p class="main">
<label>用户名:</label>
<input type="text" name="username" value=""/>
<label>密码:</label>
<input type="password" name="password" value=""/>
</p>
<p class="space">
<input type="submit" value="登录" />
</p>
</form>
</div>
</body>
</html>