jsp动作元素
复习:
1、jsp的指令
1)page 指定当前页面能做什么,必须出现在页面的第一行
2)Include 包含,这主要指的是静态包含,为了实现页面重用(或者代码重用):针对页面:让一个页面成为很多页面公用的一个banner。针对代码部分 jsp使用的javabean导入包 的类。
3)taglib 回头再说吧,现在一时半会儿找不到
2、jsp内置对象
1)什么是内置对象?
服务器加载的一堆类的对象,是service方法中得参数或者变量
2)内置对象:输入输出,作用域对象 servlet对象 异常
3)四个作用域:page request session application
3、model 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,可选项有:request,session,application
并且要求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里面之所以把jsp和javabean放在一起,是因为,jsp动作元素中的<jsp:useBean id="id名称" class="com.letben.bean.User"/>这个标签要调用javabean中的方法,并且get和set也要一致,并且通过反射访问对应元素。所以在ppt里面这样安排也是合理的,当然我更喜欢老师组合讲例子的方式。
1、具体要求:jsp中可以使用jsp标准动作调用javabean组件并访问属性
2、在jsp中调用的javabean必须是公共类(public)
3、javaBean中必须提供一个无参构造方法
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在及商品页面中的可用性。各种范围选项如下:
范围
page:bean只能在使用页面时使用,当家在新页面是,就会将其销毁
request:bean在用户对服务器发出请求时 存在
session:bean一直存在于绘画中,直至其终止或者被删除为止。
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"/>