博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jsp学习(四)
阅读量:5089 次
发布时间:2019-06-13

本文共 8870 字,大约阅读时间需要 29 分钟。

JSP Action

1、定义

  • Action 是一个JSP 元素,可以操作内置对象、其他服务器对象,或者定义一个新的脚本变量,或者完成转发、包含等行为
  • Action 可以分成标准动作和自定义动作

标准动作

1、定义

  • 标准动作必须使用jsp: 做前缀
  • 标准动作通用语法
body

2、常见的标准动作

  • <jsp:include>在JSP页面动态包含一个外在文件
  • <jsp:param>:用于传递参数值
  • <jsp:forward>:把到达的请求转发另一个页面进行处理

  • <jsp:useBean>:定义jsp页面使用一个JavaBean实例

  • <jsp:setProperty>:设置一个JavaBean中的属性值

  • <jsp:getProperty>:从JavaBean中获取一个属性值

<jsp:include>

1、include动作和include的指令的区别

  • include指令在被导入页面时,编译jsp会起作用,而include动作在编译到页面会失去作用,只是在原有的jsp代码中的<boby>标签生成页面的内容,故可以使用param动作来为被导入的页面传递参数;
  • 从jsp位置来看,include指令是通过file属性来指定被包含的文件,是放在jsp代码顶部,include动作放在<boby>标签来指定被包含的文件,可以通过page属性,所以支持jsp表达式,而file不支持任何表达式
  • include指令在被导入页面时,会与原有的jsp代码完全融合,共同生成同一个Servlet;而include动作则会在原有的jsp代码使用include方法而被导入页面,所以includ指令在执行时不需要编译,执行速度快,而includ动作在执行时需要编译,执行速度慢;

    include动作的包含

    org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/action/inner.jsp", out, false);

    include指令的包含

    out.write("\n");      out.write("\n");      out.write("\n");      out.write("
    \n"); out.write("inner\n"); out.write("\n"); out.write("\n"); out.write("\n"); out.write("\t"); for( int i = 0 ; i < 10 ; i++ ) { out.println( i ) ; // 这个 out 是 JSP 内置对象 } out.write("\n"); out.write("\n"); out.write("\n"); out.write("");

2、属性

  • page 用于指定所要包含的资源相对URL
  • 被包含的资源可以是jsp 也可以是servlet 或者html 等
  • 可以使用相对路径,也可以使用"绝对路径"(这个路径是相对于当前web应用的根目录的,本质上还是相对路径)

    例如:绝对路径/action/inner.jsp,相对路径 inner.jsp(被包含的资源与当前页面在同一层次)

  • flush 用于设置当缓冲区用尽时,是否清空

3、测试案例

include.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%> 
标准动作 : include

inner.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>    
inner    <% for( int i = 0 ; i < 10 ; i++ ) { out.println( i ) ; // 这个 out 是 JSP 内置对象 } %>

inner.html

Insert title here

我是内部的HTML页面

inner.txt

你好,我是文本文件

InnerServlet.java

package ecut.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.malajava.util.StringHelper;@WebServlet( "/inner.do" )public class InnerServlet extends HttpServlet {    private static final long serialVersionUID = 8241829948239427285L;    @Override    protected void service( HttpServletRequest request , HttpServletResponse response )             throws ServletException, IOException {        PrintWriter w = response.getWriter();        w.println( "我是内部的Servlet" );        String username = request.getParameter( "username" );        if( StringHelper.notEmpty( username ) ) {            w.println( "

" + username +"

" ) ; } } }

<jsp:param>

 1、作用

  • 提供key/value 形式的信息,主要用途是用来传递参数
  • 使用在jsp:include 、jsp:forward 、jsp:params 等元素中

2、测试案例

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>
标准动作 : include & param

inner.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>    
inner    <% for( int i = 0 ; i < 10 ; i++ ) { out.println( i ) ; // 这个 out 是 JSP 内置对象 } %>   
${ param.username }
 

 <jsp:forward>

 1、属性

  • page 指定将要转发到的目标URL,使用相对路径

2、元素

  • <jsp:attribute> : 设置参数,比如设置page,相当于在page 属性中设置url
  • <jsp:param> : 为目标URL 传递参数,name : 指定所传递的参数的名称,value : 指定所传递的参数的参数值

3、测试案例

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>
标准动作 : forward

main.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>
VIP

这是付费才能看的片片哦

${ param.username }

 <jsp:useBean>

1、定义

Java Beans是一种软件组件

JavaBeans 是一种规范

JavaBeans是一个Java的类

有时称JavaBeans的实例为JavaBeans

2、Java Beans 编写要求

  • Bean 类必须拥有一个无参构造方法(就是默认的那个),显式地定义这样一个构造,或者省略所有的构造
  • JSP元素创建Bean时,会调用默认的构造函数,实际应用中,常用Servlet 创建Bean ,此时,不必一定有无参构造
  • Bean 类不应该有公开的实例变量(或叫字段、属性),所有的属性被私有化(封装起来)
  • 持续性的值应该通过getXxx 和setXxx 方法来访问,对于私有的属性需要提供对外访问的方法: get 和set

3、语法

  • 其中typeSpec 可以写成如下形式之一:

    class = "className"

    class = "className" type = "typeName"
    beanName = "beanName" type = "typeName"
    type = "typeName"

4、属性

  • id="name"

    用以指定Java 对象的实例名或引用对象的脚本变量的名称

    通过id指定的名称来分辨不同的Bean
    该名称严格区分大小写(相当于Java中的变量的名称)

  • scope="page | request | session | application "

    该属性用以确定Bean 存在的范围以及id 变量名的有效范围,默认page

  • class="className"

    使用new 关键字和构造器构造一个实例

    这个类必须是非抽象的,必须有公共的、无参构造
    类名必须是包名+ 类名,严格区分大小写

  • beanName="beanName" type="typeName"

    使用instantiate 方法从一个class 中实例化一个Bean

    instantiate方法在java.beans.Beans 中
    beanName可以是package 或class ,也可以是表达式
    package和class都是大小写敏感的
    同时还可以指定Bean 的类型

  • type="typeName"

    type可以指定一个类,也可以是一个父类,或者是一个接口

    如果没有使用class或beanName指定type,Bean将不会被实例化

5、测试案例

Student.java

package ecut.entity;import java.io.Serializable;import java.util.Date;public class Student implements Serializable {    private static final long serialVersionUID = 3097161330831346815L;    private Integer id;    private String studentName;    private char gender;    private Date birthdate;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return studentName;    }    public void setName(String name) {        this.studentName = name;    }    public char getGender() {        return gender;    }    public void setGender(char gender) {        this.gender = gender;    }    public Date getBirthdate() {        return birthdate;    }    public void setBirthdate(Date birthdate) {        this.birthdate = birthdate;    }}

userbean.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%> <%@ page import= "java.util.*" %> <%@ page import= "org.malajava.util.*" %>
标准动作: useBean <%-- Student student = null ; --%> <%--student = (Student )pageContext.getAttribute("student");--%> <%-- if ( student == null ) {   student =new Student();         pageContext.setAttribute("student" ,student);        } else {
          //如果指定的scope中已有某个类型的对象就不再创建        }   --%>
<%-- student 。setId( 1001 );//studet.id =1001--%>
<%Date birthdate = DateHelper.getDate( 1995 , 10 , 10 ) ; %>

JSP表达式:<%= student %>

EL表达式:${ student }


id : ${ student.id }
name : ${ student.name }
gender : ${ student.gender }
birthdate : ${ student.birthdate }

id :
name :

 <jsp:getProperty>

1、作用

  • 获取Bean的值,并将其转化为一个字符串插入到输出页面中

2、属性

  • name="name" : 必选属性,相应的Bean的名字
  • property="propertyName" : 必选属性,其值为相应的Bean内的属性名

 <jsp:setProperty>

1、作用

  • 用以设置Bean 中属性的值

2、语法

  • property-expression 可以写成:

    property="*"

    property="propertyName"
    property="propertyName" param="parameterName"
    property="propertyName" value="propertyValue"

3、测试案例

  • value只能赋静态值,param可以动态赋值;
  • value和param不能同时使用
  • 当property属性值为“*”时,request请求中所有参数的值将被分别赋给Bean中与参数具有相同名字的属性。
  • Bean中属性与参名字不相同用param

index.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>
Standard Actions

Standard Actions

<jsp:include> <jsp:forward> <jsp:param> <jsp:useBean> 、<jsp:setProperty>、<jsp:getProperty>

性别:

性别:

setProperty1.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>
标准动作 : setProperty
id : ${ student.id }
name : ${ student.name }
gender : ${ student.gender }

 setProperty2.jsp

<%@ page language = "java" pageEncoding = "UTF-8" %> <%@ page contentType = "text/html; charset= UTF-8"%>
标准动作 : setProperty
id : ${ student.id }
name : ${ student.name }
gender : ${ student.gender }

转载请于明显处标明出处

转载于:https://www.cnblogs.com/AmyZheng/p/9164874.html

你可能感兴趣的文章
日常开发时遇到的一些坑(三)
查看>>
Eclipse 安装SVN插件
查看>>
深度学习
查看>>
TCP粘包问题及解决方案
查看>>
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>