(一)JavaBean
小注:汉字的代码范围:[u4e00-u9fa5]
一、Javabeande 特点:
1.这个Java类必须具有一个无参的构造函数
2.属性必须私有化
3.私有化的属性必须通过public类型的方法暴露给其他程序,并且方法的命名
也必须要遵守一定的命名规范。
作用:通常用于封装数据,对于遵循以上写法的JavaBean组建,其他程序可以通过
反射技术实例化JavaBean对象,并通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其他属性保存数据。
二、JavaBean的属性:
1.JavaBean的属性可以是任意类型的,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、getter方法,setter方法成为属性修改器,getter方法成为属性访问器。
2.属性修改器必须是以小写的set前缀开始的,后跟属性名,且属性名的第一个字母要改为大写,
例如:name属性的修改器名称为getName,password属性的修改器名称为getPassword。
3.属性访问器通常是以小写get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,
例如:name属性的访问器名称为getName,password属性的访问器名称为getPassword。
添加小知识点:修改器与访问器:
修改器:修改器意义 能够修改某一个程序或文件的程序。 修改器的英文翻译叫做: "Trainer" 或 "Hack" 一般而言,trainer常被用于指"作弊器",比如"xx游戏xx项属性修改器",其具有针对性,只能针对某个游戏或者这个游戏的某个版本。修改器是一个工具,他的主要作用在于通过技术手段找到需要的内存地址,然后修改。
修改器的目的就是要找到地址,然后修改。
一般过程是:首次搜索某个数值,在游戏中修改这个数值,然后搜索这个新数值,如此反复,直到找到地址,改成你要的值。
如果不知道具体数,需要"模糊搜索":首先搜索所要的地址,然后在游戏中修改这个数,然后搜索所要变大或变小或不变的数,然后再到游戏中改变数值,如此反复,找到地址。
如果某个数值小,比如10以下整数,将会搜到很多,可以用组合数搜索,比如hp是100,mp是150,就搜索100,150。但是数值类型要选对,不知道就所以类型搜一次(选"??")
找到数值后,附近往往还有相关数据,可以顺便修改。比如道具数量前面的地址往往是道具类型,可以凭空改出极品道具来,经验附近往往是hp、mp、str、agi、int、luk等等。
判断修改器优劣的原则:1、能找到地址 2、速度快 3、功能丰富
访问器:声明类时,通常将成员变量声明为private,以防止直接访问成员变量而引起的恶意操作。但是,这并不是不允许访问,而是可以通过公共接口间接访问。所谓的公共接口,就是程序设计人员在类中定义与各个私有成员变量相关的公共方法,以提高安全级别。习惯上,称具有private访问权限的成员变量为属性,把与之对应的公共方法称为访问器。访问器根据功能区分为读访问器(getter)和写访问器(setter)。
4.一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称为只写、只读属性。
三:在JSP中使用JavaBean
三大关于JavaBean的标签即JSP标签:
1.<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组建。
可以很快获得一个Bean
小补充:<%= %>输出功能;
2.<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
为创建出来的javab标签设置属性。
3.<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
来获取属性。代替输出函数来获取值(属性)
JavaBean的代码如下:
<%@page import="day09_day010.Preson"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSP标签setproperty</title>
</head>
<body>
<jsp:useBean id="person" class="day09_day010.Preson"> </jsp:useBean>
<jsp:setProperty property="name" name="person" value="xxxxx"/>
<%=person.getName() %><br/>
<!-- 用请求参数给Bean复制 -->
<jsp:setProperty property="name" name="person" param="name"/>
<%=person.getName() %><br/>
<jsp:setProperty property="age" name="person" param="age" />
<!-- 用请求参数支持八中基本数据类型的转换 (把客户机提交的数据)-->
<%=person.getAge() %><br/>
<jsp:setProperty property="date" name="person" value="<%=new Date() %>"/>
<%=person.getDate() %>
<br/>----------------------------------------------<br/>
<!-- 用所有的请求参数为Bean赋值 -->
<jsp:setProperty property="*" name="person"/>
<%=person.getAge() %><br/>
<%=person.getName() %>
-------------------------------<br/>
<jsp:getProperty property="name" name="person"/>
<jsp:getProperty property="age" name="person"/>
<jsp:getProperty property="date" name="person"/>
</body>
</html>
Javaweb开发模式:
1.JSP开发模式:
JSP+JavaBean模式:适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于
封装业务数据,JSP负责处理用户请求,又显示数据。
2.MVC开发模式:
解释:IE发送请求,请求交给servlet处理,用JavaBean进行数据封装,由于servlet不适合做输出,转交给JSP,会将JavaBean存在request域中,通过forwoed技术转交给JSP,JSP从request域中取出数据并显示。
3.三层架构程序。:
Servlet+JSP+JavaBean模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户的请求,JSP负责数据的显示,JavaBean负责封装数据。
Servlet+JSP+JavaBean模式程序各个模块之间层次清晰web开发推荐使用此种模式。
用户通过IE来请求servlet,想要获得数据,servlet并不处理而是通过service组件来处理请求产生数据,service负责处理请求产生数据,service通过调用dao来获取数据,dao专门负责与数据库进行交互,获取数据,由于面共向对象的思想,调用后要将数据进行封装,这时就将数据封装到JavaBean中,service通过调dao的方法,通过方法的返回值从JavaBean中来获取数据,并返回给service,从而service就可以对JavaBean中的数据进行处理,处理过后有可以将数据重新封装给JavaBean,servlet可以通过方法来调用service,从而拿到JavaBean中封装好的数据,这样就获得了用户想要得到的数据,这时将数据存在域中,但是servlet不适合做输出,因此可以通过转发给JSP来显示数据,这样用户就可以从JSP中获得想要的数据。
EL表达式与JSTL
EL表达式用于获取数据,符号${标识符}从四个域中获取对象。
代码如下:
<%@page import="day09_day010.Preson"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%
String data="abcd";
request.setAttribute("data", data);
%>
${data}
<br/>---------------------------------------<br/>
<%
Preson p=new Preson();
p.setName("aaa");
request.setAttribute("preson", p);
%>
${preson.name}<!-- 从四个域中找寻preson.name -->
<br/>---------------------------------------<br/>
<%
Preson p1=new Preson();
p1.setAge(10);
request.setAttribute("preson", p1);
%>
${preson.age}
<br/>---------------------------------------<br/>
<%
List list =new ArrayList();
list.add(new Preson("AAAAA"));
list.add(new Preson("BBAAA"));
list.add(new Preson("CCAAA"));
request.setAttribute("list", list);
%>
${list[1].name}<!-- 要与jstl一起用 -->
<br/>---------------------------------------<br/>
<%
Map map=new HashMap();
map.put("aa", new Preson("aaaa"));
map.put("bb", new Preson("bbaa"));
map.put("cc", new Preson("ccaa"));
map.put("dd", new Preson("ddaa"));
request.setAttribute("map", map);
%>
${map.aa.name}
</body>
</html>
${关键字(对象的名称).要取的名称(对象的属性) }关键字最好不要用数字开头。
用EL取数据时,通常用.号,.号搞不出来时,用[]
${pageContext.request.contextPath}得到当前web应用的名称。
JSTL标签库: