Presentation is loading. Please wait.

Presentation is loading. Please wait.

Review JSP 隐式对象 9种内置对象 作用域通信对象 Servlet 对象 错误对象 输入/输出对象 request session

Similar presentations


Presentation on theme: "Review JSP 隐式对象 9种内置对象 作用域通信对象 Servlet 对象 错误对象 输入/输出对象 request session"— Presentation transcript:

1 Review JSP 隐式对象 9种内置对象 作用域通信对象 Servlet 对象 错误对象 输入/输出对象 request session
page exception response application config out pageContext JSP 2017/3/4

2 review 四种属性范围 在JSP中提供了四种属性保存范围: 在一个页面范围内:page 在一次服务器请求范围内:request
在一次会话范围内:session 在一个应用服务器范围内:application JSP 2017/3/4

3 JSP Bean JSP Bean 共享Bean 2017/3/4

4 Agenda 安全的目录:WEB-INF JSP bean jsp:useBean jsp:getProperty
jsp:setProperty jsp Bean与参数关联 共享bean 根据条件创建bean 例子:页面累积的访问计数 JSP 2017/3/4

5 Objective 掌握重要文件放WEB-INF下的重要性 掌握JSP Bean JSP 2017/3/4

6 安全的目录:WEB-INF WEB-INF 是安全的目录:在客户端直接输入其下的文件,是无法访问的;只能在服务器端直接访问。 web.jsp
<h1>WEB-INF安全的目录:web.jsp</h1> <jsp:forward page="WEB-INF/1.jsp"></jsp:forward> WEB-INF/1.jsp <body> <h1>WEB-INF安全的目录:1.jsp</h1> </body> Eg:web.jsp,WEB-INF/1.jsp JSP 2017/3/4

7 bean JavaBean规范: JavaBean 类必须是一个公共类,并将其访问属性设置为 public
一个javaBean类不应有公共实例变量,类变量都为private 持有值应该通过一组存取方法(getXxx 和 setXxx)来访问:对于每个特性,应该有一个带匹配公用 getter 和 setter 方法的专用实例变量。 bean不过是遵循某些简单约定的常规Java类,这些约定由JavaBean规范所定义,bean并没有扩展特殊的类,也不在特殊的包中,同时,也没有使用特殊的接口。 JSP 2017/3/4

8 bean的优点 在JSP中,相对于scriptlet和引用常规Java类的JSP表达式,JavaBean组件的应用提供3项优点:
使用bean,页面的创作者可以只使用XML兼容的语法操作Java对象,不需用到圆括号,分号和花括号,从而促进内容与表达之间的强分离,这对于拥有独立Web和Java开发人员的大型开发团队尤其有用。 JSP 2017/3/4

9 bean的优点 对象的共享更为简单 相比与使用等同功能的显示Java代码,使用JSP bean构造时,对象在多个页面或请求间的共享容易得多。
请求参数与对象属性之间可以方便地对应起来 JSP bean极大地简化了读取请求参数,对字符串进行适当的转换,并将结果放入到对象中的过程。 JSP 2017/3/4

10 bean的应用 JSP页面中,可以使用3种主要的构造来构建和操作JavaBean组件。 jsp:useBean
可用来构建一个新的bean,也可以访问现存的bean。它的常规使用方式如下: <jsp:useBean id=“beanName” class=“package.Class”/> jsp:getProperty 读取或输出bean属性的值。用该元素读取属性是getXxx调用的简单记法,这个元素的使用如下: <jsp:getProperty name=“beanName” property=“propertyName”/> JSP 2017/3/4

11 bean的应用 jsp:setProperty 修改bean的属性(即调用形如setXxx的方法)。它的常规使用方式如下:
<jsp:setProperty name=“beanName” property=“propertyName” value=“propertyValue”/> JSP 2017/3/4

12 jsp:useBean <jsp:useBean id=“name” class=“package.class”/> import...%>导入包,都要满足这个要求。 如: <jsp:useBean id=“book1” class=“test.Book”/> 它等价于: <%test.Book book1=new test.Book();%> JSP 2017/3/4

