jsp动作元素

 

复习:

1、jsp的指令

1)page 指定当前页面能做什么,必须出现在页面的第一行

2)Include 包含,这主要指的是静态包含,为了实现页面重用(或者代码重用):针对页面:让一个页面成为很多页面公用的一个banner。针对代码部分 jsp使用的javabean导入包 的类。

3)taglib 回头再说吧,现在一时半会儿找不到

2、jsp内置对象

1)什么是内置对象?

服务器加载的一堆类的对象,是service方法中得参数或者变量

2)内置对象:输入输出,作用域对象 servlet对象 异常

3)四个作用域:page request session application

3model two mvc

Jsp+servlet +model

 

 

今天主要讲的是jsp的动作元素(jsp的标签儿)

jsp:useBean

Jsp:forward

jsp:param

jsp:include

 

忽然想到安全退出 还没有做。

昨天重做了一下用户信息的东西,利用mvc框架,然后做了一下关于分页,然后连select和 option也没有做。

昨天嗑代码过程了,还有做了一下在线用户和分页展示。

 

昨天主要讲了,jsp动作元素。昨天老师光展示了例子,我也没有使用。。。

 

先把昨天的动作元素现弄进来吧:

 

Jsp动作元素:

useBean setProperty getProperty param forward include

useBean 是用来创建类的对象的。或者换句话说:是:现在默认的当前pageContext中寻找名称为id对象的类的对象,如果有,就得到该对象,如果没有就创建新的对象。这些语句得复制进来,要不很坑!

 

<jsp:useBean id="ub" class="com.salmon.bean.UserBean"></jsp:useBean>

或者 <jsp:useBean id="ub" class="com.salmon.bean.UserBean"/>

加上作用域范围:

<jsp:useBean id="user" class="com.letben.bean.User" scope="session"/>

作用域默认空间是:page,可选项有:requestsessionapplication

 

并且要求javabean必须有一个无参的构造函数。

setProperty property(对象属性名) name(id 对象名) value

例子:

<jsp:setProperty property="userName" 

 

com.salmon.bean.UserBean 中的属性们:

 

package com.salmon.bean;
public class UserBean {

    private  int  userId;
    private  String userName;
    private  String userPs;
    /*getters 
    and 
    Setters*/
    public UserBean() {
        super();
        // TODO Auto-generated constructor stub
    }
}

 

 

getProperty 输出单个属性,举例:

<jsp:getProperty property="userName" name="ub2"/>

        <jsp:getProperty property="userId" name="ub2"/>

        <jsp:getProperty property="userPs" name="ub2"/>

 

 

Set一个一个 设置属性,或者aoe方式设置属性,

在登录里面有一个成熟的方式:

两个页面缺一不可显示。

 

界面一:

<form action="home.jsp">

<input type="hidden" name="id" value="5" />

 用户名:<input type="text" name="name" /> <br/>

 地址:<input type="text" name="address" /> <br/>

 <input type="submit" value="用jsp * 接收" />

</form>

 

 

界面二:

<jsp:useBean id="u" class="com.letben.bean.User"/>

    <jsp:setProperty property="*" name="u"/>

    <jsp:getProperty property="id" name="u"/> 

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

<jsp:getProperty property="address" name="u"/> 

 

这两组就可以完成数据的接收和展示,所以说,这个<jsp:setProperty 可以得到单个属性。

接收可以aoe接收,但是显示的时候需要一个一个来。

Aoe接收需要满足表单中的值和javabean对象的属性值的名称一致。

 

Param用来得到一个参数。

 

forward 请求转发,一旦转发,不再回来,转发时,可以用jsp:param带参数。

Include 请求转发(动态包含),把另外一个页面的执行结果包含进来,同样可以携带参数。

 

2、新增:第一种情况 在数据库中,主键自动增长

第二种情况, 查询表中逐渐的最大值,+1(调用主键获取方法,在业务层调用,设置到对应对象上。)

3、分页查询:

  

     1) 页面上超链接   

          // 判断    如果你是第一页 ,那么首页  上一页  就不能点击

          //  如果你是最后一页,尾页  下一页  就不能点击

         <a href="UserServlet.do?page=1">

         <a href="UserServlet.do?page=<%=nowPage-1%>">

     

     2)  servlet 中分页参数的设置

         nowPage  pageSize  count  totalPage

         // 接收传递你要显示的页数

         

         // 查询一个总记录数

         

         // 计算总页数

         

         //  保存reques中

         

         //  数据dao         imit (nowPage-1)*pageSize,pageSize

         

     3)  分页查询sql 语句 ,一个公式:limit (nowPage-1)*pageSize,pageSize  

 

 

Jsp动作元素:

ppt里面之所以把jspjavabean放在一起,是因为,jsp动作元素中的<jsp:useBean id="id名称" class="com.letben.bean.User"/>这个标签要调用javabean中的方法,并且getset也要一致,并且通过反射访问对应元素。所以在ppt里面这样安排也是合理的,当然我更喜欢老师组合讲例子的方式。

1、具体要求:jsp中可以使用jsp标准动作调用javabean组件并访问属性

2、在jsp中调用的javabean必须是公共类(public)

3javaBean中必须提供一个无参构造方法

4、提供getter/setter方法访问javabean属性。

举例:

import java.io.*;
public class MyBean{
    private String name;
    public MyBean(){}
    public String getName(){return name;}
    public void setName(String name){
    this.name=name;
    }
}

 

Jsp动作:

标准动作用于:

javaBean嵌入jsp页面

设置和获取javaBean的属性

将用户请求转发给其他页面

将其他页面的内容嵌入当前页面

标准动作可以为空标签及容器标签

