1.JavaBean简介及设计原则
JavaBean简介及设计原则
JavaBeans就是符合某种特定的规范的Java类。使用javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。
javabean的设计原则
1、必须是一个公有的类
2、必须包含有一个无参的公有构造方法
3、属性必须是私有的
4、使用getter和setter方法对私有属性进行封装。
举例:
public class Students{ //公有类
private String name; //私有属性
private ing age;
public Studengs(){} //公有无参构造方法
public void setName(String name){ //使用了setter方法封装
this.name = name;
}
public String getName(){ //使用了getter方法封装
ruturn this.name;
}
public void setAge(ing age){
this.age = age;
}
public int getAge(){
return this.age;
}
}
2.什么是JSP动作元素
Jsp动作元素(action elements),动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性,可选的内、与开始标签匹配的结束标签。
分为五大类
第一类是与存取JavaBean 有关的,包括:
<jsp:useBean> <jsp:setProperty> <jsp:getProperty>
第二类是JSP1.2就开始有的基本元素,包括6个动作元素
<jsp:include> <jsp:forward> <jsp:param> <jsp:plugin> <jsp:params> <jsp:fallback>
第三类是 JSP2.0新增加的元素,主要与JSP Document有关,包括六个元素
<jsp:root> <jsp:declaration> <jsp:scriptlet> <jsp:expression> <jsp:text> <jsp:output>
第四类是JSP2.0新增的动作元素,主要是用来动态生成XML元素标签的值,包括3个动作
<jsp:attribute> <jsp:body> <jsp:element>
第五类是JSP2.0新增的动作元素,主要是用在Tag File中,有2个元素
<jap:invoke> <jsp:dobody>
3.使用普通方式创建JavaBean
像使用普通java类一样,创建javabean实例,可以new一个。
1、创建一个web project项目。
2、在src文件下,创建一个包,在包中创建一个类,满足设计原则即可
3、在index.jsp页面中通过import导入之前创建的类(import=”包名.类名”)
4、通过使用new创建Javabean实例(创建对象)
5、使用set方法赋值
6、使用get方法取值
package com;
public class Users {
private String username;
private String password;
public Users() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
<%@ page language="java" import="java.util.*,com.Users" 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>使用普通方式创建JavaBean的实例</h1>
<%
Users user=new Users();
user.setUsername("admin");
user.setPassword("123456");
%>
<hr>
用户名:<%=user.getUsername() %><br>
密码:<%=user.getPassword() %><br>
</body>
</html>
4.useBean动作元素
这里来介绍另一种使用javabeans的方法,在jsp页面中通常使用jsp动作标签使用javabean,究竟要使用哪些动作标签呢?分别是:
useBeans动作
setProperty动作
getProperty动作
<jsp:useBeans>
作用:在jsp页面中实例化或者在指定范围内使用javaBean
语法:<jsp:useBean id="标示符" class="java类名" scope="作用范围"/>jsp动作元素,useBean就是对应的动作,java的类名应该是一个全名包括包名
下面我们来举一个例子
<body>
<jsp:useBean id="myUsers" class="com.Users" scope="page" />
<h1>使用useBean方式来创建JavaBean的实例</h1>
<hr>
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
</body>
5.setProperty
作用:给已经实例化的Javabean对象的属性赋值,一共有四种形式:
<jsp:setProperty name="JavaBean实例名" property="*" />
(跟表单关联),这个星号表示根据这个表单所提交过来的参数的名字来和我javabeans当中的属性名来进行一一匹配,如果匹配上了就自动赋值。
下面表示一个实例,做一个用户登陆的界面:
login.jsp
<body>
<h1>系统登陆</h1>
<hr>
<form name="loginform" action="dologin.jsp" method="post">
<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" align="center"><input type="submit" value="登陆"/></td>
</tr>
</table>
</form>
</body>
dologin.jsp
<body>
<jsp:useBean id="myUsers" class="com.Users" scope="page"/>
<h1>setProperty动作元素</h1>
<hr>
<!--根据表单自动匹配所有的属性 -->
<jsp:setProperty name="myUsers" property="*"/>
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
</body>
<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" />
(跟表单关联),对部分属性就行匹配,也就是对指定的属性名进行匹配<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="BeanValue"/>
(手工设置)<jsp:setProperty name="JavaBean实例名" property="propertyName属性名" param="request对象中的参数名"/>
(跟request参数关联)不一定是表单传参,也有可能是url传参
<form name="loginform" action="dologin.jsp?mypass=999999" method="post">
<jsp:setProperty property="password" name="myUsers" param="mypass"/>
6.getProperty
作用:获取指定Javabean对象的属性值
<jsp:getProperty name="javaBean实例名" property="属性名"/>
例子:
用户名:<jsp:getProperty name="myUsers" property="username"/><br>
密 码:<jsp:getProperty name="myUsers" property="password"/>
7.JavaBean四个作用域范围
说明:使用userBeans的scope属性可以用来指定javabean的作用范围
- page(仅在当前页面有效)
- request(可以通过HttpRequest.getAttribute()方法获取javabean对象)
- session(可以通过HttpSession.getAttribute()方法获取javabean对象)
- application(可以通过ServletContext.getAttribute()方法获取javabean对象)
application、session 可以直接获取javabean对象
request 需要请求转发request.getRequestDispatcher(“xxx.jsp”).forward(request,response);获取javabean对象
page pageContext不能获取javabean对象
测试作用域的范围,先做一个登陆的login.jsp,将信息提交到dologin.jsp,在这之中设置javaBean的作用域范围,同时添加一个超链接到testScope.jsp,在这之中看是否能查到用户名和密码信息。
- 首先在使用application时可以正常得到结果,也可以直接使用另一种内部对象的方法。
<h1>javaBean的四个作用域范围</h1>
<jsp:useBean id="myUsers" class="com.Users" scope="application"/>
<hr>
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
<!-- 使用内部对象的方法来得到属性值 -->
用户名:<%=((Users)application.getAttribute("myUsers")).getUsername() %>
密码:<%=((Users)application.getAttribute("myUsers")).getPassword() %>
- 下面来看session范围,我们知道打开超链接也属于一个会话范围。
<h1>javaBean的四个作用域范围</h1>
<jsp:useBean id="myUsers" class="com.Users" scope="session"/>
<hr>
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
<!-- 使用内部对象的方法来得到属性值
用户名:<%=((Users)application.getAttribute("myUsers")).getUsername() %>
密码:<%=((Users)application.getAttribute("myUsers")).getPassword() %>
-->
<!-- 使用内部对象的方法来得到属性值 -->
用户名:<%=((Users)session.getAttribute("myUsers")).getUsername() %>
密码:<%=((Users)session.getAttribute("myUsers")).getPassword() %>
- 这里测试request
<jsp:useBean id="myUsers" class="com.Users" scope="request"/>
<hr>
用户名:<%=myUsers.getUsername() %><br>
密码:<%=myUsers.getPassword() %><br>
用户名:<%=((Users)request.getAttribute("myUsers")).getUsername() %>
密码:<%=((Users)request.getAttribute("myUsers")).getPassword() %>
结果都为null,这个原因也很简单,因为我们知道超链接是请求重定向,就是相当于发了一次新的请求,所以这个请求里并没有myUsers javabean对象,是获取不到用户名和密码的。
那么如何保证访问testScope.jsp的请求和dologin请求一样呢?我们这块就不能使用请求重定向了,我们可以使用服务器内部转发。
<%
request.getRequestDispatcher("testScope.jsp").forward(request,response);
%>
- 最后测试page对象,page只在当前页面有效,这个范围就是最小的。测试不管是重定向或者转发结果都为null。
<%
String username1="";
String password1="";
if(pageContext.getAttribute("myUsers")!=null){
username1=((Users)pageContext.getAttribute("myUsers")).getUsername();
password1=((Users)pageContext.getAttribute("myUsers")).getPassword();
}
%>
用户名:<%=username1%>
密码:<%=password1%>
8.Model1简介
Model1简介
1:Model1模型出现前,整个web应用的情况:几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接作出响应。
弊端:在界面层充斥着大量的业务逻辑的代码和数据访问层的代码,Web程序的可扩展性和可维护性非常差。
2:javabean的出现可以使jsp页面中使用Javabean封装的数据或者调用Javabean的业务逻辑代码,这样大大提升了程序的可维护性
Model1分为三层(jsp+JavaBean):
1.界面层:由JSP页面进行与客户端浏览器的交互,可以直接调用JavaBeans
2.业务逻辑层:由JavaBeans进行处理业务逻辑,封装数据,并与数据库层进行交互
3.数据库层:底层数据库,可被javaBeans访问
避免了JSP页面直接进行业务逻辑处理所带来的维护性,扩展性差的弱点.体现了分层设计的思想
Model1:jsp+javabean,其中jsp为表示层和控制层,javabean为模式层
Model2:jsp+servlet+javabean,jsp为表示层,servlet为控制层,javabean为模式层
模式层Model,表示层View,控制层Control,合起来即为MVC。