3Sept.2008©NeusoftConfidentialCopyright2008ByNeusoftGroup.AllrightsreservedJAVAWEB编程——Web应用开发东软IT人才实训中心3Sept.2008Confidential第四章:WEB应用开发学时:5学时教学方法:讲授ppt+上机练习+点评+案例分析目标:本章旨在使用案例向学员介绍WEB应用开发的主要技术,包括WEB资源的跳转和包含、基于MVC模式的WEB应用、数据库连接缓冲池、Filter等知识,学员应该掌握如下知识:1)HTTP重定向和请求转发2)WEB应用的MVC模式3)使用请求对象共享数据4)连接缓冲池的配置和编程3Sept.2008Confidential主要内容•Web资源的跳转与包含•基于MVC模式的Web应用•Web层的错误处理•使用数据库•Filter3Sept.2008ConfidentialWeb资源的跳转与包含3Sept.2008ConfidentialWEB资源的跳转和包含ServerWebAWebBBrowserBrowser3Sept.2008ConfidentialWEB资源的跳转和包含(续)ServerWebAWebBBrowserBrowserURL:WebB•HTTP重定向3Sept.2008ConfidentialWEB资源的跳转和包含(续)•HTTP重定向–浏览器向服务器的WebA资源发送请求,服务器返回处理该请求的WebB资源的URL给浏览器,浏览器接收到该响应后,又将请求以Get方式重新发送给WebB资源,WebB处理后,由WebB向浏览器发回响应。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•如何进行HTTP重定向–HttpServletResponse接口•sendRedirect(Stringlocation)–location:表示的是webB资源的URL,由客户端负责解析。URL如以“/”开始,“/”代表的是当前的服务器。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•请求转发(服务器内部的转发,forward)ServerWebAWebBBrowserBrowserbody---3Sept.2008ConfidentialWEB资源的跳转和包含(续)•请求转发–浏览器向服务器的WebA资源发送请求,服务器将请求转发给WebB来处理,最后由WebB向浏览器发回响应。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•如何实现请求转发–使用RequestDispatcher接口的如下方法:•forward(ServletRequestreq,ServletResponseres)–转发请求给相应的Web资源,对客户的响应取决于转发后的Web资源•RequestDispatcher:请求分派对象–主要作用:实现服务器端Web资源的转发和包含3Sept.2008ConfidentialWEB资源的跳转和包含(续)•如何获得RequestDispatcher对象–方式1:使用ServletContext接口如下方法:•getRequestDispatcher(Stringpath)–path:表示的要转发的web资源,必须以“/”开始,“/”表示相对于Web应用的根目录。–方式2:使用ServletRequest接口如下方法:•getRequestDispatcher(Stringpath)–path:表示的要转发的web资源,是一个相对路径,由Web容器解析,“/”表示相对于Web应用的根目录3Sept.2008ConfidentialWEB资源的跳转和包含(续)•重定向和请求转发的练习–使用Servlet处理用户的登录请求,制作单独的欢迎和错误页面。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•重定向与转发请求的总结:–尽管重定向和请求转发都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。具体包括:•1、请求转发只能将请求转发给同一个WEB应用中的资源;而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个应用服务器的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。•2、如果传递给sendRedirect方法的相对URL以“/”开头,它是相对于当前服务器的根目录;而请求转发方法指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。•3、重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•重定向与转发请求的总结:–4、重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。而请求转发是在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•重定向与转发请求的总结:–5、请求转发的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而重定向调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。–6、无论是请求转发还是重定向,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•重定向与转发请求的比较:–方法•重定向:HttpServletResponse.sendRedirect(Stringurl)•转发请求:RequestDispatcher.forward(……)–相同点•接收客户请求的是WebA,生成响应页面的是WebB–区别:•请求与响应的次数,重定向2次请求,2次响应,请求转发1次请求,1次相应。•性能:请求转发快,重定向慢。•地址栏:请求转发不变,重定向变化。•访问内容:请求转发只允许在当前应用内转发,而重定向可以到任何web资源。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•请求包含(服务器端的包含,include)ServerWebAWebBBrowserBrowserbody---在WebA资源的响应信息中包含WebB资源的输出3Sept.2008ConfidentialWEB资源的跳转和包含(续)•如何实现请求包含:–使用RequestDispatcher接口的如下方法:•include(ServletRequestreq,ServletResponseres)3Sept.2008ConfidentialWEB资源的跳转和包含(续)•JSP动作:–JSP指令相对应,不同的是,JSP动作是在请求处理阶段起作用。而JSP指令是在翻译阶段起作用。–Jsp动作是使用xml语法写成的。–Jsp规范定义了一系列的标准动作元素,它用jsp作为前缀。•JSP标准动作的目标:–运行时执行特定的处理,减少Scriptlet的使用。3Sept.2008ConfidentialWEB资源的跳转和包含(续)•JSP动作语法格式:符合XML语法–jsp:actionname[attr=”value”]*……/jsp:action–空元素:jsp:action[attr=”value”]*/•主要的actionname有–include、forward、param–useBean、getProperty、setProperty3Sept.2008ConfidentialWEB资源的跳转和包含(续)•Jsp:forward–使用JSP动作进行转发请求。–语法格式:jsp:forwardpage=“web资源”/–示例:jsp:forwardpage=“navigation.jsp”/•处理–将当前请求转发给指定的Web资源,该资源可以是另一个jsp、servlet或者静态资源文件,与请求转发方法的作用相同。–每当遇到此操作时,就停止执行当前的jsp,转而执行被转发的资源。–如果已经向客户发出了响应数据,此操作将抛出异常•page属性–语法格式:page=“相对URI”,如果以“/”起始,表示相对于contextroot的URL,否则相对于当前JSP页面的URI•注:不建议使用(因为请求转发跳到另一个页面,属于控制逻辑,所以应该写在控制器中。)3Sept.2008ConfidentialWEB资源的跳转和包含(续)•Jsp:include–JSP动态包含,在运行时起作用。–使用JSP动作进行转发包含。–语法格式:jsp:includepage=“web资源”/–示例jsp:includepage=“navigation.jsp”/•处理–将指定Web资源的输出包含在当前的响应输出中,与RequestDispatcher.include方法的作用相同。•属性–与jsp:forward动作相同3Sept.2008ConfidentialWEB资源的跳转和包含(续)•Jsp:param–主要用来传递数据。•示例–jsp:forwardpage=“next”jsp:paramname=“role”value=“admin”//jsp:forward•处理–增加或替换请求中的参数–说明:•通常作为子元素,与include、forward等动作联用•如果替换了请求的参数值,仅在次页面中优先使用•属性–name属性:指定参数名–value属性:指定参数值3Sept.2008Confidentialinclude指令•include指令:在翻译时起作用,是静态包含。•静态的包含就是指这个被包含的文件在翻译时将会被插入到jsp文件中去,被包含的文件可以是jsp文件、html文件、文本文件、inc文件等。•因此可以把一个复杂的jsp页面分成若干简单的部分,可以大大增加jsp页面的管理性。•示例–%@includefile=“navigation.jsp”%•处理–在JSP主文件被翻译前加入file指定的文件内容,然后再进行翻译。•file属性:被包含文件的相对路径。3Sept.2008Confidential基于MVC模式的Web应用实现MVC3Sept.2008Confidential基于MVC模式的Web应用•MVC回顾–M:Model,代表模型。–V:View,代表视图。–C:Controller,代表控制器。•使用MVC好处–MVC的思想:实现了功能分离。–提高程序的可扩展性、可重用性、为了变化而设计的思想。–并且有利于分工合作。3Sept.2008Confidential基于MVC模式的Web应用(续)进入添加管理员界面录入信息,提交表单接收服务器响应,显示响应页面接收请求读取用户输入数据通过用户名查询用户在响应中设置错误信息将用户信息插入数据库在响应中设置成功信息向客户端作出响应[用户名已存在][用户名不