Jsp/Servlet复习笔记-----第7章 JavaBean组件和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

// 所有的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文件只要放在此目录都可以被访问到,与其他类的调用方式一样

<%@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中必须要有一个无参构造方法

<%@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表示要设置的属性,如果为“*”,则表示自动匹配

<%@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()方法

// 所有的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”/>

<%@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范围:整个服务器中只实例化一次

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 ;
	}
};

<%@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>
次!!

<%@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"/>

<%@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>
次!!

<%@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>

<%@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>
次!!

<%@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”/>跳转语句,属于无条件跳转语句,使用此语句页面内容已经跳转了,但地址栏没有改变,意味着:用户的请求没有改变,此跳转属于服务器端跳转

<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 = “”%>相同
     如果为动态页面,则先各自处理,然后将处理后的内容包含进来

<%-- 使用此语句处理显示中的乱码 --%>
<%@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>

<%-- 使用此语句处理显示中的乱码 --%>
<%@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 本章小结  

你可能感兴趣的:(java,jsp,应用服务器,bean,servlet)