JSP-JavaBean

一、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的实例对象。
语法:

扫描二维码关注公众号,回复: 6776878 查看本文章
<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="[email protected]" 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>

猜你喜欢

转载自blog.csdn.net/lizengbao/article/details/87910782