13 jsp:getProperty 获得bean之后,就可以使用jsp:getProperty输出它的属性,jsp:getProperty的name属性应该与jsp:useBean给定的id匹配,它的property属性指定需要的属性。 除可以使用jsp:getProperty以外,还可以使用JSP表达式显式地调用对象的方法,变量的名称由id属性指定。 <jsp:getProperty name=“book1” property=“title”/> <%=book1.getTitle()%> 在使用循环、条件语句和没有表达成属性的方法时,就需要用到变量的直接访问。 JSP 2017/3/4

14 jsp:setProperty 修改bean的属性一般使用jsp:setProperty。name与之前定义的id匹配。 <jsp:setProperty name=“book1” property=“title” value=“JAVA”/> 等价于 <%book1.setTitle(“JAVA”);%> Eg: beaneg1.jsp JSP 2017/3/4

15 与参数关联 将单个属性与输入参数关联 <jsp:useBean id="entry" class=“etp.bean.SaleEntity"/> <jsp:setProperty name="entry" property="itemID" value='<%=request.getParameter("itemID") %>'/> <% int numItemsOrdered=1; JSP 2017/3/4

16 与参数关联 try{ numItemsOrdered=Integer.parseInt(request.getParameter("numItems")); }catch(NumberFormatException e){ System.out.println("格式转换异常");} %> <jsp:setProperty name="entry" property="numItems" value="<%=numItemsOrdered %>"/> Eg: bean2.jsp&form.jsp JSP 2017/3/4

17 与参数关联 Eg: form.jsp&beaneg3.jsp
JSP有一个不错的解决方案:它允许将属性与请求参数关联,自动执行从字符串到数字、字符和布尔值的类型转换。可以不使用value属性,而是使用param指定指定一个输入参数,被指定的请求参数的值自动用作bean属性的值,由String到基本类型(byte,int,double等)和包装类(Byte,Integer,Double等)的类型转换都是自动执行。如果请求中没有指定的参数,则不采取任何动作(系统并不传递null到相关联的属性)。 <jsp:useBean id="entry" class=“etp.bean.SaleEntity"/> <jsp:setProperty name="entry" property="itemID" param="itemID"/> Eg: form.jsp&beaneg3.jsp JSP 2017/3/4

18 与参数关联 将所有的属性与请求参数关联 将属性与请求参数关联可以省略许多简单内建类型的转换工作。
JSP允许我们将这个过程更进一步:将所有的属性与同名的请求参数关联起来。 我们所要做的只是以”*”作为property参数的值。 <jsp:useBean id="entry" class=“etp.bean.SaleEntity"/> <jsp:setProperty name="entry" property="*"/> Eg: form.jsp&beaneg4.jsp JSP 2017/3/4

19 与参数关联 尽管这种方式比较简单,但要注意三点:
输入参数缺失时不采取任何动作。特别地,系统不会提供null作为属性的值,因此,在设计bean时,一般要为其设置可以识别的默认值,以便可以确定某个属性是否修改过。 自动类型转换并不能像手动类型转换那样能够防止不合法的值。至少,在使用自动类型转换时,应该考虑使用错误处理页面。 bean属性的名称和请求参数大小写敏感,精确匹配。 JSP 2017/3/4

20 共享bean 到此为止,对于jsp:useBean创建的对象,我们都将它们看作是_jspService方法中的局部变量来处理。
虽然bean的确绑定到局部变量,但这并非唯一的行为,它们还存储在4个不同的位置——依jsp:useBean的可选属性scope的值而定。 JSP 2017/3/4

21 共享bean 使用scope时,系统首先检查指定的位置是否存在指定名称的bean。仅当系统找不到现有的bean时,才会创建新的bean。这种行为使得servlet可以用下面的方式处理复杂的用户请求:建立bean,将它们存储在3个标准共享位置中的某个位置(请求、会话或servlet的上下文),然后将请求转发到几个适当JSP页面中的某个页面,提供适合于请求数据的结果。 Scope属性有4个可选值: page(默认),request,session和application。 JSP 2017/3/4

