`

Jsp/Servlet复习笔记-----第7章 JavaBean组件和JSP 中的标准动作

    博客分类:
  • JSP
阅读更多
7.1 JavaBean 简介
7.1.1 使用Bean的原因   
7.1.2  Bean是什么
7.1.3  javaBean在jsp中的应用 
JavaBean就是一个Java类,也就意味着,JAVA的一切特性,此处都可以使用
她只是完成基本业务的逻辑封装
JavaBean可以使用JAVA的封装、继承、多态
用它来封装许多可重复调用的代码,通过使用JavaBean可以达到显示与业务的分离
显示:JSP
业务:JavaBean

将JavaBean编译好的.class文件拷贝到WEB-INF下的classes文件夹下
lib文件夹用来存放.jar文件
编写JavaBean必须满足以下几点:
 放在一个包中
 必须申明成public class类型  文件名称与类名一致
 所有的属性必须封装
 设置和取得属性可以通过 setter、getter方法
 使用JSP标签去调用JavaBean时必须有一个无参构造方法v

Java代码
1.// 所有的JavaBean必须放在一个包中  
2.package org.sky.darkness ;  
3. 
4.public class SimpleBean {  
5.    private String name ;  
6.    private String password ;  
7.      
8.    // 如果没有指定构造方法,则会自动生成一无参的什么都不做的构造方法  
9.    public SimpleBean() {  
10.        System.out.println("** public SimpleBean() .") ;  
11.        System.out.println("-------------------------------------------") ;  
12.    }  
13.      
14.    public void setName(String name) {  
15.        this.name = name ;  
16.    }  
17.    public void setPassword(String password) {  
18.        this.password = password ;  
19.    }  
20.    public String getName() {  
21.        return this.name ;  
22.    }  
23.    public String getPassword() {  
24.        return this.password ;  
25.    }  
26.}; 
// 所有的JavaBean必须放在一个包中
package org.sky.darkness ;

public class SimpleBean {
private String name ;
private String password ;

// 如果没有指定构造方法,则会自动生成一无参的什么都不做的构造方法
public SimpleBean() {
System.out.println("** public SimpleBean() .") ;
System.out.println("-------------------------------------------") ;
}

public void setName(String name) {
this.name = name ;
}
public void setPassword(String password) {
this.password = password ;
}
public String getName() {
return this.name ;
}
public String getPassword() {
return this.password ;
}
};

JAVA命名规范:
1、 包命名:全部字母小写:org.sky.darkness
2、 类命名:单词的首字母大写:SimpleBean
3、 属性名称:第一个单词的首字母小写,之后的每一个单词的首字母大写
4、 方法命名:与属性命名相同:public void sayHellow();
5、 常量命名:全部单词大写:final String DBDRIVER=”darkness”


对Java程序进行打包编译:javac –d . *.java
JavaBean开发完成之后,在JSP中的调用过程:
1.使用<%@ page import =””%>导入
实际上WEB-INF/classes是一个classpath路径,所有的class文件只要放在此目录都可以被访问到,与其他类的调用方式一样
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<%@page import=" org.sky.darkness.*"%>  
3.<%  
4.    // 实例化对象  
5.    SimpleBean sb = new SimpleBean() ;  
6.    sb.setName("darkness") ;  
7.    sb.setPassword("wind") ;   
8.%>  
9.<h1>姓名:<%=sb.getName()%></h1>  
10.<h1>密码:<%=sb.getPassword()%></h1> 
<%@page contentType="text/html;charset=gb2312"%>
<%@page import=" org.sky.darkness.*"%>
<%
// 实例化对象
SimpleBean sb = new SimpleBean() ;
sb.setName("darkness") ;
sb.setPassword("wind") ;
%>
<h1>姓名:<%=sb.getName()%></h1>
<h1>密码:<%=sb.getPassword()%></h1>

2.使用JSP的标签指令调用
  <jsp:useBean id=”对象名” scope=”属性范围” class=”包的路径”/>
  如果使用此标签,则JAVABEAN中必须要有一个无参构造方法
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>  
3.<%  
4.    sb.setName("darkness") ;  
5.    sb.setPassword("wind") ;   
6.%>  
7.<h1>姓名:<%=sb.getName()%></h1>  
8.<h1>密码:<%=sb.getPassword()%></h1>  
9. 
10.<form action="JBDemo03.jsp" method="post">  
11.用户名:<input type="text" name="name"><br>  
12.密&nbsp;&nbsp;码:<input type="text" name="password"><br>  
13.<input type="submit" value="提交">  
14.<input type="reset" value="重置">  
15.</form> 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>
<%
sb.setName("darkness") ;
sb.setPassword("wind") ;
%>
<h1>姓名:<%=sb.getName()%></h1>
<h1>密码:<%=sb.getPassword()%></h1>

<form action="JBDemo03.jsp" method="post">
用户名:<input type="text" name="name"><br>
密&nbsp;&nbsp;码:<input type="text" name="password"><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>

Tomcat 服务器,在默认的情况下是不能读取修改后的JAVABEAN,如要读取有以下两中方法:
1. 重新启动服务器
2. 配置参数: reloadable=”true”
Server.xml中<Context path=”/test” docBase=”f:\testWeb” reloadable=”true”/>
什么时候使用这个reloadable属性?
*如果使用这个参数,则表示服务器使用要监视着是否有改动,影响服务器的性能
*在运行时,此参数必须去掉
*在开发是,为了开发方便,则加入此参数

使用JAVABEAN, v表示要设置的属性,如果为“*”,则表示自动匹配
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>  
3.<jsp:setProperty name="sb" property="*"/>  
4.<%--  
5.    // 如果有20个数据需要设置,则使用JavaBean的设置属性方式,可以自动完成  
6.    // 代替以下代码  
7.    sb.setName(request.getParameter("name")) ;  
8.    sb.setPassword(request.getParameter("password")) ;   
9.--%>  
10.<h1>姓名:<%=sb.getName()%></h1>  
11.<h1>密码:<%=sb.getPassword()%></h1> 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>
<jsp:setProperty name="sb" property="*"/>
<%--
// 如果有20个数据需要设置,则使用JavaBean的设置属性方式,可以自动完成
// 代替以下代码
sb.setName(request.getParameter("name")) ;
sb.setPassword(request.getParameter("password")) ;
--%>
<h1>姓名:<%=sb.getName()%></h1>
<h1>密码:<%=sb.getPassword()%></h1>

为什么能够通过property=”*”的方式,将内容设置到BEAN中,其根本原因是使用了JAVA本身的反射机制,传递参数的名称找到相应的方法,比如:参数名称为name,则自动找到setName()方法
Java代码
1.// 所有的JavaBean必须放在一个包中  
2.package org.sky.darkness ;  
3. 
4.public class SimpleBean  
5.{  
6.    private String name ;  
7.    private String password ;  
8.    private int age ;  
9.      
10.    // 如果没有指定构造方法,则会自动生成一无参的什么都不做的构造方法  
11.    public SimpleBean()  
12.    {  
13.        System.out.println("** public SimpleBean() .") ;  
14.        System.out.println("-------------------------------------------") ;  
15.    }  
16.      
17.    public void setAge(int age)  
18.    {  
19.        this.age = age ;  
20.    }  
21.    public int getAge()  
22.    {  
23.        return this.age ;  
24.    }  
25. 
26.    public void setName(String name)  
27.    {  
28.        System.out.println("** 设置name属性.") ;  
29.        this.name = name ;  
30.    }  
31.    public void setPassword(String password)  
32.    {  
33.        System.out.println("** 设置password属性.") ;  
34.        this.password = password ;  
35.    }  
36.    public String getName()  
37.    {  
38.        System.out.println("** 取得password属性.") ;  
39.        return this.name ;  
40.    }  
41.    public String getPassword()  
42.    {  
43.        System.out.println("** 取得password属性.") ;  
44.        return this.password ;  
45.    }  
46.}; 
// 所有的JavaBean必须放在一个包中
package org.sky.darkness ;

public class SimpleBean
{
private String name ;
private String password ;
private int age ;

// 如果没有指定构造方法,则会自动生成一无参的什么都不做的构造方法
public SimpleBean()
{
System.out.println("** public SimpleBean() .") ;
System.out.println("-------------------------------------------") ;
}

public void setAge(int age)
{
this.age = age ;
}
public int getAge()
{
return this.age ;
}

public void setName(String name)
{
System.out.println("** 设置name属性.") ;
this.name = name ;
}
public void setPassword(String password)
{
System.out.println("** 设置password属性.") ;
this.password = password ;
}
public String getName()
{
System.out.println("** 取得password属性.") ;
return this.name ;
}
public String getPassword()
{
System.out.println("** 取得password属性.") ;
return this.password ;
}
};

原则:使用JAVABEAN的自动设置内容时,一定要让参数名称与BEAN中的属性名称一致,这样通过JAVA的命名规范,可以达到统一。

当需要指定设置具体某个参数时,可以在property中指定参数
*<jsp:setProperty name=”ds” property=”*”/>:自动匹配
*<jsp:setProperty name=”ds” property=”name”/>:可以根据自己的需要设置需要的属性值
*<jsp:setProperty name=”ds” property=”name” param=”password”/>
<jsp:setProperty name=”ds” property=”password” param=”name”/>//密码与用户名调换
*<jsp:setProperty name=”ds” property=”name” value=”<%=%>”/>根据用户的需要自己设置属性的值,当为变量时要使用表达式输出

取得属性用:<jsp:getProperty name=”ds” property=”name”/>
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>  
3.<jsp:setProperty name="sb" property="*"/>  
4.<h1>姓名:<jsp:getProperty name="sb" property="name"/></h1>  
5.<h1>密码:<jsp:getProperty name="sb" property="password"/></h1>  
6.使用javaBean的setProperty方法,可以自动将传递过来的只有数字的字符串转换为整型  
7.<form action="JBDemo05.jsp" method="post">  
8.用户名:<input type="text" name="name"><br>  
9.密&nbsp;&nbsp;码:<input type="text" name="password"><br>  
10.年&nbsp;&nbsp;龄:<input type="text" name="age"><br>  
11.<input type="submit" value="提交">  
12.<input type="reset" value="重置">  
13.</form>  
14. 
15.<%@page contentType="text/html;charset=gb2312"%>  
16.<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>  
17.<jsp:setProperty name="sb" property="*"/>  
18.<h1>姓名:<jsp:getProperty name="sb" property="name"/></h1>  
19.<h1>密码:<jsp:getProperty name="sb" property="password"/></h1>  
20.<h1>年龄:<jsp:getProperty name="sb" property="age"/></h1> 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>
<jsp:setProperty name="sb" property="*"/>
<h1>姓名:<jsp:getProperty name="sb" property="name"/></h1>
<h1>密码:<jsp:getProperty name="sb" property="password"/></h1>
使用javaBean的setProperty方法,可以自动将传递过来的只有数字的字符串转换为整型
<form action="JBDemo05.jsp" method="post">
用户名:<input type="text" name="name"><br>
密&nbsp;&nbsp;码:<input type="text" name="password"><br>
年&nbsp;&nbsp;龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>

<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="sb" scope="page" class="org.sky.darkness.SimpleBean"/>
<jsp:setProperty name="sb" property="*"/>
<h1>姓名:<jsp:getProperty name="sb" property="name"/></h1>
<h1>密码:<jsp:getProperty name="sb" property="password"/></h1>
<h1>年龄:<jsp:getProperty name="sb" property="age"/></h1>

Page范围:属性只在当前页有效,如果跳转到其他页面则重新实例化
   适用于:JSP页面操作资源时使用
Request范围:属性只保存在一次服务器端跳转
   前提:使用<jsp:forward>跳转才行
Session范围:属性保存在一次会话中
   适用于 :使用JSP直接开发购物车
Application范围:整个服务器中只实例化一次
Java代码
1.package org.sky.darkness ;  
2. 
3.public class CountBean  
4.{  
5.    private int coun = 0 ;  
6. 
7.    public CountBean()  
8.    {  
9.        System.out.println("** CountBean() ...") ;  
10.        System.out.println("¤ --------------------------------- ¤") ;  
11.    }  
12. 
13.    public void setCoun(int coun)  
14.    {  
15.        this.coun = coun ;  
16.    }  
17. 
18.    public int getCoun()  
19.    {  
20.        return ++this.coun ;  
21.    }  
22.}; 
package org.sky.darkness ;

public class CountBean
{
private int coun = 0 ;

public CountBean()
{
System.out.println("** CountBean() ...") ;
System.out.println("¤ --------------------------------- ¤") ;
}

public void setCoun(int coun)
{
this.coun = coun ;
}

public int getCoun()
{
return ++this.coun ;
}
};
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="cb" scope="page" class="org.sky.darkness.CountBean"/>  
3.访问第  
4.<font color="red" size="15">  
5.    <jsp:getProperty name="cb" property="coun"/>  
6.</font>  
7.次!!  
8.<jsp:forward page="pageJBDemo02.jsp"/>  
9. 
10.<%@page contentType="text/html;charset=gb2312"%>  
11.<jsp:useBean id="cb" scope="page" class="org.sky.darkness.CountBean"/>  
12.访问第  
13.<font color="red" size="15">  
14.    <jsp:getProperty name="cb" property="coun"/>  
15.</font>  
16.次!! 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cb" scope="page" class="org.sky.darkness.CountBean"/>
访问第
<font color="red" size="15">
<jsp:getProperty name="cb" property="coun"/>
</font>
次!!
<jsp:forward page="pageJBDemo02.jsp"/>

<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cb" scope="page" class="org.sky.darkness.CountBean"/>
访问第
<font color="red" size="15">
<jsp:getProperty name="cb" property="coun"/>
</font>
次!!
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="cb" scope="request" class=" org.sky.darkness.CountBean"/>  
3.访问第  
4.<font color="red" size="15">  
5.    <jsp:getProperty name="cb" property="coun"/>  
6.</font>  
7.次!!  
8.<jsp:forward page="requestJBDemo02.jsp"/> 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cb" scope="request" class=" org.sky.darkness.CountBean"/>
访问第
<font color="red" size="15">
<jsp:getProperty name="cb" property="coun"/>
</font>
次!!
<jsp:forward page="requestJBDemo02.jsp"/>
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="cb" scope="request" class=" org.sky.darkness.CountBean"/>  
3.访问第  
4.<font color="red" size="15">  
5.    <jsp:getProperty name="cb" property="coun"/>  
6.</font>  
7.次!! 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cb" scope="request" class=" org.sky.darkness.CountBean"/>
访问第
<font color="red" size="15">
<jsp:getProperty name="cb" property="coun"/>
</font>
次!!
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="cb" scope="session" class=" org.sky.darkness.CountBean"/>  
3.访问第  
4.<font color="red" size="15">  
5.    <jsp:getProperty name="cb" property="coun"/>  
6.</font>  
7.次!!  
8.<a href="sessionJBDemo02.jsp">sessionJBDemo02.jsp</a> 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cb" scope="session" class=" org.sky.darkness.CountBean"/>
访问第
<font color="red" size="15">
<jsp:getProperty name="cb" property="coun"/>
</font>
次!!
<a href="sessionJBDemo02.jsp">sessionJBDemo02.jsp</a>
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="cb" scope="session" class=" org.sky.darkness.CountBean"/>  
3.访问第  
4.<font color="red" size="15">  
5.    <jsp:getProperty name="cb" property="coun"/>  
6.</font>  
7.次!! 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cb" scope="session" class=" org.sky.darkness.CountBean"/>
访问第
<font color="red" size="15">
<jsp:getProperty name="cb" property="coun"/>
</font>
次!!
Java代码
1.<%@page contentType="text/html;charset=gb2312"%>  
2.<jsp:useBean id="cb" scope="application" class=" org.sky.darkness.CountBean"/>  
3.访问第  
4.<font color="red" size="15">  
5.    <jsp:getProperty name="cb" property="coun"/>  
6.</font>  
7.次!! 
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cb" scope="application" class=" org.sky.darkness.CountBean"/>
访问第
<font color="red" size="15">
<jsp:getProperty name="cb" property="coun"/>
</font>
次!!


7.2 JSP 标准动作简介 
7.3 forward 动作
<jsp:forward page=”uri”/>跳转语句,属于无条件跳转语句,使用此语句页面内容已经跳转了,但地址栏没有改变,意味着:用户的请求没有改变,此跳转属于服务器端跳转

Java代码
1.<jsp:forward page=”uri”>  
2.    <jsp:param name=”” value=”<%=%>”>  
3.</jsp:forward>  
4.<%  
5.    String name = "darkness" ;  
6.%>  
7. 
8.<jsp:forward page="forwardDemo02.jsp">  
9.    <jsp:param name="ref1" value="sky"/>  
10.    <jsp:param name="ref2" value="<%=name%>"/>  
11.</jsp:forward> 
<jsp:forward page=”uri”>
<jsp:param name=”” value=”<%=%>”>
</jsp:forward>
<%
String name = "darkness" ;
%>

<jsp:forward page="forwardDemo02.jsp">
<jsp:param name="ref1" value="sky"/>
<jsp:param name="ref2" value="<%=name%>"/>
</jsp:forward>

两种跳转语句的区别:
1.<jsp:forward page=””/>
   *  地址栏不改变跳转——服务器跳转
   *  执行到跳转语句后无条件立刻跳转——之后的代码不再被执
   *  注意:如果使用 forward跳转,则一定要在跳转之前释放到所有资源
   *  使用forward时,request设置的属性依然能保存在下一个页面(setAttribute)
   *  通过<jsp:param name=”” value=””/>传递参数
2.response.sendRedirect(URL)
   *  地址栏改变——客户端跳转
   *  所有代码执行完后再跳转
*  不能保存 request属性——地址改变了,客户端跳转
*  通过URL地址重写传递参数

7.4 include 动作
JSP中两中包含语句:
<%@ include  file = “”%>
---------静态包含页面:只是将叶面的内容包含进来,如果被包含的页面含有JSP代码,则执行此代码,不管被包含的页面的后缀如何
-------执行时,将页面包含进来一起处理
<jsp:include page=”uri” flues=”true”>标签指令形式的代码,必须完结
<jsp:param name=”” value=””>//将参数传给页面处理后将执行的结果包含进来
</jsp:include>
<jsp:include page=”uri” />
--------动态包含页面:能自动区分所包含的页面是静态页面还是动态页面
--------执行是:如果为静态页面,处理方式与<%@ include  file = “”%>相同
     如果为动态页面,则先各自处理,然后将处理后的内容包含进来

Java代码
1.<%-- 使用此语句处理显示中的乱码 --%>  
2.<%@page contentType="text/html;charset=gb2312"%>  
3.<html>  
4.<head>  
5.    <title>include demo</title>  
6.</head>  
7.<body>  
8.<jsp:include page="incl.jsp">  
9.    <jsp:param name="ref1" value="wind"/>  
10.    <jsp:param name="ref2" value="cloud"/>  
11.</jsp:include>  
12.<jsp:include page="incl.txt">  
13.    <jsp:param name="ref1" value="wind"/>  
14.    <jsp:param name="ref2" value="cloud"/>  
15.</jsp:include>  
16.<jsp:include page="incl.sky"/>  
17.</body>  
18.</html>  
19.<h1>PARAM1:<%=request.getParameter("ref1")%></h1>  
20.<h1>PARAM2:<%=request.getParameter("ref2")%></h1> 
<%-- 使用此语句处理显示中的乱码 --%>
<%@page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>include demo</title>
</head>
<body>
<jsp:include page="incl.jsp">
<jsp:param name="ref1" value="wind"/>
<jsp:param name="ref2" value="cloud"/>
</jsp:include>
<jsp:include page="incl.txt">
<jsp:param name="ref1" value="wind"/>
<jsp:param name="ref2" value="cloud"/>
</jsp:include>
<jsp:include page="incl.sky"/>
</body>
</html>
<h1>PARAM1:<%=request.getParameter("ref1")%></h1>
<h1>PARAM2:<%=request.getParameter("ref2")%></h1>
Java代码
1.<%-- 使用此语句处理显示中的乱码 --%>  
2.<%@page contentType="text/html;charset=gb2312"%>  
3.<html>  
4.<head>  
5.    <title>include demo</title>  
6.</head>  
7.<body>  
8.<%  
9.    int i = 100 ;  
10.%>  
11.<h1>includeDemo04.jsp:<%=i%></h1>  
12.<jsp:include page="include.jsp"/>  
13.<%@include file="incl.jsp"%>  
14.<%@include file="incl.txt"%>  
15.</body>  
16.</html>  
17.<%  
18.    int i = 10 ;  
19.%>  
20.<h1>include.jsp:<%=i%></h1> 
<%-- 使用此语句处理显示中的乱码 --%>
<%@page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>include demo</title>
</head>
<body>
<%
int i = 100 ;
%>
<h1>includeDemo04.jsp:<%=i%></h1>
<jsp:include page="include.jsp"/>
<%@include file="incl.jsp"%>
<%@include file="incl.txt"%>
</body>
</html>
<%
int i = 10 ;
%>
<h1>include.jsp:<%=i%></h1>

7.5 JavaBean和Jsp标准动作应用案例
7.6 本章小结  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics