JSP页面就是带有JSP元素的常规Web页面,它由静态内容和动态内容构成。
JSP元素:
(1)指令元素
(2)脚本元素
(3)动作元素
指令元素主要用于为转换阶段提供JSP页面的相关信息,指令不会产生任何输出到当前的输出流中,它指定了有关页面本身的信息,这些信息在请求期间一直保持不变。
所有的JSP指令元素的作用范围为当前的JSP页面,即指令元素只影响当前的这个JSP页面,对其他JSP页面没有影响。
使用JSP脚本元素可以将Java代码嵌入到JSP页面中,这些Java代码将出现在由当前JSP页面生成的Servlet中,使JSP将静态内容与动态内容分离出来。
表达式
表达式标签在JSP请求处理阶段进行运算,所得的结果转换成字符串,与静态标签数据组合在一起。表达式在页面的位置,就是该表达式计算结果显示的位置。
语法:<%= expression %>
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对象的指定的属性值"/>
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