JSP 7大标准动作:
jsp:forward: 请求转发,将请求的处理转发到下一个页面。
jsp:include: 用于动态引入一个 JSP 页面。
jsp:plugin: 用于下载 JavaBean 或 Applet 到客户端作为插件使用。
jsp:useBean: 使用 JavaBean。
jsp:setProperty: 修改、设置 JavaBean 实例的属性值。
jsp:getProperty: 获取 JavaBean 实例的属性值。
jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。
forward和include一样,都要在page指定一个jsp
<jsp:include page="a.jsp"></jsp:include>
<jsp:forward page="b.jsp"> </jsp:forward>
如果在内部使用jsp:param
<jsp:include page="c.jsp">
<jsp:param value="include" name="name2" />
</jsp:include>
等于执行了request.setParamter("name","my name is xxx");
在b.jsp可以通过request.getParamter("name");获取。如EL表达式的${param.name}
jsp:plugin 这个暂时没有想详细的去了解他,跳过,接下来重点了解jsp:useBean的使用。
<jsp:useBean id="user" class="com.hxl.model.User" type="com.hxl.model.User" scope="page"></jsp:useBean>
这行代码会转换成
com.hxl.model.User user=pageContext.getAttribute("user");
if(user==null){
user=new com.hxl.model.User();
pageContext.getAttribute("user",user);
}
id就是attribute的key值,scope取值一共有四个:page、request、session、application,默认为page。
type是引用类型,
class是对象类型,如果没有使用import导包的话,需要指定包名。例如People user=new User();那么type=People,class=User。
所以,使用jsp:userBean无论如何都会创建一个Bean对象,如果我们需要设置该对象的值,有两种方式。
<jsp:useBean id="user" class="com.hxl.model.User" scope="page">
<!-- 在jsp:useBean体里面使用jsp:setProperty,则假如user为新创建的bean
则在创建bean后对其赋值,如果不是,则不会执行jsp:useBean体-->
<jsp:setProperty name="user" property="age" value="20"></jsp:setProperty>
</jsp:useBean>
<!-- 在jsp:useBean体外面使用jsp:setProperty,无论是新建的还是原有的,都将对其赋值-->
<jsp:setProperty name="user" property="age" value="20"></jsp:setProperty>
以上是对bean单个属性设置值,那么,假如是一个Form表单,包含bean的很多个属性,是不是也要一个个设值呢?其实,这个没必要,是有更好的方法的
例如:
a.jsp:
<html>
<body>
<form action="b.jsp">
姓名:<input type="text" name="stuName"/>
年龄:<input type="text" name="stuAge"/>
......
</form>
</body>
</html>
b.jsp
<html>
<body>
<jsp:useBean id="student" class="com.hxl.Student" scope="request">
<jsp:setProperty name="student" property="*"/>
</jsp:useBean>
</body>
</html>
这样就能得到Student对象,并包含stuName和stuAge的值,不过这种写法有限制,就是Student对象中必须有stuName和stuAge属性,如果你的Student对象是name和age属性,那就不可用这么写了,要将<jsp:setProperty name="student" property="*"/>改为<jsp:setProperty name="student" property="name" param="stuName"/><jsp:setProperty name="student" property="age" param="stuAge"/>。param对应form表单中input的name属性。
拿到bean对象之后,我们就可以通过<jsp:getProperty property="name" name="student"/>获取到相应的值了。只是这里有个缺陷,如果property对应的属性不是基本数据类型或者String类型变量,而是一个Object,那么,如果想继续得到Obiect里的属性,用jsp:getProperty就没办法了,这时候我们需要用EL表达式......