JSP笔记与案例一览(JSP后半部分)

(一)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标签库:

原文地址:https://www.cnblogs.com/shuai9999/p/8954589.html