Presentation is loading. Please wait.

Presentation is loading. Please wait.

第九章 开发视图.

Similar presentations


Presentation on theme: "第九章 开发视图."— Presentation transcript:

1 第九章 开发视图

2 开发视图介绍 概述 JSTL EL表达式 异常处理 自定义Jsp标签 核心业务开发

3 概述 视图(View)是用于解释模型中的数据并将数据展示给用户。视图是MVC模式中的一部份。MVC将用户接口问题分割为三个不同的部分:模型、视图和控制器。模型存储应用的状态;视图解释模型中的数据并将它展示给用户;控制器处理用户的输入。如下图: 视图实现为JSP页面和静态HTML。视图是没有状态的,每次它被调用的时候,视图必须能够从模型中读取出它的数据,它必须读取模型数据并把它转换为HTML页面格式。

4 技术 在开发视图中,我们需要掌握技术:JSP、使用JSTL、内置对象、EL表达式应用、Web应用中的异常处理、自定义JSP标签、Html、JavaScript、CSS。

5 技术-JSP JSP概述 JSP全名为java server page,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。

6 技术-JSP JSP组成 一个JSP文件包含指令、脚本、注释等元素。 1:指令元素:page、incude、taglib 1)page
page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" autoFlush="true" buffer="8kb" errorPage="" extends="" info="" isELIgnored="false" isErrorPage="false" isThreadSafe="true"

7 技术-JSP pageEncoding="gbk" session="true
import="com.ttpip.model.*,com.ttpip.util.*,java.util.*"%> <html> <body> <div span class="title"><strong>科技成果转化</strong></div> </body> </html>

8 技术-JSP 2)include include指令是“静态包含”,所谓静态包含是指将被包含文件的源代码嵌入到主文件和主文件一块编译,最终编译后只会生成主文件的源文件和对应的字节码文件,被包含文件不会单独生成源文件和字节码文件。

9 技术-JSP 3)taglib taglib指令用于引入可用标签(对应一段Java程序,类似调用一段代码而已),而标签是事先写好的一段代码,只是我们需要遵循一定的原则才能调用之。比如我们想用JSTL标签,那么首先要导入JSTL才行,一旦导入JSTL的包后,我们就可以使用相关的标签了。

10 技术-JSP 2:脚本元素 包含在<% %>中的合法的java片断称为脚本。

11 技术-JSP 3:注释元素 脚本元素注释:既然脚本是合法的java代码,那么注释就可分为单行注释“//注释内容”和多行注释“/* 注释内容*/”这两种。 <% //这是注释,不参与编译 /* *这是注释,不参与编译 */ for(int i=0;i<10;i++) { out.println("大家好!"); } %>

12 常见配置 <!—session过期时间,单位是分钟--> <session-config>
<session-timeout>30</session-timeout> </session-config> <!--错误代码为404的错误导向到NotFound.jsp--> <error-page> <error-code>404</error-code> <location>/notfound.jsp</location> </error-page>

13 常见配置 <!--当系统发生500错误即服务器内部错误时,跳转到错误处理页面error.jsp-->
<error-code>500</error-code> <location>/error.jsp</location> </error-page> <!--当系统发生java.lang.NullException-> <error-page> <exception-type>java.lang.NullException</exception-type>

14 jstl概述 JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上。 如果使用JSTL,则必须将jstl.jar和standard.jar文件放到classpath中,如果你还需要使用Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件可以 standard-1.0.zip下载,JSTL中常用的标签库、URL及前缀如下图:

15 jstl核心标签 1、常用的标签:<c:out>、<c:set>、<c:remove>、<c:catch> 2、条件标签: <c:if>、<c:choose>、<c:when>、<c:otherwise> 3、迭代标签: <c:forEach>、<c:forTokens> 4、URL操作标签:<c:import>、<c:url>、<c:redirect>

16 c:if、c:forEach、c:when
<table width="100%" cellpadding="2" cellspacing="0" class="dataTable"> <tr class="dataTableHead"> <td width="30%" align="center"><strong>项目名称</strong></td> <td width="20%" align="center"><strong>科技成果转化类型</strong></td> </tr> <c:forEach items="${results}" var="declStatInfo" varStatus="s"> <c:choose> <c:when test="${(s.index % 2) == 0}"> <tr class="odd"> <td align="center"> <input type="radio" name="radio1" id="radio1" /> </td> <td align="center" bordercolor="1"> <c:when test="${declStatInfo.techTranProjects.tranName)}"> ${declStatInfo.techTranProjects.tranName} </c:when>

17 c:if、c:forEach、c:when
<c:otherwise> ${declStatInfo.techTranProjects.tranName} </c:otherwise> </c:choose> </td> <td align="center"> <c:if test="${declStatInfo.techTranProjects.tranType eq '1'}">技术成果合作</c:if> <c:if test="${declStatInfo.techTranProjects.tranType eq '2'}">技术成果转让</c:if> <c:if test="${declStatInfo.techTranProjects.tranType eq '3'}">专利技术合作</c:if> <c:if test="${declStatInfo.techTranProjects.tranType eq '4'}">项目共同开发</c:if> </tr> </table>

18 效果:

19 EL概述 E L(Expression Language) 目的:为了使JSP写起来更加简单。它提供了在 JSP 中简化表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。

20 EL语法结构 ${expression} 示例程序
< %=request. getParameter(“username”)% > 等价于 ${ param. username } <% =request.getAttribute(“userlist”) %> $ { requestScope.userlist } <%=user.getAddr( ) %> ${user.addr}

