版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程介绍全套可编辑PPT课件简介围绕一个漫画网站,采用任务驱动的形式,从语言基础、核心技术、高级应用3个层次全面、详实地介绍了JavaWeb应用开发所需的各种知识和技术。为了提高学生的学习兴趣,精心设计了与教学目标及课程贯穿项目结合紧密,适于学生学和教师教的任务案例,将知识讲解融入到学习任务中,能很好地指导学生实践,从而培养学生的技术应用能力。内容结构教学内容分为8个模块,每个模块包括2~3个学习任务,每个任务中又包含多个相关知识点和示例。第1章JSP程序设计基础,主要学习任务是分析漫画网站的功能并完成数据库设计、创建网站的Web应用、为网站主页添加页面元素,并且能够运用集合进行数据存取。进而掌握动态网站的运行原理、JavaWeb项目的开发流程、JSP基本语法及集合框架在Web项目中的常见用法。第2章JSP内置对象,主要学习任务是获取用户的登录信息、实现页面的访问控制,并且能够统计在线人数。进而掌握获取请求和处理响应的方法、数据交互和页面跳转的原理及对象的作用域。第3章JSP访问数据库,主要学习任务是基于MySQL数据库实现漫画网站管理员的登录、漫画类别的管理及会员注册与登录等功能,并通过分层架构优化数据库访问代码。第4章Servlet基础,主要学习目标是实现Servlet的配置和部署、熟悉Servlet的生命周期、了解ServletAPI的常用组件,进而学会使用Servlet处理用户请求。内容结构第5章MVC设计模式,主要学习目标是理解JavaBean的概念及应用、熟悉MVC设计模式、掌握分页的实现思路、熟悉文件上传的方法,进而能够基于MVC实现漫画类型的删除与修改、漫画类别的分页显示及漫画的添加功能。第6章EL和JSTL,主要学习目标是理解EL表达式的概念及应用、熟悉常用的JSTL标签,进而能够使用EL表达式实现一项问卷调查、并使用JSTL和EL显示漫画列表。第7章用Ajax改善用户体验,主要学习目标是理解Ajax技术、掌握JQuery的$ajax()方法、掌握JSON的使用方法,进而能够基于Ajax实现无刷新的用户名存在性验证、使用JSON生成漫画类型列表。第8章综合案例,要求读者根据案例分析,运用JSP&Servlet、JDBC、会话跟踪、EL&JSTL及过滤器等技术,基于MVC设计模式和三层架构实现综合实战项目。(本章无课件)课时安排序号模块名称建议学时1第1章JSP程序设计基础82第2章JSP内置对象83第3章JSP访问数据库124第4章Servlet基础105第5章MVC设计模式106第6章EL和JSTL87第7章用Ajax改善用户体验88第8章综合实战项目16合计80
谢谢大家
1.1任务1:分析课程贯穿项目任务描述从开发背景、用户角色、模块划分、界面设计及数据提取等方面,对漫画网站原型进行分析。进而熟悉该项目的主要功能,并完成数据库的设计。任务描述技能目标能够运用B/S思维设计应用程序能够绘制系统功能结构图能够通过网站原型进行数据提取学会分析系统用例图技能目标1.1.1C/S架构与B/S架构一、C/S架构1、概念C/S架构的全称是Client/Server,即客户端/服务器端架构,其客户端包含一个或多个在用户电脑上运行的程序,而服务器端有两种:一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序进行通信。
C/S架构也可以看做是胖客户端架构,因为客户端需要实现绝大多数的业务逻辑和界面展示。这种架构中,客户端需要承受很大的压力,因为显示逻辑和事务处理都包含在其中,通过与数据库的交互完成数据持久化,以此满足实际项目的需求。1.1.1C/S架构与B/S架构一、C/S架构2、特点•C/S架构的界面和操作可以很丰富。•安全性可以很容易保证。•交互模式简单致使响应速度较快。优点适用面窄,通常用于局域网中。由于客户端程序需要安装才可使用,因此不适合面向一些不可知的用户。维护成本高,完成一次升级,所有客户端程序都需要变更。缺点1.1.1C/S架构与B/S架构二、B/S架构1、概念B/S架构的全称是Browser/Server,即浏览器/服务器架构。Browser是指Web浏览器,即客户端无需特殊安装,只要有Web浏览器即可。前端只承担极少数的事务逻辑,主要事务逻辑在服务器端实现。B/S架构也可以看做是瘦客户端架构,因为客户端包含的逻辑很少,主要负责数据数据呈现,事务处理逻辑大部分放在了Web应用程序上,这样就减少了客户端的压力。1.1.1C/S架构与B/S架构二、C/S架构2、特点•客户端无需安装,有Web浏览器即可。•B/S架构的系统可以直接放在广域网上,实现多客户访问,适用面广。•维护成本低,完成一次升级,无需升级多个客户端,升级服务器即可。优点•在跨浏览器方面,B/S架构不尽如人意。•前端表现力很难达到C/S架构的程度。•在速度和安全性上需要花费巨大的设计成本。•客户端与服务器端的交互是请求-响应模式,通常需要刷新页面。缺点1.1.2静态网页与动态网页一、静态网页静态网页不是指网页中的元素都静止不动,而是指网页文件中没有程序代码,只有HTML标记,一般后缀为.htm、.html、.shtml或.xml等。静态网页可以包含GIF动画,Flash动画,javaScript脚本等。1.1.2静态网页与动态网页二、动态网页动态网页是指在网页文件中除了HTML标记,还包含一些实现特定功能的程序代码,这些代码使得浏览器与服务器之间可以进行交互,即服务器可以根据客户端的不同请求动态产生网页内容。动态网页的后缀名通常根据所用的程序设计语言的不同而不同,一般为.asp、.aspx、cgi、.php、.perl、.jsp等。1.1.3常用的动态网页技术一、ASPASP是ActiveServerPage的缩写,意为动态服务器页面。是由微软开发的嵌在网页中并由服务器端运行的脚本技术(与浏览器无关)。适用Web服务器:Windows下的InternetInformationServices(IIS)
适用语言:VBS/JS脚本语言+HTML
ASP既不是一种程序语言,也不是一种开发工具,而是一种技术框架。1.1.3常用的动态网页技术二、ASP.NETASP.NET并非编程语言,而是微软针对ASP的缺点研发的一种新的开发平台,实现了业务逻辑和Html页面的文件分离,无论页面原型如何改变,业务逻辑代码都不必做任何改动,代码重用性和维护性得到了提高。适用Web服务器:Windows下的InternetInformationServices(IIS)
适用语言:C#、VB、J#等+HTML,其中C#最常用。1.1.3常用的动态网页技术三、PHPPHP是超文本预处理语言ProfessionalHypertextPreprocessor的缩写。PHP原本的简称为PersonalHomePage,最初是丹麦程序员为了维护个人网页而用C语言开发的一些工具程序集。后来又用C语言重新编写,增加了数据库访问功能。PHP也是一种在服务器端执行的嵌入HTML文档的脚本语言,语言风格类似于C语言。由于简单高效、开源免费、跨平台等特性,PHP受到很多Web开发人员的欢迎。PHP支持绝大多数数据库,常搭配MySQL数据库和ApacheWeb服务器。1.1.3常用的动态网页技术四、JSPJSP全称JavaServerPages,是以Java语言作为脚本语言的新一代网站开发技术。适用Web服务器:Tomcat、WebLgic、JBoss、Websphere等适用语言:Java程序段(Scriptlet)和JSP标记(tag)+HTML
由于Java语言的跨平台特性,所以JSP不受操作系统或开发平台的制约,而且有多种服务器可以支持,因此,JSP经常在企业级系统开发中使用。任务实现一、开发背景选取漫画网站设计作为课程贯穿项目,所有知识点将围绕该项目逐层递进,逐步扩展。二、功能描述漫画网站有三类用户,分别是管理员、会员及匿名用户。其系统结构如图1-5所示,匿名用户只能浏览主页、阅读部分在线漫画;用户注册后才能成为会员,会员登录后可以查看漫画信息、阅读所有在线漫画、使用漫画心愿单及购买实物漫画书;管理员无需注册,直接使用固定账号登陆即可对会员及漫画信息进行管理。任务实现任务实现三、数据库设计任务实现任务实现四、界面原型任务实现任务实现任务实现拓展与提高用例图就是非常重要的需求描述工具之一。用例图一般由以下四类元素构成:一、参与者参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。参与者在画图中用简笔人物画来表示,人物下面附上参与者的名称。二、用例用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生可观察的结果。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。三、系统边界系统边界是用来表示正在建模系统的边界。参与者画在边界的外面,用例画在边界里面。在画图时,系统边界可以省略。拓展与提高四、用例图中的关系拓展与提高总结C/S架构与B/S架构
静态网页与动态网页
常用的动态网页技术贯穿项目分析及数据库设计
谢谢大家观看
1.2任务2:为漫画网站创建Web应用任务描述搭建JavaWeb应用程序开发环境,为漫画网站创建Web应用,并在服务器上发布和运行该应用。任务描述技能目标能够安装JDK并正确配置环境变量能够安装并配置Tomcat服务器能够为Eclipse配置运行时环境和服务器能够用Eclipse创建Web应用学会创建Web页面能够发布并运行Web应用技能目标1.2.1搭建Tomcat服务器一、JDK的安装与配置1、从甲骨文官方网站下载JDK的安装包,根据自己电脑的操作系统选择正确的版本进行下载。1.2.1搭建Tomcat服务器
2、配置JDK环境变量1.2.1搭建Tomcat服务器1.2.1搭建Tomcat服务器1.2.1搭建Tomcat服务器1.2.1搭建Tomcat服务器二、Tomcat的安装与启动1、下载压缩版Tomcat1.2.1搭建Tomcat服务器2、Tomcat目录结构1)bin目录:用于存放Tomcat命令。2)conf目录:用于存放Tomcat的一些配置文件。3)lib目录:主要用来存放Tomcat运行所需要加载的jar包,如连接数据库的jdbc包等。4)logs目录:用来存放Tomcat在运行过程中产生的日志文件,如在控制台输出的日志等。5)temp目录:用户存放tomcat在运行过程中产生的临时文件。6)webapps目录:用来存放应用程序,当Tomcat启动时会去加载webapps目录下的应用程序。7)work目录:用来存放Tomcat在运行时的编译后文件,如JSP编译后的文件。1.2.1搭建Tomcat服务器3、启动Tomcat(bin目录下的startup.bat)
1.2.2在Eclipse中配置Tomcat服务器1.2.2在Eclipse中配置Tomcat服务器1.2.3创建第一个Web应用1.2.3创建第一个Web应用1.2.3创建第一个Web应用1.2.3创建第一个Web应用工程目录结构1、src目录:用于存放Java源文件。2、WebRoot目录:是Web应用的顶层目录。1)META-INF目录:由系统自动生成,用于存放系统描述信息。2)WEB-INF目录:该目录下的文件不能被引用,即无法被用户访问。
该目录一般由以下三部分组成:
WEB-INF/web.xml文件,Web应用的初始化配置文件(必选)
WEB-INF/classes目录,编译后的Java类文件(可选)
WEB-INF/lib目录,Web应用所需的Java类库文件(*.jar)(可选)3)自行创建的可以对外发布的Web资源1.2.3创建第一个Web应用添加Web页面1.2.3创建第一个Web应用部署Web应用1.2.3创建第一个Web应用部署Web应用1.2.3创建第一个Web应用运行Web应用1.2.3创建第一个Web应用运行Web应用任务实现拓展与提高部署方法一:项目打成war包,后放入webapps目录。拓展与提高部署方法二:通过修改conf下的server.xml文件进行部署。1、打开Tomcat下的conf/server.xml,在<Host></Host>标签之间输入项目配置信息:<Contextpath="/welcome"docBase="D:\EclipseSpace\cartoon\WebRoot"reloadable="true"/>1)path:表示浏览器访问时的路径名。2)docBase:web项目的WebRoot所在的路径,其实也就是编译后的项目。3)reloadble:设定项目有改动时,Tomcat是否重新加载该项目。2、重启服务器,并在浏览器地址栏中输入正确的URL,访问相应的页面即可。
如http://localhost:8080/welcome/welcome.html,其中的webcome对应上面的path属性。拓展与提高部署方法三:每个项目分开配置。在conf\Catalina\localhost目录下,新建的xml文件,增加下面配置语句:<ContextdocBase="D:\EclipseSpace\cartoon\WebRoot"reloadable="true"/>在浏览器地址栏中输入正确的URL,访问相应的页面即可,无需重启服务器。如http://localhost:8080/hello/welcome.html其中的hello对应上面的xml文件名。总结搭建Tomcat服务器
在Eclipse中配置Tomcat服务器
创建第一个Web应用
谢谢大家观看
1.3任务3:为漫画网站主页添加页面元素任务描述为漫画网站添加主页,并且为主页添加系统时间、注释、漫画类型列表等页面元素。任务描述技能目标能够在JSP中添加静态元素能够在JSP中设置页面指令能够在JSP中添加注释能够在JSP中使用表达式能够在JSP中使用小脚本能够在JSP中使用声明技能目标1.3.1JSP简介JSP(JavaServerPages)是一种Java服务器端技术,可以理解为内嵌了Java代码的HTML页面,其文件扩展名必须是jsp(如index.jsp)。
它使用JSP标签在HTML中插入Java脚本,标签通常以<%开头,以%>结束。并且由应用服务器中的JSP引擎来编译和执行内嵌的Java代码,然后再生成整个页面信息返回给客户端。1.3.2JSP的执行过程1、翻译阶段:JSP页面会被Web容器中的JSP引擎转换成Java源码。2、编译阶段:Java源码会被编译成可执行的字节码。3、执行阶段:执行编译生成的字节码文件;执行结束后,容器把生成的页面反馈给客户端进行显示。1.3.3设置默认访问页有时候Web工程中并没有创建web.xml,但是同样可以通过应用根目录访问到默认页面,这是为什么呢?原因是Tomcat的conf目录下也有一个web.xml,可以进行全局设置。服务器在Web工程中找不到web.xml时,就会从conf下的web.xml中匹配相应的<welcome-file>元素。1.3.4JSP的页面元素一、静态内容静态内容是JSP页面中的静态文本,基本都是HTML标记,与Java和JSP语法无关。二、JSP指令元素JSP指令元素的作用是通过设置指令中的属性,在JSP运时,控制JSP页面的某些特性。JSP指令一般以“<%@”开始,以“%>”结束。【例如】<%@pagelanguage="java"import="java.util.*,java.text.*"contentType="text/html;charset=utf-8"pageEncoding="utf-8"%>pageEncoding是JSP文件本身的编码,只用于JSP输出,不会作为header发出去;contentType的charset是指服务器发送给客户端时的内容编码。1.3.4JSP的页面元素三、JSP脚本元素在JSP页面中,将小脚本(scriptlet)、表达式(expression)、声明(declaration)统称为JSP脚本元素,用于在JSP页面中嵌入Java代码,实现页面的动态处理。1、小脚本小脚本可以包含任意的Java片断,形式比较灵活,通过在JSP页面中编写小脚本可以执行复杂的操作和业务处理。编写方法是将Java程序片断插入<%%>标记中。1.3.4JSP的页面元素2、表达式表达式是对数据的表示,系统将其作为一个值进行计算和显示,当需要在页面中输出一个Java变量或者表达式值时,使用表达式是非常方便的。其语法是<%=Java变量或表达式%>。1.3.4JSP的页面元素3、JSP声明在Java小脚本中只能定义局部变量。如果需要为Java脚本定义全局变量(即Java类的成员变量)和方法时,就需要使用JSP声明来实现了。声明语法如下:<%!Declaration;[Declaration;]……%>1.3.4JSP的页面元素四、JSP中的注释1、HTML注释标记使用格式是<!--注释内容-->,一般用于注释静态内容。其注释内容在客户端浏览器中可以通过查看源代码看到。2、JSP注释标记使用格式是<%--注释内容--%>,一般用于注释脚本元素。在客户端通过查看源代码看不到注释内容,所以有时也叫做隐藏注释。3、在JSP脚本中使用注释在脚本中加注释和在Java类中加注释的方法是一样的。1.3.4JSP的页面元素任务实现任务实现拓展与提高Java的集合组件主要存放在java.util包中,其类型主要有3种:List(列表)、Set(集)和Map(映射),它们都是接口。List和Set继承自Collection接口,Map是独立接口。
一、List接口List元素有放入顺序,元素可重复,其实现类主要有:1、ArrayList:底层是通过数组实现的,随机读取数据较快。2、Vector:实现方式和ArrayList类似,但其方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是。由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。3、LinkedList:底层是通过链表实现的,插入、删除数据较快。
拓展与提高二、Set接口:Set元素无放入顺序,元素不可重复。Set接口的实现类主要有:1、HashSet:不能保证元素的排列顺序,方法不同步。集合元素可以是null,但只能放入一个null。2、LinkedHashSet:使用链表维护元素的次序,可以通过元素的添加顺序访问集合元素。3、TreeSet:是SortedSet接口的唯一实现类,可以确保集合元素处于一种树形(红-黑树)结构的排序状态。
拓展与提高三、Map接口Map提供key到value的映射,一个Map中不能包含相同的key,每个key只能映射一个value。Map接口的实现类主要是:1、HashMap:用哈希值来存取对象,可以允许有一个null键和多个null值。2、Hashtable:实现方式和HashMap类似,只是方法都是同步的,而且不允许任何null键和null值。3、LinkedHashMap:和HashMap的区别类似于ArrayList和LinkedList的区别。4、TreeMap:存入的对象是以自然或自定义方式排序,即当我们插入对象后,所有的对象在该集合里都是有序的(默认是自然升序)。拓展与提高【泛型】即“参数化类型”,如List<String>list=newArrayList<String>()语句表示只能存入String类型的对象,若试图存入Integer类型的对象就会报错。通用模式如下:List<T>list=newArrayList<T>();Set<T>set=newTreeSet<T>();Map<K,V>map=newHashMap<K,V>();其中,T,K代表引用类型,不能是基本数据类型(如int、long等)。拓展与提高总结JSP简介 JSP的执行过程
设置默认访问页
JSP的页面元素
:小脚本、表达式、声明、注释集合框架:List、Set、Map
谢谢大家观看
2.1任务1:获取管理员的登录请求任务描述为主页添加登录表单,并在获取用户的登录信息之后,根据判断条件完成相应的数据传递和页面跳转。任务描述技能目标使用request对象获取用户请求使用response对象处理响应使用请求转发和重定向控制页面跳转技能目标2.1.1JSP内置对象概述
JSP内置对象,也称为隐式对象,是由Web容器自动加载,不需要声明就可以直接在JSP页面中使用的对象。2.1.2out对象out对象是javax.servlet.jsp.JspWriter类的一个实例,主要用于向客户端浏览器输出数据。2.1.3request对象request对象是javax.servlet.http.HttpServletRequest类的一个实例。每当客户端请求一个JSP页面时,JSP引擎就会创建一个新的request对象来代表这个请求。2.1.3request对象当使用JSP默认模板创建页面时,文件开头会自动生成如下代码:<%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>这个语句用来拼装当前网页的相对路径。其中,request.getSchema()返回当前使用的协议(http);request.getServerName()返回当前页面所在的服务器名字(localhost);request.getServerPort()返回当前页面所在的Web容器使用的端口(8080);request.getContextPath()返回当前页面所在的Web应用根目录(MyApp)。2.1.3request对象basePath变量一般和base标签联合使用,<basehref="...">用来表明当前页面的相对路径所使用的基准路径。
在JSP默认模板中的<basehref="<%=basePath%>">就是用来表明当前页面无论在哪级目录下,寻找资源的基准路径都是Web应用根目录。【JSP默认模板中的basePath】2.1.3request对象【语法】<formaction="url"method="get|post"enctype="mime"target="...">…</form>【功能】用于声明表单,定义数据采集范围,<form>和</form>之间的数据将被提交到Web服务器上。【属性】
action="url"用来指定当提交表单时,向何处发送表单数据(默认提交到当前页)。
method="get|post"指明提交表单的HTTP方法,默认为get。enctype="mime"指明把表单提交给服务器时(当method值为"post")的互联网媒体形式。这个特性的缺省值是"application/x-www-form-urlencoded"。target=“...”指定结果文档的显示位置(target=“_blank”;target=“_self”;target=“_parent”;target=“_top”)【form表单】2.1.3request对象getParametergetParameterValues【获取表单数据】2.1.4response对象response对象是javax.servlet.http.HttpServletResponse类的一个实例。当服务器创建request对象时会同时创建一个用于响应当前客户端的response对象。2.1.4response对象【设置页面数据的输出类型】使用response对象的setContentType(Stringtype)方法可以设置页面的contentType(输出类型)属性值。
text/html:网页
text/plain:纯文本
application/x-msexcel:Excel文件
application/msword:Word文件2.1.4response对象【设置应答报文的首部字段值】使用response对象的setHeader(Stringname,Stringvalue)方法可以设置HTTP响应报文的首部字段和值。2.1.4response对象【重定向与请求转发】1、重定向在某些情况下,当响应客户请求时,服务器需要引导客户端重新请求另一个页面,即重定向。这就需要用到response对象的sendRedirect(Stringurl)方法。2、请求转发请求转发是一种服务器行为,客户端只需发出一次请求,服务器将该请求转发之后,会继续使用当前的request请求对象,而非新建。2.1.4response对象【URL查询字符串的应用】1、重定向中使用查询字符串如果需要在重定向的情况下将简单数据(如整数、字符串等)传递给目标页面,可以使用查询字符串(QueryString)实现。代码如下:response.sendRedirect("welcome.jsp?username="+name);由用“=”连接的键-值对组成,通过“?”连接在URL地址后面,多个键-值对可用“&”符号进行分隔,
如:response.sendRedirect("welcome.jsp?username=tom&pwd=123")。
在目标页welcome.jsp中获取查询字符串的方法和获取请求参数的方法类似,例如:Stringname=request.getParameter("username");//对应值tomStringage=request.getParameter("pwd");//对应值123其中,传给方法的参数必须和查询字符串中的键一一对应。2.1.4response对象【URL查询字符串的应用】2、超链接中使用查询字符串在实际的Web应用中,网页上会有很多超链接,点击这些超链接便会打开一个新页面,显示与之相关的信息。任务实现拓展与提高
JSP动作元素是一种特殊的标签,是JSP页面元素之一,以jsp作为前缀,可以实现多行Java代码实现的效果,它在客户端发出请求时动态执行。
<jsp:forward>可以用于实现请求转发。总结JSP内置对象概述
out对象
request对象
response对象:请求转发和重定向的区别
谢谢大家观看
2.2任务2:实现页面的访问控制任务描述实现用户主页的访问控制。在没有登录的情况下,直接访问用户主页,提示“您还没有登录!”;成功登录之后,在没有关闭浏览器的前提下,即使在一个新窗口中也能正常访问该用户主页。任务描述技能目标掌握session的原理及应用掌握include指令的应用技能目标2.2.1session对象就Web开发来说,一个会话是指在一段时间内,单个客户通过浏览器与Web服务器的一连串不中断的交互过程。2.2.1session对象
session对象是javax.servlet.http.HttpSession类的一个实例,该对象允许用户访问会话的相关信息,并绑定数据到会话中。绑定到会话中的数据可以在多次请求中持续有效。2.2.1session对象2.2.1session对象【使用session对象实现访问控制】2.2.1session对象【使用session对象实现访问控制】2.2.1session对象【会话的时效】1、会话超时
:是指两次请求的时间间隔超过了服务器允许的最大时间间隔。1)通过session对象的setMaxInactiveInterval(intinterval)方法设置2)在项目的web.xml中设置,代码段如下:<session-config><session-timeout>10</session-timeout></session-config>3)通过Web容器进行设置,在Tomcat目录/conf/web.xml中找到<session-config>元素,其中<session-timeout>元素中的30就是默认时间间隔,单位为分钟,可以对其进行修改。会话是有时效的,使会话失效的方法有两种:2.2.1session对象2、手动调用方法设置会话失效。1)invalidate()方法实现的,主要应用于用户注销的场合。2)session对象的removeAttribute(Stringkey)方法将指定对象从会话中清除,而会话仍然有效。2.2.2include指令include指令用于在JSP转译期间将HTML文件或JSP页面嵌入到另一个JSP页面,即在JSP页面出现该指令的位置处静态插入一个HTML文件或JSP页面。【语法】
<%@includefile="文件相对路径"%>
注意:include指令只有一个file属性,表示被包含的文件路径。在多个页面中实现访问控制时,出现的重复编码问题也可以通过include指令来解决。任务实现拓展与提高<jsp:include>是JSP动作元素之一,此动作允许将文件插入到正在生成的页面中。【语法】<jsp:includepage="目标文件"flush="true"/>其中,page表示要包括的页面的相对URL;flush表明在包含资源前是否刷新缓存区。该动作还可以通过如下形式进行参数的传递。<jsp:includepage="目标文件"><jsp:paramname="参数名"value="参数值"/>
</jsp:include>总结session对象 include指令
谢谢大家观看
2.3任务3:统计网站的访问次数任务描述在漫画网站主页显示网站访问量。任务描述技能目标掌握对象的作用域掌握application的原理及应用了解其他内置对象的作用技能目标2.3.1application对象
application对象从服务器的角度而言,可以视为一个所有联机用户共享的数据存储区,它是javax.servlet.ServletContext类的实例,类似于应用程序的“全局变量”,可以被应用内的所有用户共享。2.3.1application对象2.3.2对象的作用域在JSP中,提供了四种作用域,分别是page作用域、request作用域、session作用域和application作用域;它们分别由JSP内置对象pageContext、request、session和application实现。存入pageContext对象中的变量只在当前jsp页面有效;存入request对象中的变量只在当前请求周期内有效;存入session对象中的变量只在当前会话范围内有效;存入application对象中的变量在整个Web应用范围内有效。每个作用域对象存取数据的方法都是一样的:用setAttribute(Stringkey,Objectvalue)方法存数据;用ObjectgetAttribute(Stringkey)方法取数据。2.3.3其他内置对象一、page对象page对象是指向当前JSP页面程序本身的对象,有点像类中的this。page对象其实是Object类的实例,它可以使用Object类的方法,例hashCode()、toString()等。page对象在JSP程序中的应用不是很广。二、config对象Web容器在初始化时使用一个config对象向JSP页面传递配置信息,包括初始化参数(在当前Web应用的应用部署描述文件web.xml中定义)以及表示JSP页面或Servlet所属Web应用的ServletContext对象(即application对象)。三、exception对象exception对象是Throwable子类的一个实例(如java.lang.NullPointerException),仅在错误页面中可用。JSP提供了一个选项用来为JSP页面指定错误页面。每当页面引发异常时,JSP容器将自动调用错误页面。任务实现拓展与提高一、session对象JSP默认启用会话跟踪,并为每个新客户端自动实例化一个新的HttpSession对象。可以通过将页面指令中的会话属性设置为false来禁用会话跟踪,语法如下:<%@pagesession="false"%>二、URL重写URL重写就是利用get方法,在URL尾部添加额外的参数来达到会话跟踪的目的。可以在每个网址的末尾附加一些用于标识会话的数据,服务器可以将该会话标识符与其关于该会话存储的数据相关联。例如,利用/file.html?sessionid=123456这一URL,Web服务器可以识别相应的客户端。三、隐藏的表单域Web服务器可以发送隐藏的HTML表单域以及唯一的会话ID,例如:<inputtype="hidden"name="sessionid"value="123456">每次客户端浏览器发送请求时,session_id值都可以用于跟踪不同的Web浏览器。但点击常规超链接(<ahref="...">)不会产生表单提交,因此隐藏表单域不能支持常规会话跟踪。拓展与提高四、CookiesCookie是存储在客户端的文本文件,一般用于保存轨迹信息。JSP显然提供对HTTPcookie的支持。通常有三个步骤来识别回头客:1)服务器脚本发送一系列cookie至浏览器。比如名字,年龄,ID号码等等。2)浏览器在本地机中存储这些信息,以备不时之需。3)当下一次浏览器发送任何请求至服务器时,它会同时将这些cookie信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。拓展与提高拓展与提高在JSP中使用cookie,包含以下几个步骤:1)创建一个Cookie对象,调用Cookie的构造函数,使用一个cookie名称和值做参数。Cookiecookie=newCookie("key","value");2)设置有效期,调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。例如:cookie.setMaxAge(60*60*24);3)将cookie发送至HTTP响应头中,调用response.addCookie()函数来向HTTP响应头中添加cookie。response.addCookie(cookie);4)读取cookieCookie[]cookies=request.getCookies();拓展与提高如果想要删除一个cookie,按照下面给的步骤即可:
获取一个已经存在的cookie然后存储在Cookie对象中。
将cookie的有效期设置为0。
将这个cookie重新添加进响应头中。拓展与提高总结application对象对象的作用域 其他内置对象
谢谢大家观看
3.1任务1:实现管理员的登录功能任务描述运用JDBC组件实现管理员的登录功能;并在登录成功后,把管理员信息存入session对象中;然后,从session中获取真实姓名,显示在管理员主页上。任务描述技能目标搭建MySQL数据库开发环境掌握JDBC访问数据库的流程使用Connection组件连接MySQL数据库使用Statement组件查询数据使用PreparedStatement组件优化查询代码技能目标3.1.1搭建MySQL数据库开发环境一、安装MySQL1、安装MySQL服务器3.1.1搭建MySQL数据库开发环境一、安装MySQL1、安装MySQL服务器3.1.1搭建MySQL数据库开发环境一、安装MySQL1、安装MySQL服务器3.1.1搭建MySQL数据库开发环境一、安装MySQL2、安装MySQL客户端NavicatforMySQL3.1.1搭建MySQL数据库开发环境二、导入漫画网站的数据资源3.1.2JDBC技术简介JDBC(JavaDataBaseConnectivity,Java数据库连接)是Java访问数据库的解决方案,是一种用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface,应用程序编程接口),它为Java应用程序与各种不同的数据库进行对话提供了统一的访问模式。3.1.2JDBC技术简介JDBC提供的类和接口主要位于JDK的java.sql包中(之后的扩展部分位于javax.sql包中),其中比较常用的组件有以下几个:1、DriverManager类
驱动管理器,主要负责加载各种不同的数据库驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。其常用方法如下:registerDriver(driver);//注册驱动对象
ConnectiongetConnection(url,user,password);//获取连接对象
2、Driver接口驱动程序接口,所有具体的数据库系统厂商要必须实现此接口,形成自己特有的驱动程序包。装载驱动的语句是Class.forName("驱动类")。例如,装置MySQL驱动的语句如下:Class.forName("com.mysql.jdbc.Driver");3.1.2JDBC技术简介3、Connection接口
负责应用程序和数据库的连接,在加载驱动之后,使用url、username、password三个参数,创建和具体数据库系统的连接实例。例如,获取MySQL连接对象的语句如下:Stringurl="jdbc:mysql://localhost:3306/cartoonDB";Stringuser="root",pwd="123456";Connectionconn=DriverManager.getConnection(url,user,pwd);其中,数据库的URL一般由协议名+数据库系统标识+IP地址(域名)+端口+数据库名称组成,用户名和密码是指登录数据库时所使用的用户名和密码。
4、Statement接口用于执行静态的sql语句(单次执行),通过Connection对象创建实例。例如,Statementstmt=conn.createStatement();//创建Statement对象3.1.2JDBC技术简介5、PreparedStatement接口是Statement接口的子接口,用于执行预编译sql语句,一般包含动态参数。6、CallableStatement接口是PreparedStatement接口的子接口,用于执行存储过程。7、ResultSet接口执行查询SQL语句后返回的结果集,由ResultSet接口接收。常见的处理方式是遍历或存在性判断(如登录功能)。例如,Stringsql="select*fromadmin";ResultSetrs=stmt.executeQuery(sql);while(rs.next()){out.println(rs.getInt("id")+","+rs.getString("username"));}8、SQLException类代表在数据库连接的建立、关闭及SQL语句的执行过程中发生的异常。3.1.3JDBC实现数据查询功能可以把JDBC访问数据库的基本流程总结如下:3.1.3JDBC实现数据查询功能MySQL官网(/products/connector/)下载JDBC驱动包。把驱动包放在项目目录/WEB-INF/lib下,并将其添加到运行时环境中3.1.3JDBC实现数据查询功能【关键代码】<%@pageimport="java.sql.*"%><!--导入JDBC组件所在的包--><%//准备相关数据Stringdriver="com.mysql.jdbc.Driver";//MySQL-JDBC驱动路径Stringurl="jdbc:mysql://localhost:3306/cartoonDB";
Stringuser="root";//数据库登录账号Stringpwd="123456";//数据库登录密码Stringsql="select*fromadmin";//需要执行的SQL语句//第一步:加载驱动Class.forName(driver);//第二步:获取连接Connectionconn=DriverManager.getConnection(url,user,pwd);//第三步:创建语句对象Statementstmt=conn.createStatement();//第四步:执行SQL语句,并返回结果集
ResultSetrs=stmt.executeQuery(sql);//第五步:处理结果集数据(遍历并打印所有数据)。
while(rs.next()){out.print(rs.getInt("id")+" "+rs.getString("username")+" "+rs.getString("truename")+"<br>");}//第六步:关闭连接,释放资源。conn.close();%>3.1.4优化数据查询代码3.1.4优化数据查询代码任务实现任务实现拓展与提高把输入的SQL片段和原有的SQL语句进行拼接,得到的完整语句是这样的:select*fromadminwhereusername='xx'or1=1;#'anduserpwd=''拓展与提高最有效的方法是使用PreparedStatement接口,它用于执行预编译sql语句,可以包含动态参数。该接口在使用方法如下:1、使用Connection的prepareStatement(Stringsql)进行创建,即创建它时就让它与特定的SQL模板绑定,同时用问号来标识动态参数。例如:Stringsql=“select*fromAdminwhereusername=?anduserpwd=?”;PreparedStatementpstmt=con.prepareStatement(sql);2、调用PreparedStatement的setXXX()方法为sql命令设置值。例如:pstmt.setString(1,“admin1”);//给第1个问号位置上的参数赋值3、调用executeUpdate()或executeQuery()方法执行最终的SQL语句。注意,这两个方法没有参数。拓展与提高可以将任务代码中的数据库访问方法,用PreparedStatement进行优化,来防止SQL攻击,具体改法如下:
Stringsql="select*fromadminwhereusername=?anduserpwd=?";
……
Class.forName(driver); Connectionconn=DriverManager.getConnection(url,user,dbPwd);
PreparedStatementpstmt=conn.prepareStatement(sql); pstmt.setString(1,name);//把方法的参数传给SQL语句动态参数 pstmt.setString(2,pwd); ResultSetrs=pstmt.executeQuery();
……总结搭建MySQL数据库开发环境 JDBC技术简介JDBC实现数据查询功能 优化数据查询代码
谢谢大家观看
3.2任务2:用简单的三层架构实现漫画类型的添加任务描述运用三层架构设计模式,在添加类型之前进行存在性验证,并进行相应的提示,进而实现漫画类型的添加功能。任务描述技能目标使用PreparedStatement组件添加数据运用分层模式优化数据库访问代码在JSP中使用JavaBean技能目标3.2.1基于PreparedStatement实现数据的添加PreparedStatement组件明显的优势:作为Statement的子接口,PreparedStatement继承了Statement的所有功能;PreparedStatement的sql语句中使用?占位符,可以传递动态参数,代码可读性更高;Statement每次执行sql语句,相关数据库都要进行sql语句的编译;PreparedStatement是预编译的,对于多次重复执行的sql语句,使用PreparedStament的代码执行效率和可维护性更高;PreparedStatement对象的参数被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配,进而可以防止sql注入,提高了安全性。3.2.1基于PreparedStatement实现数据的添加一、存在性判断1、导入MySQL驱动包后,创建漫画类型实体类(CartoonType)。3.2.1基于PreparedStatement实现数据的添加一、存在性判断2、创建漫画类型数据访问类3.2.1基于PreparedStatement实现数据的添加一、存在性判断3、存在性验证3.2.1基于PreparedStatement实现数据的添加二、实现数据添加功能1、编写数据插入方法3.2.1基于PreparedStatement实现数据的添加二、实现数据添加功能2、数据插入验证<%@pagelanguage="java"pageEncoding="utf-8"import="com.ct.dao.*,com.ct.entity.*"%><%request.setCharacterEncoding("utf-8");//设置编码Stringtypename=request.getParameter("typename");CartoonTypeDaoctd=newCartoonTypeDao();//构建数据访问对象
Stringmess="";//提示内容if(ctd.isTypeExist(typename)){//返回true,表示已存在mess="该类型已经存在!";}else{//进行数据插入操作 intflag=ctd.AddType(typename);//调用类型添加方法
if(flag>0){//返回值大于0,表示添加成功
mess="类型添加成功!"; }else{ mess="类型添加失败!"; }}out.println("<scriptcharset='utf-8'>");out.println("alert('"+mess+"');");out.println("</script>");out.print("<script>window.location.href='addType.jsp';</script>");%>3.2.2软件设计分层模式一、三层架构3.2.2软件设计分层模式二、分层原则1、上一层依赖其下一层、依赖关系不得跨层上一层调用下一层所得到的执行结果完全取决于下一层的代码,上一层无法控制。2、下一层不能调用上一层上一层只能单向调用下一层的功能。下一层为上一层服务,而上一层不能为下一层服务。3、下一层不能依赖上一层下一层的代码实现决定了上一层获得的内容,所以说上层依赖下一层。从另一个角度来说,上一层不管如何发生改变,对于其调用的下一层业务是不会发生变化的,即对于下一层来说,上一层的改变不会对其产生任何影响。4、在上一层中不能出现下一层的概念使用分层架构的一个优点是在系统中的各个功能分工明确,在某一层中不会出现其下一层的任何内容。任务实现一、提取业务逻辑层1、新建业务逻辑包,并创建业务逻辑类任务实现一、提取业务逻辑层2、添加业务逻辑方法importcom.ct.dao.CartoonTypeDao;publicclassCartoonTypeBiz{CartoonTypeDaoctd=newCartoonTypeDao();publicStringaddType(Stringtypename)//定义业务逻辑方法{Stringmess="";//表示返回的消息 if(ctd.isTypeExist(typename)){ mess="该类型已经存在!"; }else{
//进行数据插入操作intflag=ctd.addType(typename);//调用类型添加方法
if(flag>0){//返回值大于0,表示添加成功
mess="类型添加成功!";}else{
mess="类型添加失败!";}}returnmess;
}
}任务实现二、改写JSP代码<%@pageimport=".*,com.ct.entity.*"%><!--导入业务逻辑包--><%request.setCharacterEncoding("utf-8");//设置编码
Stringtypename=request.getParameter("typename");CartoonTypeBizctb=newCartoonTypeBiz();//构建业务逻辑对象
Stringmess="";//提示内容
mess=ctb.addType(typename);//调用业务逻辑方法
out.println("<scriptcharset='utf-8'>");out.println("alert('"+mess+"');");out.println("</script>");out.print("<script>window.location.href='addType.jsp';</script>");%>
拓展与提高拓展与提高1、JNDIJNDI的全称是Java命名和目录接口(JavaNamingandDirectoryInterface),可以通过名称将资源与服务进行关联,进而在更大范围或不同应用之间共享资源。如何在Tomcat中,发布能供所有Web应用程序使用的数据呢?方法如下: 发布数据:修改Tomcat\conf\context.xml文件,例如:<Context><!--Environment元素用于配置环境条目资源--><Environmentname="myJD"value="helloJNDI"type="java.lang.String"/></Context>
获取数据:使用Context实例的lookup()方法进行查找Contextctx=newInitialContext();//javax.naming.Context提供了查找JNDI的接口Stringdata=(String)ctx.lookup("java:comp/env/myJD");//JavaEE应用中所有JNDI命名空间中的资源名,都以java:comp/env/为前缀拓展与提高2、javax.sql.DataSource接口拓展与提高使用连接池实现数据库连接的步骤:1、配置context.xml文件
在Context下,配置<Resource>元素中和连接池相关的参数,具体内容如下:<Context><Resourcename="jdbc/ct"auth="Container“
type="javax.sql.DataSource"maxActive="100"maxIdle="30"
maxWait="10000"username="root"password="123456"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://:3306/cartoonDB?
useUnicode=true&characterEncoding=utf-8"/></Context>拓展与提高2、把MySQL数据库驱动jar文件,添加到Tomcat的lib目录中。3、获取连接对象编写Java代码时,需要先导入必须的几个组件包:importjavax.naming.Context;importjavax.naming.InitialContext;importjavax.naming.NamingException;importjavax.sql.DataSource;然后再查找数据源并获取数据库连接对象,例如:Contextctx=newInitialContext();//初始化上下文DataSourceds=(DataSource)ctx.lookup("java:comp/env/jdbc/ct");//获取与逻辑名相关联的数据源对象Connectionconn=ds.getConnection();//从数据源获取连接对象总结基于PreparedStatement实现数据的添加软件设计分层模式
谢谢大家观看
3.3任务3:优化三层架构代码任务描述在数据访问层抽取可复用代码块,并添加到公共父类BaseDao中;然后,基于接口对数据访问层和业务逻辑层进行细化。任务描述技能目标使用BaseDao减少代码冗余基于接口优化三层架构技能目标3.3.1BaseDao的抽取3.3.1BaseDao的抽取publicConnectiongetConn()throwsClassNotFoundException,SQLException{Class.forName(DRIVER);
Connectionconn=DriverManager.getConnection(URL,DBUSER,DBPWD);//获得数据库连接returnconn;}publicvoidc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年新疆维吾尔自治区重点学校小升初入学分班考试语文考试试题及答案
- 2026年金融市场基础知识证券从业资格考试真题模拟卷
- 2026年事业单位招聘考试法律知识全真模拟试卷
- 2026年事业单位招聘考试行政职业能力测验冲刺押题卷
- 2026年事业单位考试《教师职业道德》培训试卷(含解析)
- 2026农村生态面试题及答案
- 2026强度工程师面试题及答案
- 2026驱动开发面试题及答案
- 2026日报社面试题目及答案
- 2026三校生面试题目及答案
- 2026云南红河州弥勒市产业发展集团有限公司招聘16人考试参考题库及答案详解
- 四川省凉山州2024-2025学年高二下学期期末考试 数学
- 工业机器人系统操作员职业技能等级认考试复习定题(附答案)
- 2026年高考全国2卷数学高考真题含答案
- 2026学年仁寿县四年级数学下学期期末试题含答案解析
- 【2026】超星尔雅学习通《乡村振兴的实践探索(北京大学)》章节测试及答案
- 2026年中小学劳动教师招聘笔试模拟题
- 2026湖南省中考英语作文预测六大主题12篇范文
- 2026年抗菌药物临床应用培训试题及答案
- 山姆会员商店供应商管理
- 2026广东广州市越秀区建设街招聘辅助人员1人备考题库含答案详解(基础题)
评论
0/150
提交评论