JSP
动作是一组
JSP
内置的标签,只书写少量的标记代码就能够使用
JSP
提供丰富的功能,
JSP
行为动态是对常用的
JSP
功能的抽象和封装。
JSP Actions
是使用
xml
语法写的,是
jsp
规定的一些列标准动作,在容器处理
jsp
时,当容器遇到动作元
素时,就执行相应的操作。
JSP
共有以下
6
种基本动作
- jsp:include:在页面被请求的时候引入一个文件。
- jsp:useBean:寻找或者实例化一个JavaBean。
- jsp:setProperty:设置JavaBean的属性。
- jsp:getProperty:输出某个JavaBean的属性。
- jsp:forward:把请求转到一个新的页面。
- jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
动态包含
动态包含
<jsp:include page="relativeURL|<%=expressicry%>"></jsp:include>
动态引入另一
个文件,其中动态包含会把包含的
jsp
页面单独翻译成
servlet
文件,然后在执行到时候再调用翻译的
servlet
程序。并把计算的结果返回。动态包含是在执行的时候才会加载。所以叫动态包含。
- 静态包含是包含源代码
- 动态包含是包含执行结果
- request.getRequestDispatcher("dd.jsp").include(request,response)
page
参数
- 可以使用变量
- 只能包含当前应用中的资源
<jsp:include page = "err.jsp" ><jsp:param value = "99" name = "id" /></jsp:include>http://localhost:8080/20221122/index.jsp?id=100 &name =zhangsan注意在被包含页面中可以通过 parameter 接收参数
重点:静态包含和动态包含的区别
|
静态包含
|
动态包含
| |
|
是否生成
java
文件
|
不生成
|
生成
|
|
service
方法中的区
别
|
把包含的内容原封拷贝到
service
中
|
JspRuntimeLibrary.include
方法
|
|
是否可以传递参数
|
没有必要,因为就是同一个文件
|
可以
|
|
编译次数
|
1
|
包含的文件
+1
,可以包含需要传递参
数
|
实际工作中几乎都是使用静态包含。因为
jsp
页面虽然可以写
java
代码做其他的功能操作。但是由于
jsp在开发过程中被定位为专门用来展示页面的技术。也就是说
jsp
页面中,基本上只有
html
、
css
、
js
。还
有一些简单
EL
表达式脚本等输出语句。所以都使用静态包含 。
请求转发
请求转发
<jsp:forward>
转发功能相当于
request.getRequestDispatcher("").forward(request,
response);
的功能。
基础语法
<jsp:forward page="
跳转的
jsp
页面
"> [<jsp:param name="" value=""/>] [<jsp:param
name="" value=""/>] </jsp:forward>
重定向 response.sendRedirect是否共享 request是否客户端参与
html
转发
2
秒后刷新页面
:
<meta http-equiv = "Refresh" content = "3" />
3秒之后跳转页面:
<meta http-equiv="Refresh" content="3;url=http://www.baidu.com" />
javaBean的使用
JavaBean
是一个遵循特定写法的
Java
类,它通常具有特点:
- 这个Java类必须具有一个无参的构造函数
- 属性必须私有化
- 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范
public class Student{
public Student(){} 自定义无参构造器和系统默认提供的都可以
private String name;
public String getName(){return this.name;} //名称必须正确,注意大小写
public void setName(String name){this.name=name; }
}
<jsp:useBean>
用于在指定的域范围内查找指定名称的
JavaBean
对象。
- 如果在指定的范围已经存在该 bean 实例,那么将使用这个实例,而不会重新创建。
- 如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。
相关属性
- id命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例
- class指定Bean的完整包名,如果存在则复用,如果不存在则InstantiationException
- scope指定Bean在哪种上下文内可用,可以取下面的四个值之一:page,request,session和 application。默认值是page,表示该Bean只在当前页面内可用(保存在当前页面的PageContext内)。request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。session表示该Bean对当前HttpSession内的所有页面都有效。最后,如果取值application,则表示该Bean对所有具有相同ServletContext的页面都有效
因为 jsp:useBean 只有在不存在具有相同 id 和 scope 的对象时才会实例化新的对象;如果已有id 和 scope 都相同的对象则直接使用已有的对象,此时 jsp:useBean 开始标记和结束标记之间的任何内容都将被忽略
- type 指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的
- beanName指定Bean的名字。如果提供了type属性和beanName属性,允许省略class属性
<jsp:useBean id="dd" class="java.util.Date" scope="request"/>
首先在
request
中查找名称
为
dd
的日期类型变量,就是
request.getAttribute("dd"),
如果获取不到,则新建
Date
变量,并存放在
request
中,名称就是
id
的值
设置bean属性
<jsp:setProperty name="
对象
" property="
属性
" value="
属性值
"/>
给一个
javaBean
实例属性赋
值
典型应用
1
:
<form action="bb.jsp" method="post">
<input name="username"/><input name="password"/><input name="age"/>
<input type="submit" value="提交数据"/>
</form>
定义值
bean
【
DTO
、
DAO
、
BO
、
VO
】
public class Student{
private String usenrame;
private String password;
private Integer age;
//对应的get/set方法,注意命名规则
}
在
bb.jsp
页面中接收数据,注意
*
的用法
<jsp:useBean id="student" class="com.yan.entity.Student" scope="request">
<jsp:setProperty name="student" property="*"/> 可以直接从request的
parameter中接收请求参数,按照名称对应的方法设置到student对象中,如果需要则自动进行数据类型
转换。
</jsp:useBean>
如果名称不一致可以使用
setProperty
进行设置
<!-- student.setUsenrname(request.getParameter("username")) -->
<jsp:setProperty name="student" property="usenrame" param="username"/>
允许给值
bean
属性设置具体的数据
<% int ss=18; %>
<jsp:setProperty name="student" property="age" value="<%=ss%>"/>
获取bean属性值
<jsp:getProperty property="" name=""/>
取得一个
javaBean
实例的成员变量,在当前位置输出
指定对象的某个属性值
使用中的注意事项
<% request.setCharacterEncoding("UTF-8");
Student student=new Student();
session.setAttribute("student",student);
%>
<jsp:useBean id="student" class="com.yan.entity.Student"> 语法报错,因为临时变量
student和useBean的id值相同
<jsp:setProperty name="student" property="*"/>
</jsp:useBean>
使用
useBean
创建的对象可以当作临时变量使用
<jsp:useBean id="student" class="com.yan.entity.Student">
<jsp:setProperty name="student" property="*"/>
</jsp:useBean>
<%=student%>

1257

被折叠的 条评论
为什么被折叠?



