Java Web应用设计及实战-全套课件_第1页
Java Web应用设计及实战-全套课件_第2页
Java Web应用设计及实战-全套课件_第3页
Java Web应用设计及实战-全套课件_第4页
Java Web应用设计及实战-全套课件_第5页
已阅读5页,还剩415页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

搭建Web环境、初识JSP

1.搭建Web环境初识JSP.pptx2.JSP实现数据传递和保存.pptx3.使用JDBC操作数据库.pptx4.DAO模式及单例模式.pptx5.数据源及分层开发.pptx6.第三方控件.pptx7.分页查询.pptx8.EL与JSTL.pptx9.Servlet与过滤器.pptx10.监听器与MVC.pptx11.Ajax与jQuery.pptx12.jQuery的Ajax交互扩展.pptx13.项目实战——使用Ajax技术改进新闻发布系统.pptx14.使用Linux操作系统.pptx15.Linux系统软件安装及项目发布.pptx线上线下平台预习2/33本门课程目标学完本门课程后,你能够:掌握Web技术的基础知识掌握JSP/Servlet技术基础及应用使用JavaEE组件开发动态网站使用Ajax技术提升用户体验掌握Linux系统下的JavaWeb应用开发3/33本课任务任务1:使用Tomcat部署Web项目任务2:使用JSP实现输出4/33本课目标学完本次课程后,你能够:理解C/S和B/S架构的概念使用Tomcat部署静态网站使用MyEclipse创建Web项目使用page指令设置页面属性掌握JSP声明和使用变量使用JSP表达式和out实现页面输出理解JSP执行原理5/33程序架构B/S架构程序通过浏览器访问应用程序QQ用户通过客户端程序访问服务器QQ服务器淘宝服务器C/S架构程序淘宝用户请根据你的理解描述在使用QQ软件与使用淘宝进行购物时有哪些区别?问题6/33B/S架构工作原理应用服务器数据库服务器IE返回发送访问返回1234用户输入客户端的请求信息从服务器端检索到的信息运行服务器端程序解释执行HTML文件B/S架构采用请求/响应模式进行交互7/33URL计算机通过统一资源定位符实现资源访问URL:UniformResourceLocator的缩写唯一能识别Internet上具体的计算机、目录或文件夹位置的命名约定http:///news/201409/newslist.jsp?page=6协议主机地址目标资源地址传递的参数输入网址(URL)在互联网上如何实现资源访问?问题1、92、3、http://www.F问题8/33Web服务器Web服务器是可以向发出请求的浏览器提供文档的程序提供网上的信息浏览服务常用的Web服务器Microsoft:IISApache:TomcatOracle:WebLogicIBM:WebSphereNginx…9/33Tomcat服务器Tomcat服务器ApacheJakarta的开源项目轻量级应用服务器开源、稳定、资源占用小演示:Tomcat基本用法10/33Tomcat使用小结-1Tomcat下载/download-70.cgiTomcat解压或安装Tomcat目录结构11/33Tomcat使用小结-1目录说明/bin存放各种平台下用于启动和停止Tomcat的脚本文件/conf存放Tomcat服务器的各种配置文件/lib存放Tomcat服务器所需的各种JAR文件/logs存放Tomcat的日志文件/tempTomcat运行时用于存放临时文件/webapps当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中/workTomcat把由JSP生成的Servlet放于此目录下12/33Tomcat使用小结-2配置Tomcat默认端口号:8080通过配置文件server.xml修改Tomcat端口号<Connectorport="8090" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"

/><Connectorport="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"

/>http://localhost:8080/...http://localhost:8090/...13/33Tomcat使用小结-3启动Tomcatbin\startup.bat访问Tomcat主页:http://localhost:端口号停止Tomcatbin\shutdown.bat部署静态网站14/33演示示例1:部署web项目课堂练习需求说明使用压缩版Tomcat,配置环境变量启动、停止Tomcat,并访问Tomcat主页面进行测试上一步测试成功之后,再修改端口号并访问Tomcat主页进行测试根据提供的素材,部署静态网站-news,并运行测试共性问题集中讲解完成时间:10分钟15/33创建第一个Web项目在MyEclipse里配置Tomcat创建并运行Web项目演示示例2:创建第一个Web项目16/33部署Web应用程序部署应用程序到Tomcat的webapps目录生成War包直接拷贝Web根目录下所有文件演示:部署Web项目17/33小结-1C/S和B/S硬件环境软件安装和升级维护安全性使用Tomcat部署静态网站18/33小结-2使用MyEclipse创建并运行Web项目在MyEclipse中配置Tomcat创建Web项目移植静态网站至Web项目配置欢迎页部署Web应用查看运行结果19/33JSP概述JSP(JavaServerPages)运行在服务器端的Java页面使用HTML嵌套Java代码实现工作原理1243嵌入编译、执行数据交互返回页面信息Java代码JSP页面客户端服务器端20/33使用JSP实现输出需求说明创建新闻显示页面(newsDetail.jsp),正确显示新闻标题“谈北京精神”分析pageout演示示例3:使用JSP实现新闻页面输出21/33小结<%@page%>用来设置一个JSP页面的属性<%out.print();%>或<%out.println();%>实现页面输出JSP可以添加的注释HTML注释:<!--HTML注释-->JSP注释:<%--JSP注释--%>JSP脚本中注释:<%//单行注释%><%/*多行注释*/%>22/33课堂练习:使用JSP实现输出需求说明使用<%out.print();%>或<%out.println();%>实现新闻显示页面全部内容页面输出分析使用<%out.print();%>或<%out.println();%>实现输出共性问题集中讲解完成时间:10分钟23/33使用JSP实现输出使用<%out.print();%>或<%out.println();%>实现新闻显示页面全部内容。这样的做法有什么弊端?Java代码与HTML标签混在一起,可读性不好,不利于修改显示数据来自于数据库共性问题集中讲解演示示例4:在JSP中使用变量完成时间:10分钟问题24/33小结JSP中声明和使用变量。如:<%Stringtitle="谈北京精神";%><%=%>实现页面输出。如:<%=title%>常见错误:<%=title;%>使用<%@page%>导包。如: <%@pageimport="java.util.Date"%>输出转义字符。如:<%="谈\"北京精神\""%>25/33JSP执行过程翻译**_jsp.java客户端应用服务器newDetail.jspnewDetail_jsp.javanewDetail_jsp.class调用调用newDetail.jsp返回页面执行生成编译编译**_jsp.class执行26/33使用JSP实现输出需求说明编写JSP页面,分别声明整型的全局变量和局部变量,观察两者自加后的输出结果,结合JSP执行原理思考出现输出结果的原因分析使用<%%>声明局部变量、使用<%!%>声明全局变量共性问题集中讲解演示示例5:JSP中声明全局变量及方法完成时间:10分钟27/33Web程序调试和排错Web程序常见错误:404错误找不到访问的页面或资源运行时,URL输入错误将页面放在WEB-INF下外部启动Tomcat,未部署项目500错误JSP页面代码有误JSP页面代码有错误页面无法显示未启动Tomcat演示:Web程序常见错误及排查28/33小结page指令通过属性定义了JSP的特性,实现与JSP容器的通信属性说明language指定JSP页面使用的脚本语言import通过该属性来引用脚本语言中使用到的类文件contentType用来指定页面的MIME类型,以及字符编码方式<%@page