21 EL运算符 EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如: ${ user. My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如: ${sessionScope.user[data]}中data 是一个变量

22 EL变量 EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。 假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。 属性范围在EL中的名称 Page PageScope Request RequestScope Session SessionScope Application ApplicationScope

23 EL操作符 JSP 表达式语言提供操作符,其中大部分是 Java 中常用的操作符。

24 EL隐式对象 EL表达式语言定义了一组隐式对象,如下: 1、pageContext 2、param 3、paramValues
4、header 5、headerValues 6、cookie 7、initParam 8、pageScope 9、requestScope 10、sessionScope 11、applicationScope

25 EL表达示在功能“科技成果转化管理”中应用
<table width="100%" cellpadding="2" cellspacing="0"> <tr> <td width="30%" align="center">项目名称</td> <td width="20%" align="center">科技成果转化类型</td> </tr> <c:forEach items="${results}" var="declStatInfo" varStatus="s"> <c:choose> <c:when test="${(s.index % 2) == 0}"> <td>${declStatInfo.declSubmStatus} /></td> <td align="center"> <c:if test="${declStatInfo.techTranProjects.tranType eq '1'}">成果合作</c:if> <c:if test="${declStatInfo.techTranProjects.tranType eq '2'}">成果转让</c:if> <c:if test="${declStatInfo.techTranProjects.tranType eq '3'}">技术合作</c:if> <c:if test="${declStatInfo.techTranProjects.tranType eq '4'}">项目共同开发</c:if> </td> </c:when> </c:choose> </c:forEach> </table>

26 概述 在实际的JavaEE项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印到浏览器可能会让用户感觉莫名其妙,也有可能让某些用户找到破解系统的方法。 针对spring+struts2+hibernate项目说明:通常一个页面请求到后台以后,首先是到action(也就是所谓mvc的controller),在action层会调用业务逻辑service,service层会调用持久层dao获取数据。最后执行结果会汇总到action,然后通过action控制转发到指定页面,执行流程如下:

27 技术 而这三层其实都有可能发生异常,比如dao层可能会有SQLException,service可能会有NullPointException,action可能会有IOException,一但发生异常并且程序员未做处理,那么该层不会再往下执行,而是向调用自己的方法抛出异常,如果dao、service、action层都未处理异常的话,异常信息会抛到服务器,然后服务器会把异常直接打印到页面,结果就会如下图: 所以异常应该在action控制转发之前尽量处理,同时记录log日志,然后在页面以友好的错误提示告诉用户出错了。

28 异常类型 1、IO异常。 2、指定的类不存在。 3、数学运算异常。 4、数组下标越界。 5、方法的参数错误。 6、类型强制转换错误。
7、违背安全原则异常。 8、操作数据库异常。 9、方法末找到异常。 10、Java虚拟机发生了内部错误。 11、程序内部错误,操作失败。

29 示例 在struts2+hibernate3+spring3框架下的异常处理方式,需要的类有:Action类、service类、异常拦截器ExceptionFilter、自定义异常类MyException、错误跳转页面error.jsp。

30 概念 JSP中有一块重要的技术:自定义标签(Custom Tag),Struts中使用了很多自定义标签,如html、bean等。取代了JSP中的Java程序,并且可以重复使用,方便网页设计人员。 1、标签(Tag): 标签是一种XML元素,通过标签可以使JSP网页变得简洁且易于维护,还可方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的。 2、标签库(Tag library): 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库。 3、标签库描述文件(Tag Library Descriptor): 标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的。 4、标签处理类(Tag Handle Class): 标签处理类是一个Java类,这个类继承了TagSupport或者扩展了SimpleTag接口,通过这个类可以实现自定义JSP标签的具体功能。

31 自定义标签的格式 为了使到JSP容器能够使用标签库中的自定义行为,必须满足以下两个条件:
1、从一个指定的标签库中识别出代表这种自定义行为的标签。 2、找到实现这些自定义行为的具体类。

32 基本步骤 1、创建标签的处理类(Tag Handler Class)
2、创建标签库描述文件(Tag Library Descrptor File) 3、在web.xml文件中配置元素 4、在JSP文件中引人标签库

33 处理标签的方法 TagSupport类提供了两个处理标签的方法
1、public int doStartTag() throws JspException 2、public int doEndTag() throws JspException doStartTag:JSP容器遇到自定义标签的起始标志,就会调用doStartTag()方法 doStartTag()方法返回一个整数值,用来决定程序的后续流程 A.Tag.SKIP_BODY:表示?>之间的内容被忽略 B.Tag.EVAL_BODY_INCLUDE:表示标签之间的内容被正常执行

34 处理标签的方法 doEndTag:JSP容器遇到自定义标签的结束标志,就会调用doEndTag()方法
A.Tag.SKIP_PAGE:表示立刻停止执行网页,网页上未处理的静态内容和JSP程序均被忽略任何已有的输出内容立刻返回到客户的浏览器上。 B.Tag_EVAL_PAGE:表示按照正常的流程继续执行JSP网页

35 创建标签处理类 1、引入必需的资源: import javax.servlet.jsp.*;
import javax.servlet.http.*; import java.util.*; import java.io.*; 2、继承TagSupport类并覆盖doStartTag()/doEndTag()方法 3、从ServletContext对象中获取java.util.Properties对象 4、从Properties对象中获取key对应的属性值 5、对获取的属性进行相应的处理并输出结果

36 自定义下拉列表 在自定义下拉列表案例中,我们主要继承TagSupport类、用到了自定义标签的开始标志doStartTag、结束标志doEndTag()方法。最终效果如下图:

37 核心业务视图开发 使用的技术 Html、Css、JavaScript、EL、JSTL、JSP等技术。 完成科技成果转换管理(添加、查询、修改、查看、审核)。

38 Question? 谢谢!!


Download ppt "第九章 开发视图."

Similar presentations


Ads by Google