什么是javabean?
这个是博主关于“什么是javabean”的一篇博客https://blog.csdn.net/My_name_is_ZwZ/article/details/82960677
在jsp中如何访问javabean?
JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:
<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
<jsp:userBean />动作元素标签的用法:
<jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/>
"id"属性:指定JavaBean实例对象的引用名称和其存储在域范围中的名称。
"class"属性:指定JavaBean的完整类名(即必须带有包名)。
"scope"属性:指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application这四个作用于中的一个,其默认值是page。使用如下:
/**
* Create by ZwZ
* DateTime:2018/10/7 19:21
* Description :javabean 一会将要在jsp中去使用它
*/
package pojo;
import java.util.Date;
public class User {
private String userName;//用户名
private int userAge;//用户年龄
private Date birthDay;//用户生日
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
}
在jsp中使用javabean 这个类之前要导入这个类:
<%@ page import="pojo.User" %><%--这个类在pojo包中--%>
<jsp:useBean>的使用:
<jsp:useBean id="user" class="pojo.User"/>
<%--这句话就相当于创建了一个pojo包中User类的对象,名字叫做user
即与Java中的User user = new User();等价
--%>
<jsp:setProperty />动作元素标签的用法:
1. <jsp:setProperty name="beanName" property="propertyName" value="string字符串"/>
“name”属性:指定所要给哪个javabean对象的属性赋值;
"property"属性:指定所要赋值的属性名;
"value"属性:指定赋值的字符串内容;例子如下:
<jsp:setProperty name="user" property="userName" value="ZwZ" />
2. <jsp:setProperty name="beanName" property="propertyName" value="<%= expression %>" />
“name”属性:指定所要给哪个javabean对象的属性赋值;
"property"属性:指定所要赋值的属性名;
"value"属性:指定使用表达式赋值;例子如下:
<%@ page import="java.util.Date" %><%--导入util包中的Date类-->
<jsp:setProperty name="user" property="birthDay" value="<%= new Date() %>" />
<%--使用Java表达式为此属性赋值-->
<jsp:getProperty name="beanInstanceName" property="PropertyName" />
"name"属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。
"property"属性用于指定JavaBean实例对象的属性名。
如果一个JavaBean实例对象的某个属性的值为null,<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。
使用如下:
<body>
<h2>姓名:<jsp:getProperty property="name" name="person"/></h2>
</body>
总的测试如下:
<%--
User: PC for ZwZ
Date: 2018/10/6
Time: 18:02
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Date" %>
<%@ page import="pojo.User" %><%--这个类在pojo包中--%>
<%--相当于:User user = new User();--%>
<jsp:useBean id="user" class="pojo.User"/>
<jsp:setProperty name="user" property="userName" value="ZwZ" />
<jsp:setProperty name="user" property="birthDay" value="<%= new Date() %>" />
<!DOCTYPE HTML>
<html>
<head>
<title>jspBean练习</title>
</head>
<body>
<h1><%= user.getUserName() %></h1>
<h2><%= user.getBirthDay()%></h2>
</body>
</html>
<jsp:useBean>的执行原理:
使用<jsp:useBean>标签可以创建指定的类的对象,那么这个对象是怎么来的?原理就是在web应用中的jsp文件在执行过程中会被翻译成一个servlet,这是一个java文件,进而可以交给虚拟机去执行。而使用IDEA做Java开发的话,jsp“翻译“成的servlet在C盘下的C:\Users\(使用IDEA时所使用的用户的用户名)\.IntelliJIdea2018.2(IDEA的版本不一样的话这里.IntelliJIdea后面的日期后缀也是不一样的)\system\tomcat\Unnamed_jspBeanDemo(这里Unnamed是当时在IDEA中给tomcat取得名字,jspBeanDemo是项目名)\work\Catalina\localhost\jspBeanDemo\org\apache\jsp。以下是此jsp所对应的servlet的部分代码:
//判断在作用域中有没有此对象,如果没有就创建 有的话就直接将其复制给user
if (user == null){
user = new pojo.User();
_jspx_page_context.setAttribute("user", user, javax.servlet.jsp.PageContext.PAGE_SCOPE);
}
下面我们对其进行分析:
frist:
pojo.User user = null;//创建一个User对象
second:
//使用 javax.servlet.jsp.PageContext类的对象的getAttribute方法获取存储在PageContext.PAGE_SCOPE域中的User对象
user = (pojo.User) _jspx_page_context.getAttribute("user", javax.servlet.jsp.PageContext.PAGE_SCOPE);
third:
//判断在此作用域中有没有User类的对象,如果有就复制给user 没有就新建
if (user == null){
user = new pojo.User();
_jspx_page_context.setAttribute("user", user, javax.servlet.jsp.PageContext.PAGE_SCOPE);
}
也就是说,在jsp文件中使用<jsp:useBean />来实例化对象的过程实际上是执行了上面的java代码来实例化了一个User对象。