22 根据条件创建bean 为了使bean的共享更为便利,两种情形下,我们可以有条件地对与bean相关的元素进行求值。
使用第二种形式的意义在于jsp:useBean的起始标签和结束标签之间的语句只在创建新的bean时执行,如果使用已有的bean,则不执行。 由于jsp:useBean调用默认的无参构造函数,因此,我们经常需要在bean创建之后修改它的属性。为了模拟构造函数,应该只在bean首次创建时执行这些修改,而不应该在访问现存(或更新后)的bean时执行。做到这一点并不困难:多个页面都可以在jsp:useBean的起始标签和结束标签之间包含jsp:setProperty语句(只有被第一个访问的页面才会执行这些语句) 为了使bean的共享更为便利,两种情形下,我们可以有条件地对与bean相关的元素进行求值。 首先,仅当找不到相同id和scope的bean时,jsp:useBean元素才会实例化新的bean。如果存在相同id和scope的bean,则只是将已有的bean绑定到相关的变量(由id指定)。 其次,我们也可以不使用<jsp:useBean …/> 转而使用 <jsp:useBean …>statements</jsp:useBean> JSP 2017/3/4

23 例子 AccessCountBean定义了两个属性:accessCount和firstPage。accessCount属性记录对一系列相关页面累积的访问计数,因此,针对所有的请求都要执行。 firstPage属性存储被访问的第一个页面的名称,因此应该在页面被首次访问时执行。为了区分,我们将更新accessCount属性的jsp:setProperty语句放在非条件性代码中,将设置firstPage的jsp:setProperty语句放在jsp:useBean的起始标签和结束标签之间。 Eg: sharecount1.jsp-sharecount3.jsp JSP 2017/3/4

24 练习 在JSP运行环境中,负责把JSP转化为Servlet程序的软件是_______。 JavaBean的规范? 容器
JavaBean 类必须是一个公共类,并将其访问属性设置为 public JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值。 一个javaBean类不应有公共实例变量,类变量都为private 持有值应该通过一组存取方法(getXxx 和 setXxx)来访问:对于每个特性,应该有一个带匹配公用 getter 和 setter 方法的专用实例变量。 JSP 2017/3/4

25 使用JDBC访问数据库的顺序是_________________. 创建语句对象 打开数据库连接 装载驱动程序 执行SQL语句 关闭连接
使用JDBC访问数据库的顺序是_________________. 创建语句对象 打开数据库连接 装载驱动程序 执行SQL语句 关闭连接 关闭结果集 关闭语句对象 处理结果集 JSP 2017/3/4

26 创建JSP应用程序时,配置文件web.xml应该在程序下的___________目录中。 A. admin B. servlet
  C. WEB-INF        D. WebRoot C JSP 2017/3/4

27 判断题 JSP在第一次访问的时候稍微慢点,但是以后访问却变快了。 JSP的application对象生命周期是用户的一次连接。
用于http中的Servlet程序一般都要从javax.servlet.GenericServlet中继承。 T F F JSP 2017/3/4

28 改错题 <% page import java.sql.*;%>
<%Request.getParameter();%> page import=“java.sql.*”%> <%request.getParameter();%> JSP 2017/3/4

29 使用JSP进行表单验证与使用JavaScript进行表单验证的区别
简答题 使用JSP进行表单验证与使用JavaScript进行表单验证的区别 JSP 2017/3/4

30 Q & A JSP 2017/3/4

31 Task 认真体会例子 练习JSP Bean 大作业(在页面使用JS对密码进行MD5加密,可以查看资料中的MD5进行参考和学习)
继续留言管理系统:JSP+Servlet+POJO+DAO+DB (可选)预习任务: EL(Expression Language) JSP 2017/3/4

32 谢谢!! JSP 2017/3/4


Download ppt "Review JSP 隐式对象 9种内置对象 作用域通信对象 Servlet 对象 错误对象 输入/输出对象 request session"

Similar presentations


Ads by Google