标准动作中的属性区分大小写

Jsp中的标准动作使用<jsp>作为前缀

 

 

Jsp标准动作

Jsp标准动作

1、调用javabean相关

a) <jsp:useBean>

b) <jsp:getProperty>

c) <jsp:setProperty>

2、jsp页面通信

a) <jsp:include>

b) <jsp:forward>

c) 等等

第一个属性:useBean

<jsp:useBean>动作用于实例化javabean,或者定位一个已经存在的javabean实例,并把实例的引用赋值给一个变量。

<jsp:useBean id="beanId" class="com.letben.bean.MyBean" scope="page"/>

 

Javabean的作用范围:

范围指定:javaBean在及商品页面中的可用性。各种范围选项如下:

范围

pagebean只能在使用页面时使用,当家在新页面是,就会将其销毁

requestbean在用户对服务器发出请求时 存在

sessionbean一直存在于绘画中,直至其终止或者被删除为止。

application: bean在整个应用程序中均可使用

 

setProperty

<jsp:setProperty><jsp:useBean>一起使用,用来设置javabean的简单属性和索引属性,该动作使用bean中的setXxx()方法,在bean中设置一个或者多个属性

<jsp:useBean id="BeanId" class="MyBean" scope="session"/>

<jsp:setProperty name="BeanId" property="name" value="示例"/>

 

<jsp:setProperty>可以通过value属性为javabean的属性提供一个常量,也可以使用param属性接受一个请求参数的值设置为javaBean的属性值

<jsp:setProperty name="BeanId" property="name" param="paramName"/>

或者:当javaBean的属性名与请求参数名相同的情况下,可以使用property="*" 的方式为多个javaBean的属性同时赋值。

 

<jsp:setProperty name="BeanId" property="*"/>

getProperty动作

<jsp:getProperty>用来访问bean的属性,并且把获取到的属性作为out.println()语句的参数进行输出,如果访问到的是一个对象,那么就调用这个对象的toString()方法

举例:<jsp:useBean id="BeanId" class="com.letben.bean.MyBean" scope="page"/>

<jsp:setProperty name="BeanId" property="name" value="示例"/>

 

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

 

组合案例:

package com.letben.bean;
public class User{
    private String name;
    Private int age;
    public User(){}
    public void setName(String name){this.name=name;}
    public void setAge(int age){this.age=age;}
    public String getName(){return name;}
    public int getAge(){return age;}
}
<html>
    <head>
    <jsp:useBean id="user" class="com.letben.bean.User" scope="page"/>
    <jsp:setProperty name="user" property="name" value="lifei"/>
    <jsp:setProperty name="user" property="age" value="34"/>
    </head>
    <body>
    <jsp:getProperty name="user" property="name"/>
    <jsp:getProperty name="user" property="age"/>
    </body>
</html>

 

 

Forward动作

<jsp:forward>用来从jsp页面转向其他页面,并且向其他页面传递request对象和response对象。并且该标签后面的其他代码将不会在被执行

示例:<jsp:forward page="requestedPage.jsp"/>

注意的是:虽然是请求转发但是地址栏没有发生变化。

 

Include动作

<jsp:include>动作用来在当前jsp包含动态和静态的输出结果。

如果被包含的文件是静态的html文件,那么这种包含是把html中文件的内容添加到jsp文件中去。

如果这个文件是jsp文件,那么服务器也会将这个jsp文件进行解析,并且将结果输出到当前页面。

 

这里有一个需要记住的点:

<jsp:include page="included2.jsp">的这种包含从上面的文字很明显能看出来,他是一种动态包含过程。

<%@ include file="included1.jsp" %>这是一种静态包含。

动态包含会产生两个jsp文件,而静态包含只产生一个jsp文件。

 

Include动作举例:

<jsp:include page="includedPage.jsp/>

 

从上面可以看出来,如果是动态包含的话,就只是带个结果所以他的东西一定要全,所以他自己要生成一个jsp。如果是静态包含的话,被包含文件和起始文件都以起始文件作为命名,合并生成一个jsp。或者换一个方法记忆:写在上面的就是静态包含,就只生成一个,写在下面就是动态包含执行到这里,它只要结果,所以他需要一个完整的jsp编译。而写在上面的话,只能是:<%@ include file="included1.jsp"%>

写在下面的话就是:<jsp:include page="included2.jsp">

 

param动作

可以在include动作和include动作中添加param动作,为转向或嵌入的jsp页面中添加参数

举例:

<jsp:param name="age" value="23"/>//放在include forward或者 参数里面

<jsp:param name="name" value="lifei"/>//放在include forward 或者 参数里面。

然后利用<jsp:useBean id="user" class="com.letben.bean.User"/>

<jsp:setProperty property="name" name="name"/>//这里name的值应该是user

<jsp:setProperty property="age" name="age"/>//这里的值应该是user

 

The jsp:param action must not be used outside the jsp:include, jsp:forward, or jsp:params elements] with root cause

org.apache.jasper.JasperException: /sendParam.jsp (line: 27, column: 9) The jsp:param action must not be used outside the jsp:include, jsp:forward, or jsp:params elements

 

参数不能写在传输的外面。

 

成功范例:

发送 

 <jsp:forward page="getParam.jsp">

    <jsp:param name="name" value="lifei"/>

    <jsp:param name="age" value="23"/>

    </jsp:forward>

接收

<jsp:useBean id="user" class="com.letben.bean.User"/>

    <jsp:setProperty property="*" name="user"/>

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

    <jsp:getProperty property="age" name="user"/>

 

posted on 2016-02-08 21:18  木鸟飞  阅读(617)  评论(0编辑  收藏  举报

导航