language="属性值"import="属性值"contentType="属性值"%>语法29/33小结-out对象out对象out对象是JSP的内置对象无需实例化即可使用实现数据的输出显示out对象的方法属性说明print向页面输出显示println向页面输出显示,在结尾处添加换行30/33总结C/S和B/S架构使用Tomcat服务器部署Web应用部署Web应用JSP变量以及方法的声明JSP输出关于错误目的并不是规避,而是提供解决的思路遇到错误是宝贵的经验31/33问题及作业集中问题&课后作业32/33扫我有更多精彩课程呦

JSP实现数据传递和保存

线上线下平台预习35/41本课目标学完本次课程后,你能够:掌握request和response的使用解决页面中出现的中文乱码掌握转发和重定向的区别掌握session存取数据理解cookie理解application36/41概述任务实现新闻系统的用户注册内容requestresponse37/41获取表单提交的数据-1我们在网页的表单中填入数据,提交表单后,数据被提交到哪里去了?JSP问题38/41获取表单提交的数据-2请求对象:requestpublicStringgetParameter(Stringname)示例HTML代码:<inputtype="text"name="userName"/>JSP代码:StringuserName =request.getParameter("userName");演示示例1:获取表单提交的数据39/41get与post区别比较项Getpost参数出现在URL中是否长度限制有无安全性低高URL可传播是否40/41获取同名的多个参数<inputtype="checkbox"name="mailId"value="10001"/><inputtype="checkbox"name="mailId"value="10002"/><inputtype="checkbox"name="mailId"value="10003"/><inputtype="checkbox"name="mailId"value="10004"/><inputtype="checkbox"name="mailId"value="10005"/>String[]mailIds=request.getParameterValues("mailId");if(mailIds!=null&&mailIds.length!=0){ //循环mailIds访问提交的数据}else{ //未提交与参数mailId相关的数据}41/41request对象常用方法方法名称说明StringgetParameter(Stringname)根据表单组件名称获取提交数据String[]getParameterValues(Stringname)获取表单组件对应多个值时的请求数据voidsetCharacterEncoding(Stringcharset)指定每个请求的编码RequestDispatchergetRequestDispatcher(Stringpath)返回一个RequestDispatcher对象,该对象的forward()方法用于转发请求42/41内置对象JSP已经准备好的,可以直接使用的对象请求对象:request输出对象:out响应对象:response应用程序对象:application会话对象:session页面上下文对象:pageContext页面对象:page配置对象:config异常对象:exception43/41需求说明编写登录页面(userLogin.jsp),表单包含字段:用户名和密码提交表单到loginSuccess.jsp页面,并在该页面中显示提交的用户名和密码分析在loginSuccess.jsp中使用request取出表单提交的数据在页面中显示课堂练习完成时间:5分钟共性问题集中讲解44/41JSP中默认使用的字符编码方式:iso-8859-1,不支持中文常见的支持中文的编码方式中文乱码你提交的是中文用户名吗?编码方式收录的字符gb2312常用简体汉字gbk简体和繁体汉字utf-8所有国家需要的字符问题45/41解决中文乱码设置请求和响应的编码方式request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");<%@

pagelanguage="java"contentType="text/html;charset=utf-8"%>get请求出现乱码治标的方法:newString(s.getBytes("iso-8859-1"),"utf-8");治本的方法:配置tomcat\conf\server.xml文件URIEncoding="UTF-8"useBodyEncodingForURI="true"<ConnectorconnectionTimeout="20000"port="8080"protocol="HTTP/1.1"redirectPort="8443"URIEncoding="UTF-8"/>演示示例2:中文乱码处理46/41在请求中存取属性-1在请求中保存属性publicvoidsetAttribute(Stringname,Objecto)request.setAttribute("mess","注册失败");在请求中获取属性publicObjectgetAttribute(Stringname)属性名属性值引用类型属性名属性值1、在使用属性值的时候要做非空判断,否则会出现空指针异常2、它的返回值类型是Object类型,需要做数据类型的转换注意47/41在请求中存取属性-2你会这样写吗?Stringmess=(String)request.getAttribute("mess");if(mess!=null){//在请求中取到"mess"属性对应的属性值,正常使用mess数据}else{//在请求中没有取到"mess"属性对应的属性值,使用备选方案}Stringmess=request.getAttribute("mess");mess.length();问题48/41转发RequestDispatcher对象forward()方法重定向将用户请求重新定位到一个新的URL转发与重定向response.sendRedirect("url")1、request.getRequestDispatcher("url").forward(request,response)2、<jsp:forwardpage="url"/>语法语法演示示例3:转发与重定向49/41转发与重定向的区别-1转发的工作方式请求JSP处理中…请求、响应客户端服务器响应结果处理结束URL没有发生变化50/41转发与重定向的区别-2重定向的工作方式请求JSP新地址客户端服务器结果第二次请求所对应的URL地址响应再次请求响应51/41转发与重定向的区别转发与重定向的区别-3比较项转发重定向URL变化否是重新发出请求不会会是否携带请求是否目标URL要求仅本Web应用任意URL重定向是客户端行为,转发是服务器行为注意52/41课堂练习需求说明继续完善上次上机练习,在JSP中防止中文乱码假定用户名:系统管理员,密码:123可以登录成功,其他用户拒绝登录,正确实现页面的跳转和提示分析在JSP中设置编码方式判断用户是否可以登录并实现跳转共性问题集中讲解完成时间:10分钟53/41小结实现新闻系统的用户注册请求对象request响应对象response解决中文乱码转发和重定向区别54/41概述任务在新闻系统中保存用户状态登录时自动填写用户名统计页面访问次数内容重难点session理解cookie理解application55/41使用session保存用户名-1使用会话对象session实现一个会话就是浏览器与服务器之间的一次通话会话可以在多次请求中保存和使用数据注册成功后自动登录,登录后记住用户状态,并在多个页面显示用户名,如何实现?通话提问56/41使用session保存用户名-2sessionpublicvoidsetAttribute(Stringname,Objectvalue);用法:session.setAttribute("userName","张三丰");publicObjectgetAttribute(Stringname);用法:StringuserName=(String)session.getAttribute("userName");演示示例4

:使用session保存用户名语法57/41session的工作方式每个session都有一个唯一的sessionidpublicStringgetId();session.getId();服务器浏览器浏览器请求请求响应(携带sessionid)请求(携带sessionid)sessionidFCA000…sessionid28F73…58/41会话的清除和过期-1若没有清理机制,会导致性能问题或服务器崩溃程序主动清除session数据服务器主动清除长时间没有再次发出请求的sessionsession的数据是在服务器端的,服务器保存的会话数据量会越来越大,从而导致性能问题问题59/41会话的清除和过期-2程序主动清除session数据设置会话失效:session.invalidate();移除会话的一个属性publicvoidremoveAttribute(Stringname);用法:session.removeAttribute("userName");语法60/41会话的清除和过期-3服务器主动清除长时间没有再次发出请求的session设置会话过期时间方法一:方法二:publicvoidsetMaxInactiveInterval(intinterval);

<session-config><session-timeout>30</session-timeout></session-config>单位:秒单位:分钟演示示例5

:session清除与过期61/41小结用浏览器访问服务器——产生会话通过浏览器在网站登录——在会话中保存数据登录成功后用个人身份进行访问——会话有效期内关闭了浏览器——结束会话服务器主动结束会话——会话到期使会话失效、删除属性——及时释放会话资源程序主动结束会话、会话到期——会话中的数据丢失62/41需求说明继续完善上次上机练习,实现登录成功后,在session中保存用户信息并跳转至index.jsp页面中,在该页面中显示用户名(注:需进行session是否为空的判断)index.jsp页面中提供注销按钮,点击注销按钮之后页面跳转至userLogin.jsp登录页面分析登录页提交表单到对应的JSP页面登录成功时在session中保存用户信息在其他页面中从session中取出用户信息显示清空session,实现注销课堂练习共性问题集中讲解完成时间:10分钟63/41使用cookie自动填写用户名cookie以文件方式保存数据添加数据publicvoidaddCookie(Cookiecookie)获取数据publicCookie[]getCookies()设置有效期publicvoidsetMaxAge(intexpiry)用户可以禁用cookie1、浏览器关闭,会话结束,但为什么有些论坛在用户再次进入的时候却可以识别用户身份,并且用户状态为:已登录?2、用户每次访问邮箱的时候,页面上会自动显示该用户名?问题演示示例6

:使用cookie自动填写用户名64/41课堂练习需求说明继续完善上次上机练习,在cookie中保存用户名,关闭浏览器再次打开index.jsp页面时,自动填写用户名分析登录成功时,在cookie中保存用户名在登录页获取cookie中保存的用户名完成自动填写用户名功能共性问题集中讲解完成时间:5分钟65/41application实现计数器分析每个用户都需要使用访问次数application可在整个项目中共享使用数据使用application实现计数器每次访问该页面,计数器加1解决方法publicvoidsetAttribute(Stringname,Objectobject)publicObjectgetAttribute(Stringname)统计页面的访问次数?问题演示示例7

:使用application实现计数器66/41课堂练习需求说明继续完善上次上机练习,实现统计userLogin.jsp登录页面被访问的次数分析访问登录页的时候将页面访问次数加1共性问题集中讲解完成时间:5分钟67/41三个对象对比-1request、session、application相同点都可以存储属性不同点request中存储的数据仅在一个请求中可用session中存储的数据在一个会话的有效期内可用application中存储的数据在整个Web项目中可用68/41三个对象对比-2request中存储的数据仅在一个请求中可用服务器浏览器请求2A页面请求响应请求2B页面C页面转发request数据request数据69/41三个对象对比-3session中存储的数据在一个会话有效期内可用服务器浏览器A页面请求B页面session数据可使用可使用用户甲用户乙session数据session数据70/41三个对象对比-4application中存储的数据在整个Web项目中可用服务器浏览器A页面请求B页面application数据可使用可访问用户甲用户乙用户丙用户丁71/41总结实现新闻系统的用户注册解决中文乱码转发和重定向使用session在多页面显示用户名使用cookie实现自动填写用户名使用application统计页面访问次数72/41问题及作业集中问题&课后作业73/41扫我有更多精彩课程呦

使用JDBC操作数据库

线上线下平台预习76/14本课目标学完本次课程后,你能够:掌握JDBC连接数据库使用JDBC对数据库进行增、删、改、查操作77/14使用JDBC操作数据库-概述思路分析使用JDBC操作新闻信息使用JDBC连接数据库使用JDBC增删改查数据使用配置文件保存数据库信息使用JNDI连接数据库学习方法JDBC操作数据库的步骤比较固定各接口、类和方法需要记忆,查询帮助文档可以帮助记忆新闻显示页面(newsDetail.jsp)的新闻信息是存储在JSP页面中的,可新闻系统中不止一条新闻,这些不同的新闻信息都要存储在不同的JSP页面中吗?78/14问题应用程序数据库服务器通过JDBC实现数据交互使用JDBC查询新闻JDBCJava数据库连接技术(JavaDataBaseConnectivity),能实现Java程序对各种数据库的访问由一组使用Java语言编写的类和接口(JDBCAPI)组成,它们位于java.sql以及javax.sql中79/14JDBC访问数据库步骤124DriverManager获取Connection连接Class.forName()加载驱动创建Statement执行SQL语句返回ResultSet查询结果应用程序数据库服务器3释放资源580/14演示示例2

:使用JDBC查询新闻信息演示示例1:JDBC连接数据库课堂练习需求说明使用JDBC操作数据库中新闻明细表(news_detail),查询新闻信息并在控制台正确显示实现思路创建类NewsDao,使用JDBC编写查询新闻信息的方法,将新闻信息在控制台打印输出81/14完成时间:15分钟共性问题集中讲解使用JDBC编辑新闻-1升级需求使用JDBC实现增加、修改新闻标题以及删除信息的功能实现思路修改类NewsDao,使用JDBC编写增加、修改新闻标题以及删除新闻信息的方法 使用PreparedStatement的executeUpdate()方法82/14演示示例3:

PreparedStatement的使用使用JDBC编辑新闻-2Statement与PreparedStatement区别Statement由方法createStatement()创建,该对象用于发送简单的SQL语句PreparedStatement由方法prepareStatement()创建,该对象用于发送带有一个或者多个输入参数的SQL语句SQL语句使用“?”作为数据占位符使用setXxx()方法设置数据PreparedStatement—预编译效率、性能、开销安全性代码可读性//PreparedStatement可替换变量(在SQL语句中可以包含?)Stringsql="select*fromuserwhereid=?";PreparedStatementps=conn.prepareStatement(sql);intid=1001;ps.setInt(1,id);ResultSetrs=ps.executeQuery();/**==================华丽丽滴分割线====================*///Statement用法intid=1001;Stringsql="select*fromuserwhereid="+id;Statementstmt=conn.CreateStatement();ResultSetrs=stmt.executeQuery(sql);83/14需求说明使用JDBC操作数据库中新闻明细表(news_detail),增加、删除新闻信息以及在修改新闻标题,并在控制台正确显示实现思路 修改类NewsDao,使用JDBC编写增加、修改新闻标题以及删除新闻信息的方法使用PreparedStatement的executeUpdate()方法课堂练习84/14完成时间:15分钟共性问题集中讲解总结-JDBC工作原理及内容MySqlJDBCAPIJDBCDriverManagerJDBC驱动Java应用程序OracleJDBC驱动JDBC的内容JDBCAPI定义了一系列的接口和类,集成在java.sql和javax.sql包中DriverManager管理各种不同的JDBC驱动JDBC驱动负责连接不同类型的数据库85/14总结86/14JDBC优点不必为不同的数据库专门编写不同的程序,而只需要加载不同的数据库驱动即可JDBC的编程步骤Class.forName()加载驱动DriverManager.getConnection(URL,用户名,密码)获得数据库连接获得Statement/PreparedStatement对象,执行SQL语句处理执行结果,释放资源问题及作业集中问题&课后作业87/14扫我有更多精彩课程呦

DAO模式及单例模式

线上线下平台预习90/22本课目标学完本次课程后,你能够:掌握DAO模式使用配置文件保存数据库信息理解并掌握单例模式91/22为什么进行JDBC封装2-1编写完增删改查的方法后,观察几个方法这么写有什么弊端?1、将相似功能的代码抽取封装成方法,减少代码冗余2、因为不同的数据库会有不同的实现,对数据库的操作一般抽取成接口,在以后的开发中可以降低耦合业务代码和数据访问代码耦合可读性差不利于后期修改和维护不利于代码复用问题注意92/22隔离业务逻辑代码和数据访问代码隔离不同数据库的实现数据访问代码MySQLSQLServerOracle业务逻辑代码业务逻辑代码调用数据访问接口为什么进行JDBC封装2-293/22实现JDBC封装将所有增删改查操作抽取成接口定义实体类传输数据将通用的操作(打开、关闭连接等)封装到工具类数据库工具类BaseDao:增、删、改、查的通用方法演示示例1:编写通用DAO升级增删改查新闻信息94/22什么是DAODataAccessObject(数据存取对象)位于业务逻辑和持久化数据之间实现对持久化数据的访问列1列2列3类DAO数据表DAO起着转换器的作用,将数据在实体类和数据库记录之间进行转换95/22DAO模式的组成部分DAO接口DAO实现类实体类数据库连接和关闭工具类优势隔离了数据访问代码和业务逻辑代码隔离了不同数据库实现DAO模式的组成96/22课堂练习完成时间:15分钟共性问题集中讲解需求说明编写通用的数据库操作类,升级实现新闻信息的查询、增加、修改以及删除功能实现思路 添加数据库操作类BaseDao,编写通用的打开资源、查询、增删改、关闭资源方法将NewsDao抽取成接口,编写实现类97/22配置数据库访问参数弊端数据库发生改变时,要重新修改代码,重新编译和部署解决将数据库信息写在配置文件当中,让程序通过读取配置文件来获得这些信息新闻信息存储在MySQL数据库中,但在开发和部署时有可能使用不同的数据库,也可能因为客户的需求而更换数据库产品。此时刚才读取新闻信息的做法有何弊端呢?问题98/22属性文件后缀为.properties数据格式为“键=值”使用“#”来注释Java中提供了Properties类来读取配置文件driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/xxxxusername=xxxxxxpassword=xxxx键值演示示例2:配置文件存储数据库信息99/22课堂练习完成时间:10分钟共性问题集中讲解需求说明使用配置文件存储数据库信息,升级实现JDBC查询新闻信息功能,最后将新闻信息在控制台正确输出实现思路编写配置文件perties创建包com.pb.news.util,编写类ConfigManager

读取属性文件修改NewsDao类的查询新闻信息的方法100/22小结什么是DAO?DAO模式的作用是什么?DAO是由哪几部分组成的?JDBC操作中哪些地方建议读取配置文件?为什么?101/22为何需要单例模式BaseDao:操作数据库的基类每个线程对系统操作都需new一个BaseDao实例初始化时的I/O操作消耗系统资源,影响系统性能对于每个线程,可共享一个实例分析分组讨论102/22单例模式2-1系统运行期间,有且仅有一个实例一个类只有一个实例——最基本的要求只提供私有构造器它必须自行创建这个实例定义了静态的该类私有对象它必须自行向整个系统提供这个实例提供一个静态的公有方法,返回创建或者获取本身的静态私有对象演示示例3

:简单的单例模式实现103/22单例模式2-2在并发环境下上述的单例模式实现是否存在弊端,线程是否安全?是否会出现多个configManager实例?懒汉模式饿汉模式分组讨论104/22懒汉模式在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例特点线程不安全延迟加载(lazyloading)如何解决线程安全问题?同步(synchronized)演示示例4:懒汉模式-synchronized105/22饿汉模式在类加载的时候,就完成初始化特点线程安全不具备延迟加载特性演示示例5:饿汉模式106/22单例模式懒汉模式饿汉模式概念在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例在类加载的时候,就完成初始化特点类加载速度快,但是运行时获取对象的速度较慢。——“时间换空间”类加载较慢,但获取对象速度快。——“空间换时间”延迟加载(lazyloading)具备不具备线程安全线程不安全线程安全注意:

在整个程序运行期间,有且仅有一个实例。若违背这一点,所设计的类就不是单例类!小结107/22总结DAO模式封装JDBC解耦DAO模式的组成部分使用属性文件配置数据库参数读取属性文件单例模式懒汉模式饿汉模式108/22问题及作业集中问题&课后作业109/22扫我有更多精彩课程呦数据源及分层开发线上线下平台预习112/28本课目标学完本次课程后,你能够:掌握JNDI连接数据库掌握分层架构应用开发使用JavaBean传递数据掌握使用JSP脚本显示数据掌握JSP动作标签113/28使用Tomcat数据源-1分析访问前需要先获取连接每次操作结束后,要释放资源频繁的连接导致系统的安全性和稳定性差解决问题可以使用数据源和连接池现在我们能够使用JDBC访问数据库了,这种实现方式是否存在不足呢?提问114/28使用Tomcat数据源-2生活中连接池热线电话

多名接线员可同时处理多路来电……115/28使用Tomcat数据源-3连接池工作原理连接池是由容器提供的,用来管理池中连接对象Connection1Connection2Connection3请求连接返回连接连接池自动分配连接对象并对闲置的连接进行回收连接池应用程序数据库116/28使用Tomcat数据源-4数据源(DataSource)javax.sql.DataSource接口负责建立与数据库的连接由Tomcat提供,将连接保存在连接池中连接池中的连接对象是由谁创建的呢?1、数据源用来连接数据库,获得连接(Connection)对象2、连接池用来管理连接(Connection)对象3、在程序中使用JNDI获取数据源问题注意117/28使用Tomcat数据源-5在Tomcat中配置数据源的步骤Tomcat中加入数据库驱动文件配置Tomcat的conf/context.xml使用JNDI获取连接对象演示示例1:Tomcat配置数据源118/28课堂练习完成时间:15分钟共性问题集中讲解119/28需求说明配置Tomcat中数据源,使用JNDI获取连接,并在页面中显示Connection实现思路参照在Tomcat中使用数据源的步骤小结120/28连接池原理Tomcat中配置数据源查找JNDI数据源使用JavaBean封装数据-概述任务内容新闻列表展示和添加新闻信息使用JavaBean封装数据使用JavaBean传递数据使用JSP脚本显示数据JSP动作标签的使用学习方法举一反三,模仿并多加练习121/28JavaBean的应用-1JavaBean就是一个Java类作用封装业务逻辑封装数据publicvoidadd(intid,intcategoryId,Stringtitle,Stringsummary,

Stringcontent,Datecreatedate){//方法体}publicvoidadd(新闻信息对象){//方法体}若新闻字段很多,也要如此定义吗?问题演示示例2

:编写JavaBean实现增删改查操作122/28需求说明修改新闻系统,添加新闻信息的实体类,并以此作为参数修改NewsDao以及NewsDaoImpl的方法,控制台验证新闻的增、删、改、查效果实现思路对照数据表(新闻明细表NEWS_DETAIL)编写实体类News为News添加属性以及setter、getter以News对象作为参数修改NewsDao以及NewsDaoImpl的方法课堂练习完成时间:15分钟共性问题集中讲解123/28JavaBean的应用-2dao包中的接口(NewsDao)以及类(NewsDaoImpl)主要负责和数据操作相关的事情service包中的接口和类对dao的方法进行封装和调用,主要负责和业务逻辑相关的操作CategoryDao{//根据类别删除新闻信息//删除新闻分类}需求:删除某新闻类别CategoryService{…deleteCategory()…}完成时间:15分钟共性问题集中讲解演示示例3:编写Service层—级联删除124/28新闻列表页面需求说明创建新闻系统后台的新闻列表页面,将数据库中所有新闻信息在该页面显示实现思路完善页面newsDetailList.jsp使用<%for%>循环显示新闻内容完成时间:10分钟共性问题集中讲解演示示例4

:新闻列表显示页面125/28小结分层的组成及作用表示层:与用户交互、展示数据业务逻辑层:控制业务流程及事务数据访问层:实现数据库操作分层优点职责清晰,分工明确利于维护扩展利于代码重用126/28<jsp:useBean>JSP动作标签通过动作标签,程序员可以在JSP页面中把页面的显示功能部分封装起来,使整个页面更简洁和易于维护<jsp:useBean>装载一个将在JSP页面中使用的JavaBean,发挥Java组件重用的优势使用脚本与HTML嵌套,页面代码很乱,可读性差,也不易于维护,能否进行改进?<jsp:useBeanid="name"class="package.class"scope="scope">JavaBean的类JavaBean的范围问题语法演示示例5

:<jsp:useBean>的使用127/28JavaBean的引用名课堂练习完成时间:5分钟共性问题集中讲解128/28需求说明使用动作标签<jsp:useBean>修改实现新闻列表显示页面实现思路在newsDetailList.jsp页面中加入动作标签<jsp:useBean><jsp:include>增加新闻信息页面和新闻列表显示页面的左侧和上半部分完全一样,要把页面代码全部重新写一遍或者复制一遍吗?<jsp:include>把指定文件插入正在生成的页面中<jsp:includepage="URL">引入的页面问题语法演示示例6:<jsp:include>的使用129/28课堂练习完成时间:15分钟共性问题集中讲解130/28需求说明使用<jsp:include>实现页面复用,最终实现增加新闻信息页面以及新闻列表显示页面实现思路使用<jsp:include>实现两个页面总框架使用<iframe>分别实现两个页面具体内容<%@include%><%@include%>与<jsp:include><jsp:include>为动态包含,将被包含页面的结果包含进来。先处理,再包含<%@include%>为静态包含,将被包含页面的内容包含进来。先包含,再处理<%@includefile="URL"%>引入的页面语法演示示例7

:两种页面包含的区别131/28课堂练习完成时间:10分钟共性问题集中讲解132/28需求说明验证两种包含方式的区别实现思路使用<jsp:include>实现页面复用使用<%@include%>实现页面复用观察两者的不同页面跳转request.getRequestDispatcher().forward()转发response.sendRedirect()重定向<jsp:forward>页面跳转<jsp:forwardpage="URL">跳转的页面语法演示示例8:<jsp:forward>的使用133/28课堂练习完成时间:15分钟共性问题集中讲解134/28需求说明编写添加新闻页面,实现添加新闻的功能。并使用<jsp:forward>实现页面跳转到新闻列表页面实现思路编写添加新闻页面,实现添加新闻的功能使用<jsp:forward>实现页面跳转到新闻列表页面小结135/28JSP动作<jsp:useBean><jsp:include><jsp:forward>总结连接池的工作原理及优势配置和获取JNDI数据源分层开发的优势常用JSP动作标签136/28问题及作业集中问题&课后作业137/28扫我有更多精彩课程呦第三方控件线上线下平台预习140/15本课目标学完本次课程后,你能够:掌握commons-fileupload文件上传组件掌握CKEditor文本编辑器141/15概述为新闻添加图片使用commons-fileupload上传图片实现所见即所得的新闻编辑使用CKEditor编辑新闻内容142/15为新闻添加图片第三方组件第三方组织提供的组件

commons-fileuploadApache提供的组件,实现上传功能为新闻添加图片的步骤下载commons-fileupload-1.2.2.jar和commons-io-2.4.jar导入项目准备添加新闻的页面,提交至JSP在JSP中实现文件上传和新闻添加怎样为新闻添加图片?问题演示示例1

:为新闻添加图片143/15小结-1准备新闻的提交页面在表单中指定属性enctype="multipart/form-data"修改表单的提交方式为post在JSP中实现文件上传检查请求类型声明对象转换请求对象booleanisMultipart=ServletFileUpload.isMultipartContent(request);当enctype="multipart/form-data"且method="post"时,isMultipart为trueFileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadupload=newServletFileUpload(factory);List<FileItem>items=null;items=upload.parseRequest(request);144/15在JSP中实现文件上传检查请求类型声明对象转换请求对象保存上传的文件获取普通字段小结-2if(!item.isFormField()){

FilefullFile=newFile(item.getName()); FileuploadFile=newFile(realPath,fullFile.getName()); item.write(uploadFile);}if(item.isFormField()){

fieldName=item.getFieldName();

if("title".equals(fieldName)){

news.setTitle(item.getString("UTF-8"));

}…}145/15需求说明实现为新闻添加图片信息增加newsDetailView.jsp,查看新闻详细内容(包括新闻图片的展现)实现思路将commons-fileupload-1.2.2.jar和commons-io-2.4.jar导入项目准备添加新闻的页面,提交至JSP在JSP中实现文件上传和新闻添加增加newsDetailView.jsp,使用<img>标签展现图片课堂练习完成时间:20分钟共性问题集中讲解146/15所见即所得的新闻编辑CKEditor网页中实现所见即所得的编辑器使用CKEditor步骤下载CKEditor解压到项目中在页面中加入CKEditor使用CKEditor编辑内容提交CKEditor编辑的内容怎样对新闻进行所见即所得的编辑呢?问题演示示例2:CKEditor提供所见即所得的新闻编辑147/15在页面中使用CKEditor在页面中引入ckeditor.js在页面中加入textarea,使之成为CKEditor通过config.js配置CKEditor小结-1<scripttype="text/javascript"src="ckeditor/ckeditor.js"></script><textareaid="newscontent"name="newscontent"class="ckeditor"></textarea>CKEDITOR.editorConfig=function(config){ config.language='zh-cn';//配置语言,zh-cn代表中文 config.uiColor='#AADC6E';//背景颜色 config.width='auto';//宽度 config.height='300px';//高度 config.skin='office2007';//皮肤:v2,kama,office2007};148/15小结-2149/15在页面中使用CKEditor在页面中引入ckeditor.js在页面中加入textarea,使之成为CKEditor通过config.js配置CKEditorCKEditor文件夹_samples:存放官方的Demolang:存放多国语言文件skins:皮肤文件夹需求说明在添加新闻时使用CKEditor编辑新闻内容实现思路将CKEditor解压到项目中在页面中加入CKEditor使用CKEditor编辑内容提交CKEditor编辑的新闻将新闻保存至数据库课堂练习完成时间:10分钟共性问题集中讲解150/15总结实现新闻图片的上传使用commons-fileupload组件method="post"enctype="multipart/form-data"实现所见即所得新闻编辑使用CKEditor官方Demo:_samples151/15问题及作业集中问题&课后作业152/15扫我有更多精彩课程呦分页查询线上线下平台预习155/15本课目标学完本次课程后,你能够:实现列表分页查询掌握JSP分页显示数据156/15新闻列表实现分页查询新闻信息分页查询学习方法先编写分页查询sql语句,再编写分页查询方法,将分页查询分步实现有没有一种显示方式,既能显示多条信息,又不需要拖动页面呢?问题157/15分页查询-1分页优点数据清晰直观不受数据量限制页面不再冗长分页如何实现解决方案:每次翻页的时候只从数据库里检索出本页需要的数据158/15分页查询-2分页查询步骤计算显示数据的总数量确定每页显示的数据量计算显示的页数页数=总数量/每页显示的数据量[+1]

编写分页查询SQL语句实现分页查询演示示例1

:新闻列表分页查询159/15小结分页查询关键点计算显示数据的总数量需要借助JDBC内容计算页数时,声明一个工具类将功能独立出来,便于复用总记录数/每页显示的记录数整除:总页数=总记录数/每页显示记录数不能整除:总页数=总记录数/每页显示记录数+1编写分页查询SQL语句(limit)select*fromtableNamewhere查询条件

limit(当前页码-1)*页面容量,页面容量160/15课堂练习完成时间:20分钟需求说明编写分页查询方法,实现新闻列表的分页查询实现思路编写方法查询新闻总记录数创建工具类PageSupport,编写方法计算分页总页数编写分页查询SQL语句编写方法实现分页查询共性问题集中讲解完成时间:20分钟161/15新闻信息分页显示分页显示使用JSP分页显示数据学习方法举一反三,课下扩展实现用户、评论等信息的分页查询以及显示162/15分页显示-1分页显示关键点确定当前页设置首页、上一页、下一页、末页的页码还要对可能出现的异常进行控制首页与末页的控制共性问题集中讲解完成时间:20分钟演示示例2:分页显示新闻列表163/15分页显示-2添加“GO”按钮,根据输入的页码,跳转到相应页显示新闻信息分析思路判断用户输入页码的正确性页码传递共性问题集中讲解完成时间:20分钟演示示例3:“GO”按钮跳转164/15小结分页显示关键点确定当前页设置首页、上一页、下一页、末页的页码首页与末页的控制传递分页页码表单隐藏域传递页码165/15总结理解分页功能的实现流程及控制点确定符合展示条件的数据总量确定分页显示的总页数(总条数%页面容量==0)?

总条数/页面容量:总条数/页面容量+1编写分页查询SQL语句limit(当前页码-1)x页面容量,页面容量在JSP页面中进行分页显示设置,注意控制页码边界使用JavaBean封装相关数据166/15问题及作业集中问题&课后作业167/15扫我有更多精彩课程呦

EL与JSTL

线上线下平台预习170/26本课目标学完本次课程后,你能够:掌握使用EL表达式优化页面显示掌握使用JSTL标签优化页面显示171/26为什么要使用EL表达式JSP脚本有哪些不足代码结构混乱脚本与HTML混合,容易出错代码不易于维护使用EL表达式来优化程序代码,增加程序可读性<%//每页显示的新闻列表List<News>newsList=newsService.getPageNewsList(pageIndex,pageSize);inti=0;for(Newsnews:newsList){i++;%> <tr<%if(i%2!=0){%>class="admin-list-td-h2"<%}%>> <td><%=news.getAuthor()%></td><td><%=news.getCreateDate()%></td>……<table>

<c:forEachvar="news"items="${list}"><tr><td><c:outvalue="${news.title}"/></td></tr>

</c:forEach></table>172/26EL语法EL表达式(ExpressionLanguage)${EL表达式}例如:${username}EL操作符操作符“.”获取对象的属性,例如:${news.title}操作符“[]”获取对象的属性,例如:${news["title"]}获取集合中的对象,例如:${newsList[0]}EL严格区分大小写,初学者严格按规范书写,有利于养成好的编码习惯173/26注意演示示例1:EL语法EL运算符为了避免JSP混淆运算符和页面关键字,很多运算符都有替代写法运算符说明()改变执行的优先级,例如${3*(4+5)}+,-,*,/,%算术运算符,例如${3+2}==,!=,>,>=,<,<=关系运算符,例如${a==b}或${aeqb}&&,||,!逻辑运算符,例如${true&&false}?:条件运算符,例如${a>b?1:2}empty用于检测变量名是否为空,是否等于NULL,例如${emptyname}${param.password1}==${param.password2}${${param.password1}==${param.password2}}${param.password1==param.password2}关系运算符范例结果==或eq${5==5}或${5eq5}true!=或ne${5!=5}或${5ne5}false<或lt${3<5}或${3lt5}true>或gt${3>5}或{3gt5}false<=或le${3<=5}或${3le5}true>=或ge${3>=5}或${3ge5}false174/26注意EL功能取得JavaBean对象的属性${news.title}取得数组、List、Map类型对象的元素${list[0]}使用各类运算符对原始数据进行简单处理${totalRecordCount/pageSize}屏蔽一些常见的异常${username}能实现简单的自动类型转换${news}相当于(News)request.getAttribute("news")175/26EL访问作用域request.setAttribute("news",news);两种方式取数据:使用Java小脚本:request.getAttribute("news");使用EL表达式:

${news}或者${requestScope.news}作用域Java代码取值EL取值请求作用域request.getAttribute("news");${requestScope.news}会话作用域session.getAttribute("username");${sessionScope.username}程序作用域application.getAttribute("count");${applicationScope.count}页面作用域pageContext.getAttribute("userNum");${pageScope.userNum}176/26演示示例2:使用EL访问作用域课堂练习177/26完成时间:5分钟共性问题集中讲解需求说明修改新闻明细页面newsDetailView.jsp,使用EL显示新闻的各种信息实现思路修改newsDetailView.jsp小结EL语法格式:${表达式}操作符.操作符可用于访问对象的属性[]操作符用于访问对象的属性,也可以访问数组或集合的元素算术运算符、关系运算符、逻辑运算符等用法与Java相似使用EL访问作用域页面作用域:${pageScope.userNum}请求作用域:${requestScope.news}会话作用域:${sessionScope.username}程序作用域:${applicationScope.count}178/26JSTL介绍使用了EL表达式可以简化页面代码结构,那为什么还要使用JSTL呢?<%//每页显示的新闻列表List<News>newsList=newsService.getPageNewsList(pageIndex,pageSize);inti=0;for(Newsnews:newsList){i++;%> <tr<%if(i%2!=0){%>class="admin-list-td-h2"<%}%>> <td><%=news.getAuthor()%></td><td><%=news.getCreateDate()%></td>……条件判断循环控制179/26提问JSTL介绍JSTL(JavaServerPagesStandardTagLibrary)JSP标准标签库实现JSP页面中的逻辑控制JSTL使用步骤下载jstl.jar和standard.jar包/dist/jakarta/taglibs/standard/binaries/将这两个包复制到WEB-INF\lib目录在JSP页面中添加指令<%@tagliburi="/jsp/jstl/core"prefix="c"%>180/26演示:添加jstl.jar和standard.jar包JSTL标签分类标签库名称资源标示符(uri)前缀(prefix)核心标签库/jsp/jstl/corec国际化/格式化标签库/jsp/jstl/fmtfmtXML标签库/jsp/jstl/xmlx数据库标签库/jsp/jstl/sqlsql函数标签库/jsp/jstl/functionsfn核心标签库国际化/格式化标签库<%@tagliburi="/jsp/jstl/core"prefix="c"%><%@tagliburi="/jsp/jstl/fmt"prefix="fmt"%>181/26<c:out/>标签<c:outvalue="value"defau

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论