一 动作元素的概念
1.概念:动作是特殊的标记,通过一个动作标记可以实现多行Java代码实现的效果。可以动态插入文件、重用JavaBean组件、导向另一个页面等,是自定义标签。
2.发生的时间:
动作元素是客户端请求时动态执行,执行多次
指令元素是在编译时编译执行,只编译一次
3.分为以下三种:
<jsp:useBean>
<jsp:include>
<jsp:forward>
javaBean与一般的java类没什么特别大的区别但是要,满足两个条件
(1)首先类是共有的,有一个默认无参的构造
(2)在类中可以定义若干个私有的属性和无参构造 getter和setter方法
二 案例使用:
1.<jsp:useBean></jsp:useBan>标签
useBean动作用于创建引用,并将现有的Bean组件嵌入JSP 。
语法:
<jsp:useBean id="BeanName" class="BeanClass" scope="page|request|session|application"/>
说明: id是Bean对象的名称,class对应的限定名,scope 有效范围
jsp:useBean标签代替java代码
实例:
<jsp:useBean id="book"
class="com.csdn.beans.Book" scope="session"/>
jsp代码对应一段java代码
jsp代码:
jsp:useBean id="book" class="com.csdn.beans.Book"
scope="session"|page|request|application/>
作用:去获取session.getAttribute()对象,如果book是=null,要创建该对象,并且将对象设置到属性作用域之内,如果不为空,直接返回
对应的java代码
Book books = scope.getAttribute(“book”);
If(books==null){
Book book = new Book();
scope.setAttribute();
}
return book;
补充:
(1)<jsp:useBean>设置值<jsp:useBean>和在外面设置值的区别
当程序执行到
<jsp:useBean>
<jsp:setProperty property="isbn" name="book" param="isbn"/>
</jsp:useBean>
时,如果在执行这句话之前没有执行设置属性的操作,那么这句话就可以有效,如果在执行这句话之前设置过属性的操作,就不会有效。
当执行到
<jsp:useBean>
</jsp:useBean>
<jsp:setProperty property="isbn" name="book" param="isbn"/>
时,如果在执行这句话之前设置过属性的操作,也会有效。
(2) 作用域:
scope="request" 请求域范围之内
把设置的属性放到request对象中,当使用请求的转发的时候,跳转到另一个界面 如果不是跳转到另一个界面,而是又打开一个窗口,会新建,又一次请求
scope="application"
就相当于是创建了session对象,在整个程序中都有效
scope="page"
只对当前页有效 首先执行的是page标签
(3)javaBean的好处:
JavaBean技术更有利于Web开发的代码复用。因为写在JSP页面中的Java代码片段重用性要差一些,而JavaBean是一个Java类,更方便在其他Web应用中复用。
JavaBean技术还有利于开发项目的角色分工,让页面设计人员和程序编写人员更容易地修改JSP页面中自己所管辖的内容,而不必互相干扰。
.2.<jsp:setProperty></jsp:setProperty>标签
setProperty动作用于设置useBean中指定的Bean的属性的值。setProperty动作指定JavaBean的名称、属性名、属性值和参数,用于赋给Bean的属性。
语法:
<jsp:setProperty name="BeanAlias" property="PropertyName" value="Value" param="Parameter“/>
<jsp:setProperty property="bean对象的属性名称" name="bean对象的名字"/>
说明:name是设置bean的对象,property是bean对应的属性名,value是赋值
Param是动态的设置数据(是用户输入的设置值)
实例:
<jsp:setProperty property="name" name="book" value="java书"/>
注:
如果设置的param值和bean的属性值是一样的,那么可以写成:
<jsp:setProperty property="isbn" name="book"/>
因为属性不可能是一个,而是多个,所有这样每个属性都要写这么多,会是很麻烦的事情,所有可以写成:
<jsp:setProperty property="*" name="book"/>
jsp代码对应一段java代码
jsp代码:
<jsp:setProperty property="isbn" name="book" param="isbn"/>
String value=request.getParamet(xxx);
Java代码
Bean对象.setXXX(“xxx”);
3. <jsp:getProperty></jsp:getProperty>标签
getProperty动作用于获取Bean中指定的属性中的值。系统先将收到的值转换为字符串,然后再将其作为输出结果发送。
语法:
<jsp:getProperty name="BeanAlias" property="PropertyName"/>
说明:
bean对象的属性名称" name="bean对象的名字" value="bean对象的指定的属性值"
<jsp:getProperty property="bean对象的属性名称" name="bean对象的名字" value="bean对象的指定的属性值"/>
实例:
<jsp:getProperty property="isbn" name="book" />
jsp代码对应一段java代码
jsp代码:
<jsp:getProperty property="isbn" name="book" />
Java代码:
out.println(Bean对象.getXXX(“xxx”));
作用:具有输出的功能
param="isbn"
4.<jsp:include></jsp:include>标签
include动作用于将其他HTML页面或JSP页面中的内容合并到当前页面,或将其中的文件插入到当前页面。是动作元素,是发生在转换之后
语法:
不带参数的include动作:
<jsp:include page="weburl" flush="true"/>
带参数的include动作:
<jsp:include page="weburl" flush="true">
<jsp:param name="ParamName" value="ParamValue"/>
<jsp:include>
注:使用include动作的JSP页面,通过request.getParameter(“name”)获得被包含文件传递的参数值。
利用jsp;include包含动态 的网页,并可以在这个标签中设置值,并在另一个标签中用request获取
实例:
<jsp:include page="inputBook.jsp">
<jsp:param value="Tom" name="var1" />
</jsp:include>
动作include元素和指令的include元素的区别:
(1)动作包含: <jsp:include page="被指定包含的文件url地址">
<jsp:include page="inputBook.jsp">
指令包含:<%@ include file="被指定包含的文件url地址"%>
<%@ include file="date.txt"%>
(2)动作的include可包含动态的页面和静态的页面
指令的include不可包含动态的页面,只包含静态的页面
(3)在某些情况下可以用指令的include包含动态的页面:
注销掉下面的代码即可:
basePath是基准的路径,所有的路径设置是在这个基础上指定的
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
<base href="<%=basePath%>"/>
可写为:<%@ include file="inputBook.jsp"%>
(4)用指令元素包含时:
当一个jsp在运行时,将jsp转换为servlet,如果遇到包含的动作,把包含的动作直接包含到servlet中,所以在转换阶段有一个servlet 为index.jsp
用动作指令包含时:
会执行多次,是在每一次客户端在提交请求的时候执行
没有把目标文件包含过来,只是打了一个标记,是方法的调用语句 ,在通过,另一个ervlet也在执行,把执行的结果放到要包含的函数中,接着往下执行
在转换时有两个servlet index.jsp 和inputBook.jsp
补充:
注释:
Html注释 <!- - -->
会发送回客户端,但浏览器不会解析,可以通过查看源文件查看
Jsp注释 <%-- --%>
不会发送给客户端—隐藏的注释