序言
JavaBean就是一个普通的java类,里面只有封装数据,没有任何业务逻辑代码。
也称之为简单Java对象–POJO(Plain Ordinary Java Object),是Java程序设计中一种设计模式,是一种基于 Java 平台的软件组件思想。
JavaBean遵循着特定的写法,通常有以下的规则:
有无参的构造函数
成员属性私有化
封装的属性如果需要被外所操作,必须编写public类型的setter、getter方法
上面的文字看起来好像很高大上,javaBean其实非常简单,下面的代码就是按照特定写法、规则编写的一个JavaBean对象:
public class Person {
private String username ;
private int age;
public Person() { }
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
1、为什么需要使用JavaBean
使用JavaBean的好处就是:封装,重用,可读!
下面引用知乎一段回答:
JaveBean你可以理解为一辆货车,在你的Java端和web页面进行数据传递的载体,你当然可以每个变量单独传递,或者使用集合传递,但是javabean可以使你的数据更有可读性,方便开发时明确变量的意义,也使其他阅读你代码的人能直接你的意图。如果把bean类与数据库联合使用,一张表使用bean类,可以使你的代码更加简洁高效,易于理解,现在大多数框架都会使用这种机制。
2、JSP行为–JavaBean
JSP技术提供了三个关于JavaBean组件的动作元素,即JSP行为(标签),它们分别为:
<jsp:useBean> 【在JSP页面中查找javaBean对象或者实例化javaBean对象】
<jsp:setProperty>【设置javaBean的属性】
<jsp:getProperty>【获取javaBean的属性】
(1) jsp:useBean
<jsp:useBean>
标签用于在指定的域范围内查找指定名称的JavaBean对象:存在则直接返回该JavaBean对象的引用。不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。
语法:
<jsp:useBean id="实例化对象的名称" class="类的全名" scope="保存范围"/>
如果JSP不支持<jsp:useBean>
这个行为,我们要使用Person类是这样使用的:
效果如下:
我们使用<jsp:useBean>
就显得非常简洁,不用导包,不用new出对象:
也可以达到同样的效果:
有人可能会想,凭什么写一个<jsp:useBean>
这样的代码就可以创建出一个对象出来?现在我把JavaBean中无参的构造函数改成有参的,我们看看会出现什么情况,出现异常了!
原因:
(2) jsp:setProperty
语法:
<jsp:setProerty name="对象名称" property="属性名" param="参数名" value="值">
在语法上可分为4种模式
<jsp:setProperty name="对象名称" property="*" /> 自动匹配
<jsp:setProperty name="对象名称" property="属性名称"/> 指定属性
<jsp:setProperty name="对象名称" property="属性名称" param="参数名称"/> 指定参数【很少用】
<jsp:setProperty name="对象名称" property="属性名称" value="内容"/> 指定内容【很少用】
当我们没有学习到<jsp:setProperty>
时,我们获取表单的信息,然后导入到javaBean对象中是这样的一种情况:
这是可以完成的,但是相对来说,比较麻烦!
我们来使用<jsp:setProperty>
看看:
代码更少可以直观看出来,为什么我说它功能更加强大呢?表单提交过来的数据都是字符串,在我们没有用<jsp:setProperty>
前,我们存储设置int类型或其他非字符串类型的数据是需要强转的!但是<jsp:setProperty>
不需要我们强转,它内部自动帮我们转换了!
我们再来使用一下自动匹配来感受它的强大之处吧:
看到这里,有人可能会觉得好神奇:只要设置property的值就可以将表单传递过来的数据封装到JavaBean对象中了!这究竟是这样做到的???
细心的朋友会发现,JavaBean的属性名称和表单的name属性设置的名称是一模一样的!
我们再来看看还能不能把表单的数据完整地封装JavaBean对象中:
(3) jsp:getProperty
语法:
<jsp:getProperty name="对象名" property="属性名"/>
该jsp行为十分简单,我们来使用一下就知道了。
<%--使用<jsp:getProperty>输出--%>
<jsp:getProperty name="person" property="username"/>
<jsp:getProperty name="person" property="age"/>
3、JavaBean-JSP-Servlet
MVC是三个单词的缩写:
M——Model(模型)——JavaBean;
V——View (视图)——JSP;
C——Control(控制)——Servlet。
MVC模式的目的就是实现Web系统的职能分工。
1、Model层:实现系统的业务逻辑(JavaBean)
2、View层: 负责与用户交互,即在界面上展示数据对象给用户(html,jsp)
3、Control层:Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作(Servlet)。
下面通过一个登录的实例体现MVC:
其中,login.jsp为登录页面;succes.jsp为登陆成功页面;unsuccessful.jsp为登录失败页面。
login.jsp:
<body>
<center>
<form action="UserServlet" method="post">
<h4>登录</h4>
<hr/>
姓名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
</center>
</body>
success.jsp:
<body>
<center>
<h3>登陆成功</h3>
<a href="<%=path %>/login.jsp">后退</a>
</center>
</body>
unsuccessful.jsp:
<body>
<center>
<h3>登陆失败</h3>
<a href="<%=path %>/login.jsp">后退</a>
</center>
</body>
UserServlet.java(获取视图层传过来的参数,并传给模型层,待模型层判断后调转到相应的页面):
package com.mvc.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mvc.javaBean.User;
public class UserServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
String userName = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
if(user.validatorUser(userName, password)){
response.sendRedirect("success.jsp");
}
else{
response.sendRedirect("unsuccessful.jsp");
}
}
}
User.java(实现业务逻辑,即验证用户名与密码是否正确,在这里仅仅是验证字符串是否相等,姓名与密码都为“admin”时,登陆成功,也可以加上数据库连接代码) :
package com.mvc.javaBean;
public class User {
public boolean validatorUser(String username, String password){
if(username.equals("admin") && password.equals("admin")){
return true;
}
else{
return false;
}
}
}
下面是web.xml的配置 :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>MVC</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.mvc.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
</web-app>
下面是具体演示:
在该实例中
Model层:User.java
View层:ogin.jsp;succes.jsp;unsuccessful.jsp
Control层:UserServlet.java
更具体的MVC实例:https://blog.csdn.net/QQ519423035/article/details/77006829