javabean在jsp中的使用

什么是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对象。

猜你喜欢

转载自blog.csdn.net/My_name_is_ZwZ/article/details/82960806