jsp动作指令

动作指令与编译指令不同:
1) 编译指令是通知Servlet引擎的处理消息,是在将JSP编译成Servlet时起作用
2) 动作指令只是运行时的动作,通常可替换成JSP脚本,它只是JSP脚本的标准化写法
JSP的动作指令主要有如下7个:

  1. jsp:forward:
    执行页面转向,将请求的处理转发到下一个页面,可以转发到:

    1. 静态HTML页面
    2. 动态的JSP页面
    3. 容器中的Servlet
      语法1:
      <jsp:forward page="{relativeURL|<%=expression%>}"/>
      语法2:
      <jsp:forward page="{relativeURL|<%=expression%>}">
      {jsp:param.../}
      </jsp:forward>
      第二种语法用于在转发时增加额外的请求参数。增加的请求参数的值可以通过HttpServletRequest类的getParameter()方法获取
      request.getParameter("");
      从本质上来说,jsp:forward这个动作指令只是一个内部转发,即jsp:forward../并没有重新向新页面发送了请求,它只是完全采用了新页面来对用户生成响应(内部转发),请求依然是一次
      请求,所以请求参数、请求属性都不会丢失
  2. jsp:include:
    动态引入一个JSP页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面中
    <jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
    或者
    <jsp:include page="{relativeURL|<%=expression%>}" flush="true">
    <jsp:param name="parameterName" value="parameerValue"/>
    </jsp:include>
    这里要注意和编译指令的inlcude进行区分

  3. 静态引入(编译指令)
    <%@include file="file.jsp"%>
    可以将外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句(如果有的话),也就是说,它既可以包含静态的文本,也可以包含动态的JSP页面。包含页面在编译时将完全包含了被包含
    页面的代码。需要指出的是,静态包含还会将被包含页面的编译指令也包含进来,如果两个页面的编译指令冲突,那么页面就会出错

  4. 动态引入(动作指令)
    jsp:include
    归纳起来,动态导入和静态导入的区别有

  1. 静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet
  2. 动态导入则在Servlet中使用include方法来引入被导入页面的内容
  3. 静态导入时被导入页面的编译指令会起作用。
  4. 动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容
  5. 动态导入可以增加额外的参数
    实际上,forward动作指令和include动作指令(动态引入)十分相似,它们都采用方法来引入目标页面
    forward指令使用_jspx_page_context.forward()方法来引入目标页面
    include指令使用org.apache.jasper.runtime.JspRuntimeLibrary.include()方法来引入目标页面
    区别在于,执行forward时,被forward的页面将完全代替原有的页面,而执行include时,被include的页面只是插入原有页面
    即forward拿目标页面代替原有页面,而include则拿目标页面插入原有页面
  1. JavaBean相关
    3.1) jsp:useBean: 在JSP页面中初始化一个JavaBean的实例
    <jsp:useBean id="name" class="Classname" scope="page|request|session|application"/>
    3.1.1) id: JavaBean的实例名
    3.1.2) class: 确定JavaBean的实现类
    3.1.3) scope: 指定JavaBean实例的作用范围
    3.1.3.1) page: 该JavaBean实例仅在该页面有效
    3.1.3.2) request: 在本次请求有效
    3.1.3.3) session: 在本次session内有效
    3.1.3.4) application: 在本应用中一直有效
    3.1.4)
    3.2) jsp:setProperty: 设置JavaBean实例的属性值
    <jsp:setProperty name="BeanName" property="propertyName" value="value" />
    3.2.1) name: JavaBean的实例名
    3.2.2) property: 确定需要设置的属性名
    3.2.3) value: 确定需要设置的属性值
    3.3) jsp:getProperty: 输出JavaBean实例的属性值
    <jsp:getProperty name="BeanName" property="propertyName" />
    3.3.1) name: 确定需要输出的JavaBean实例名
    3.3.2) property: 确定需要输出的属性名
    这三个指令都是与JavaBean相关的指令,如果多个JSP页面中需要重复使用某段代码,我们可以把这段代码定义成java类的方法,然后让多个JSP页面调用该方法即可,这样可以达到较好的代码
    复用
    在.jsp页面中我们可以这样编码

<jsp:useBean id="p1" class="lee.Person" scope="page"/>

<jsp:setProperty name="p1" property="name" value="wawa"/>

<jsp:setProperty name="p1" property="age" value="23"/>

<jsp:getProperty name="p1" property="name"/>

<jsp:getProperty name="p1" property="age"/>
从代码中可以看到,我们使用了useBean、setProperty、getProperty来操作JavaBean的方法,同时我们需要明白的是,对于property="name",在JavaBean中提供了setName()、
getName()方法来操作,property="age"也是同理
代码中对应的JavaBean的Person类源代码如下
package lee;
public class Person
{
private String name;
private int age;

//无参数的构造器
public Person()
{
}
//初始化全部属性的构造器
public Person(String name , int age)
{
    this.name = name;
    this.age = age;
}

//name属性的setter和getter方法
public void setName(String name)
{
    this.name = name;
}
public String getName()
{
    return this.name;
}

//age属性的setter和getter方法
public void setAge(int age)
{
    this.age = age;
}
public int getAge()
{
    return this.age;
}

}

  1. plugin指令
    plugin指令主要用于下载服务器端的JavaBean、或Applet到客户端执行。由于程序在客户端执行,因此客户端必须安装虚拟机

  2. param指令
    param指令用于设置参数值,这个指令本身不能单独使用,因为单独的param没有实际意义。param指令可以与以下三个指令结合使用
    5.1) jsp:include
    当与include指令结合使用时,param指令用于将参数值传入被导入的页面
    5.2) jsp:forward
    当与forward指令结合使用时,param指令用于将参数值传入被转向的页面
    5.3) jsp:plugin
    当与plugin指令结合使用时,用于将参数传入页面中的JavaBean实例或Applet实例
    <jsp:param name="paramName" value="paramValue"/>
    */

原文地址:https://www.cnblogs.com/liuxueping/p/13944781.html