Java-Web-程序设计模块6_第1页
Java-Web-程序设计模块6_第2页
Java-Web-程序设计模块6_第3页
Java-Web-程序设计模块6_第4页
Java-Web-程序设计模块6_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

模块6JavaWeb高级开发JavaWeb程序设计“十二五”职业教育国家规划教材配套资源目录项目17利用工具创建并部署Servlet项目18用Servlet实现用户注册项目19用Servlet实现用户登录项目20用户权限控制项目21用EL遍历数据项目22用EL简化JSP开发小结习题项目17利用工具创建并部署Servlet17.1项目描述与实现(1)描述使用Eclipse创建简单的HelloServlet程序项目17利用工具创建并部署Servlet1.1项目描述与实现(2)实现过程创建Servlet配置Servlet项目17利用工具创建并部署Servlet17.2新知识点-JavaServlet概述JavaServlet简介Servlet是一个执行在服务器端的JavaClass文件,载入前必须先将Servlet程序代码编译成.class文件,然后将此class文件放在ServletEngline路径下。ServletAPI使用javax.servlet和javax.servlet.http两个包的接口类。JavaServlet工作原理:当服务器上的一个JSP网页被第一次请求执行时,服务器上的JSP引擎首先将JSP页面文件转译成一个Java文件(即Servlet类),再将这个Java文件编译成class字节码文件,然后执行以响应客户的请求,当这个JSP页面再次被请求执行时,JSP引擎将直接执行这个字节码文件来响应客户,响应速度比第一次执行快很多。项目17利用工具创建并部署Servlet17.2新知识点-Servlet的代码结构publicclassDemoServletextendsHttpServlet{ /**初始化方法*/ publicvoidinit(ServletConfigconfig)throwsServletException{ } /**销毁方法*/ publicvoiddestroy(){ } /**处理HTTPGET请求*/ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ } /**处理HTTPPOST请求*/ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ }}项目17利用工具创建并部署Servlet17.2新知识点-JavaServlet功能Servlet是使用JavaServlet应用程序设计接口及相关类和方法的Java程序。它在Web服务器上或应用服务器上运行并扩展了该服务器的能力。JavaServlet对于Web服务器就似乎JavaApplet对于Web浏览器。Applet装入Web浏览器并在Web浏览器内执行,而Servlet则是装入Web服务器并在Web服务器内执行。JavaServletAPI定义了Servlet和服务器之间的一个标准接口,这使得Servlet具有跨服务器平台的特性。Servlet的功能涉及范围很广,Servlet主要完成如下功能:创建并返回一个包含基于客户请求性质的动态内容的完整的Html页面。创建可嵌入到现有HTML页面中的一部分HTML页面(HTML片段)。与其他服务器资源(文件、数据库、Applet、Java应用程序等)进行通信。用多个客户机处理连接,接受多个客户机的输入,并将结果广播到多个客户机上。例如,Servlet可以是多参与者的游戏服务器。将定制的处理提供给所有服务器的标准例行程序。例如,Servlet可以修改如何认证用户。项目17利用工具创建并部署Servlet17.3扩展——JavaServlet版本历史

Servlet1.0版本由SunMicrosystems公司创建于1997年,从2.3版本开始,JavaServlet由JCP组织开发,JCP是JavaCommunityProcess的缩写,一个由全世界的Java开发人员和获得许可的人员组成的开放性组织,其对Java技术规范、参考实现和技术兼容性包进行开发和修订。JSR53(JavaSpecificationRequest,Java规范请求,指向JCP提出增加一个标准化技术规范请求)定义了Servlet2.3和JSP1.2规范,JSR154提出了Servlet2.4和2.5规范,JSR315和JSR340分别提出了Servlet3.0和Servlet3.1规范,直到2017年10月,推出了现行Servlet4.0规范,即JSR369。JavaServletAPI版本历史见下表。JavaServlet版本发布时间支持平台主要特性Servlet4.02017JavaEE8支持HTTP/2协议Servlet3.12013JavaEE7增加对HTTP协议升级机制的支持,非阻塞的异步IO及安全相关的改进Servlet3.02009JavaEE6,JavaSE6支持插件,异步Servlet,安全性,文件上传和简化web.xml的配置Servlet2.52005JavaEE5,JavaSE5需要

JavaSE5,支持

annotation类型Servlet2.42003J2EE1.4,J2SE1.3web.xml配置文件使用了XMLSchemaServlet2.32001J2EE1.3,J2SE1.2增加了过滤器Servlet2.21999J2EE1.2,J2SE1.2成为J2EE的一部分,在.war文件中成为独立的Web应用程序Servlet2.11998

首个官方规范,增加了RequestDispatcher,ServletContextServlet1.01997

由Sun公司创建Servlet项目18用Servlet实现用户注册18.1项目描述与实现(1)描述利用Dreamweaver、Eclipse搭配编写项目实现用户注册功能,注册信息包括用户名、密码和邮件地址,使用JSP和Servlet结合完成信息注册并保存在数据库中,程序在Eclipse中编写,最后在Eclipse中测试运行。项目18用Servlet实现用户注册18.1项目描述与实现(2)实现1.在数据库中创建表使用MySQL数据库,打开MySQL命令行,在数据库中创建users用户信息表,创建表SQL语句如下。CREATETABLE`javaweb`.`users`(`id`INTNOTNULLAUTO_INCREMENT,`uname`VARCHAR(25)NULL,`upwd`VARCHAR(45)NULL,`email`VARCHAR(45)NULL,PRIMARYKEY(`id`));2.创建表单页面3.创建Servlet4.注意事项

项目18用Servlet实现用户注册18.1项目描述与实现(2)实现1.在数据库中创建表2.创建表单页面

在Eclipse中创建exam18_reg.jsp,文件内容见程序6-3。3.创建Servlet

在Eclipse中添加Servlet,其中包名chapter6,类名为:RegistToDb,仅选择doPost方法,在doPost方法中输入代码,详细代码见程序6-4所示。4.注意事项在这里要注意,如果是Servlet3.0以上版本,需要在RegistToDb.java文件中找到@WebServlet("/chapter6/RegistToDb")修改Servlet访问路径,这里的路径为/chapter6/RegistToDb。如果是3.0以下版本,则需要在web.xml文件中修改<servlet-mapping>节中的<url-pattern>,修改为/chapter6/RegistToDb。项目18用Servlet实现用户注册18.2新知识点-Servlet的工作过程Servlet为客户端和服务器端信息的处理提供了一种“请求/应答”模式机制。同时,Java的ServletAPI为客户端和服务器之间的请求和应答信息定义了标准接口。图6-8描述了一个Servlet的工作过程:客户端发送请求给服务器端;服务器将请求信息发送至Servlet。Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求。服务器将应答返回给客户端。

图Servlet工作过程项目18用Servlet实现用户注册18.2新知识点-Servlet的生命周期一个Servlet是javax.servlet.http包中HttpServlet类的子类,类似一个JavaApplet是java.apple.Applet类似,只不过Servlet运行在服务器端而已,需要支持Servlet的服务器完成对Servlet的初始化,Servlet生命周期如下图:图6-9Servlet生命周期项目18用Servlet实现用户注册18.2新知识点-Servlet的生命周期Servlet的生命周期由Servlet容器来控制,主要有初始化、运行和销毁三个过程来完成,(1)初始化Servlet,Servlet第一次被请求加载时,服务器创建一个Servlet对象,Servlet容器调用Servlet对象的init方法进行初始化。(2)运行Servlet,创建的Servlet对象根据客户端的请求,调用Service方法响应客户端的请求。(3)销毁Servlet,当Web应用被终止时,Servlet容器会先调用Servlet对象的destrory方法,然后再销毁Servlet对象,释放Servlet对象占用的资源。在Servlet生命周期中,Servlet的初始化和和销毁阶段只会发生一次,而service方法执行的次数则取决于客户端的请求次数。项目18用Servlet实现用户注册18.3扩展-JavaServlet接口1.Servlet接口

Servlet框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。在Servlet接口中定义了5个方法。(1)init()方法(2)service()方法(3)doGet()方法

(4)doPost()方法

(5)destroy()方法当服务器调用Servlet的Service()、doGet()和doPost()等与处理请求相关的方法时,均需要“请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个通信途径。项目18用Servlet实现用户注册18.3扩展-JavaServlet接口2.ServletRequest接口

ServletRequest接口封装了客户端请求的细节。它与协议无关,并有一个指定HTTP的子接口。ServletRequest主要处理:找到客户端的主机名和IP地址检索请求参数取得和设置属性取得输入和输出流项目18用Servlet实现用户注册18.3扩展-JavaServlet接口3.HttpServletRequest接口HttpServletRequest接口主要处理:读取和写入HTTP头标取得和设置cookies取得路径信息标识HTTP会话。项目18用Servlet实现用户注册18.3扩展-JavaServlet接口4.ServletResponse接口ServletResponse对象将一个Servlet生成的结果传到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由Servlet引擎创建。5.HttpServletResponse接口

HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web页面的HTTP会话ID进行解码。6.ServletContext接口一个Servlet上下文是Servlet引擎提供用来服务于Web应用的接口,一个Web应用只有一个上下文。Servlet上下文的名字(即它所属的Web应用的名字)是一个唯一映射到文件系统的目录。7.HttpSession接口HttpSession类似于哈希表的接口,它提供了setAttribute()和getAttribute()方法存储和检索对象。HttpSession提供了一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。Servlet引擎查找适当的会话对象,并使之对当前请求可用。项目19用Servlet实现用户登录19.1项目描述与实现(1)项目描述:设计一个包含用户名和密码的登录界面,实现注册用户的登录验证。图用户登录图用户登录成功项目19用Servlet实现用户登录19.1项目描述与实现(1)项目描述:设计一个包含用户名和密码的登录界面,实现注册用户的登录验证。图用户未登录直接访问exam19_loginok.jsp页面项目19用Servlet实现用户登录19.1项目描述与实现(2)实现过程1.制作登录界面2.创建Servlet项目19用Servlet实现用户登录19.1项目描述与实现(2)实现过程1.制作登录界面2.创建Servlet3.调试运行程序6-6UserLogin.java部分代码try{ if(rs.next()){ dbupwd=rs.getString("upwd"); if(upwd.equals(dbupwd)){ HttpSessionsession=request.getSession(); session.setAttribute(“uid”,rs.getString(“id”)); session.setAttribute(“uname”,uname); response.sendRedirect(“exam19_loginok.jsp”);//关闭数据库

db.Release(); }else{ out.println("<script>alert(\"用户名或密码错误\");window.history.back();</script>"); return; }}else{ out.println("<script>alert(\"用户名或密码错误\");window.history.back();</script>"); return; }}catch(SQLExceptione){ .printStackTrace();}代码分析:用户登录为用户名和用户密码的验证,主要是在数据库中查找对应的记录,此处为“SELECTidFROMusersWHERE…”,SQL语句的WHERE子句查找与接收参数相同的记录。数据库使用,这里不再介绍,详情见前面章节。当记录不存在,提示用户名或密码错误;当数据库记录验证通过后,将进行页面跳转,这里使用response.sendRedirect(“exam19_loginok.jsp”)进行页面跳转,整个登录过程结束。项目19用Servlet实现用户登录19.2新知识点-Servlet中会话存储、重定向到JSP页面会话跟踪ServletAPI提供了一种简单而又高效的模型来跟踪会话信息。换句话说,一次会话是从你打开浏览器开始到你关闭浏览器结束。会话跟踪的第一个障碍就是如何惟一标识每一个客户会话。这只能通过为每一个客户分配一个某种标识,并将这些标识保存在客户端上,以后客户端发给服务器的每一个HTML请求都提供这些标识来实现。

Servlet中使用HttpServletRequest对象的getSession(booleancreate)方法来取得当前的用户会话,其参数决定了如果会话尚不存在,是否创建一个新会话。

另外,ServletAPI规范上指出:“为了确保会话被正确维护,Servlet的开发都必须在提交响应之前调用getSession()方法。”这正是说,在向响应的输出流中写入之前,一定要调用getSession()方法。项目19用Servlet实现用户登录19.2新知识点-Servlet中会话存储、重定向到JSP页面Servlet中会话存储

Web应用是基于HTTP协议的,而HTTP协议恰恰是一种无状态协议,为解决这个矛盾,Session由此产生。既然Web应用并不了解有关同一用户以前请求的信息,那么解决这个问题的一个办法是使用Servlet/JSP容器提供的会话跟踪功能,ServletAPI规范定义了一个简单的HttpSession接口,通过它我们可以方便地实现会话跟踪。

HttpSession接口提供了存储和返回标准会话属性的方法。标准会话属性如会话标识符、应用数据等,都以“名字-值”对的形式保存。简而言之,HttpSession接口提供了一种把对象保存到内存、在同一用户的后继请求中提取这些对象的标准办法。在会话中保存数据的方法是setAttribute(Strings,Objecto),从会话提取原来所保存对象的方法是getAttribute(Strings)。在客户端,浏览器保存会话标识符,并在每一个后继请求中把这个会话标识符发送给服务器。会话标识符告诉JSP容器当前请求不是用户发出的第一个请求,服务器以前已经为该用户创建了HttpSession对象。此时,JSP容器不再为用户创建新的HttpSession对象,而是寻找具有相同会话标识符的HttpSession对象,然后建立该HttpSession对象和当前请求的关联。项目19用Servlet实现用户登录19.2新知识点-Servlet中会话存储、重定向到JSP页面Servlet重定向到JSP页面

重定向技术可以分为两类,一类是客户端重定向,一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头,或者写JavaScript脚本实现。

(1)RequestDispatcher.forward()该方法是在服务器端起作用,当使用forward()时,ServletEngine传递HTTP请求从当前的Servlet或JSP到另外一个Servlet、JSP或普通HTML文件.

(2)response.sendRedirect()该方法是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件。重定向后在浏览器地址栏上会出现重定向页面的URL。项目19用Servlet实现用户登录19.3扩展-JavaServlet与JSP的共享对象JavaWeb应用程序有四个对象存放共享对象。这些共享对象存放在那里,以便存放者或者其它程序代码日后使用。这四个对象分别是页面、请求、会话和应用程序,它们都是以数据结构键/值对的形式保存的。1.在JSP中访问共享对象项目19用Servlet实现用户登录19.3扩展-JavaServlet与JSP的共享对象JavaWeb应用程序有四个对象存放共享对象。这些共享对象存放在那里,以便存放者或者其它程序代码日后使用。这四个对象分别是页面、请求、会话和应用程序,它们都是以数据结构键/值对的形式保存的。2.在Servlet中访问共享对象项目20访问权限控制20.1项目描述与实现(1)项目描述:完成系统某些模块的受限访问,编写并配置进入后台管理系统的权限验证过滤器,没有登录,则不能访问该过滤器控制的文件或文件夹。图未登录访问后台管理页面时的提示信息图系统登录页面项目20访问权限控制20.1项目描述与实现(2)实现过程1.创建过滤器类AdminLoginFilter,放在src目录下的chapter6.filter包中程序6-7FilterAdminLogin.java部分代码@WebFilter("/chapter6/admin/*")publicclassAdminLoginFilterimplementsFilter{ publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{ HttpSessionsession=((HttpServletRequest)request).getSession(); AdminUsercheckLoginUser=(AdminUser)session.getAttribute("adminUser"); if(checkLoginUser!=null){ if(checkLoginUser.isLogin()){ chain.doFilter(request,response); }else{ outPrintLogin(response); } }else{ outPrintLogin(response); } }代码分析:程序6-7为对进入后台管理系统的权限验证过滤器,没有登录,则不能访问该过滤器控制的文件或文件夹。其中,doFilter()方法为过滤器主方法,在此方法中检查session中是否存在名为“adminUser”的AdminUser对象,并检查该对象是否处于已登录状态,若存在且该对象状态为已登录,说明是一个正常登录的用户,过滤器不拦截请求,调用chain.doFilter()方法继续执行;否则,为非法访问,过滤器拦截请求,输出错误。项目20访问权限控制20.1项目描述与实现(2)实现过程1.创建过滤器类FilterAdminLogin,放在src目录下的chapter6.filter包中;2.配置过滤器。Servlet3.0及之后的版本提供了@WebFilter注解对过滤器进行配置。因此本项目既可以通过如程序6-7中所示的方式@WebFilter("/chapter6/admin/*")对该过滤器进行映射配置。也可以使用传统的方式在web.xml文件中进行配置项目20访问权限控制20.1项目描述与实现(2)实现过程1.创建过滤器类FilterAdminLogin,放在src目录下的chapter6.filter包中;2.配置过滤器;3.在WebContent的chapter6目录下创建admin目录,在admin目录创建后台主页exam20_index.jsp;程序6-9后台主页exam20_index.jsp代码<bodyonLoad="selectLeftList('1');selectArticleList('articleList','','');"><divid="container"><divid="contain"><divid="lefts"></div><divid="rights"><divid="account"></div></div></div></div><iframename='message'id="message"style='display:none'></iframe></body></html>代码分析:该主页的内容为项目29中的文章管理系统的后台管理主页,其主体内容通过"selectLeftList('1');selectArticleList('articleList','','');"这两个JavaScript函数来完成加载,在本任务中读者不用关心这个主页的具体内容,只需关注过滤器的实现即可。项目20访问权限控制20.1项目描述与实现(2)实现过程1.创建过滤器类FilterAdminLogin,放在src目录下的chapter6.filter包中;2.在项目的web.xml文件中配置过滤器;3.在WebContent的chapter6目录下创建admin目录,在admin目录创建后台主页exam20_index.jsp;4.在chapter6目录下创建login目录,在login目录下创建登录页面exam20_adminlogin.html。项目20访问权限控制20.2新知识点-FilterFilterFilter概念:Filter(过滤器)是在源数据和目的数据之间起过滤作用的中间组件。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和资源之间的请求与响应信息,并对这些信息进行过滤。过滤器在Web开发中的一些主要应用如下:

①对用户请求进行统一认证;②对用户的访问请求进行记录和审核;③对用户发送的数据进行过滤或替换;④转换图像格式;⑤对响应内容进行压缩,减少传输量;⑥对请求或响应进行加解密处理;⑦触发资源访问事件。项目20访问权限控制20.2新知识点-FilterFilterFilter实现:

在javax.serlvet和javax.servlet.http包中提供了开发过滤器的相关API,其中过滤器类要实现的接口是javax.servlet.Filter,该接口的具体使用方法见本节后半部分。过滤器的部署

在实现一个过滤器后,需要在部署描述文件web.xml中对过滤器进行配置,这是通过<filter>和<filter-mapping>元素来完成的。当用户直接访问index.jsp页面,或者通过RequestDispatcher的forward()方法访问时,容器就会调用testFilter过滤器。程序6-11<filter>元素配置例子<filter><filter-name>testFitler</filter-name><filter-class>org.test.TestFiter</filter-class><init-param><param-name>word_file</param-name><param-value>/WEB-INF/word.txt</param-value></init-param></filter>程序6-12<filter-mapping>元素配置例子<filter-mapping><filter-name>testFilter</filter-name><url-pattern>/index.jsp</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping>项目20访问权限控制20.2新知识点-Filter过滤器的API

与过滤器开发相关的接口和类都包含在javax.serlvet和javax.servlet.http包中,接口和类主要有:javax.servlet.Filter接口、javax.servlet.FilterConfig接口、javax.servlet.FilterChain接口、javax.servlet.ServletRequestWrapper类、javax.servlet.ServletResponseWrapper类、javax.servlet.http.HttpServletRequestWrapper类、javax.servlet.http.HttpServletResponseWrapper类。(1)Filter接口:Filter接口定义了以下三个方法:①defaultpublicvoidinit(FilterConfigfilterConfig)throwsServletException②publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsjava.io.IOException,ServletException③defaultpublicvoiddestroy()项目20访问权限控制20.2新知识点-Filter过滤器的APIFilter接口:FilterConfig接口

javax.servlet.ServletConfig接口,用于在过滤器初始化时,向其传递信息。FilterConfig接口由容器实现,容器将其作为参数传入过滤器对象的init()方法中。在FilterConfig接口中,定义了四个方法。①publicjava.lang.StringgetFilterName():得到描述符中指定的过滤器的名字。②publicjava.lang.StringgetInitParameter(java.lang.Stringname):返回在部署描述中指定的名字为name的初始化参数的值,如果不存在,则返回null。③publicjava.util.Enumeration<String>getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。④publicServletContextgetServletContext():返回Servlet上下文对象的引用。项目20访问权限控制20.2新知识点-Filter过滤器的APIFilter接口:FilterConfig接口FilterChain接口FilterChain接口由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中。过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器,如果该过滤器是链中的最后一个过滤器,那么将调用目标资源。FilterChain接口只有一个方法,即publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse)throwsjava.io.IOException:调用该方法将使过滤器链中的下一个过滤器被调用,如果是最后一个过滤器,则会调用目标资源。项目20访问权限控制20.2新知识点-Filter处理字符编码的过滤器

编写一个处理中文乱码的过滤器,该过滤器能够将所有请求参数(包括get和post方式提交的参数)的编码方式由“ISO-8859-1”改为“UTF-8”编码。实现:(1)根据Decorator(装修者)设计模式,对HttpServletRequest对象进行进一步装饰,在该类中改变其getParameter(Stringname)方法的行为特性。即:自定义一个MyServletRequest,该类继承HttpServletRequestWrapper包装类。项目20访问权限控制20.2新知识点-Filter处理字符编码的过滤器实现1:自定义一个MyServletRequest,该类继承HttpServletRequestWrapper包装类。程序6-14ServletRequest.javaclassMyServletRequestextendsHttpServletRequestWrapper{//要装饰的对象HttpServletRequestmyrequest;publicMyServletRequest(HttpServletRequestrequest){super(request);this.myrequest=request;}//要增强的功能方法publicStringgetParameter(Stringname){//使用被装饰的成员,获取数据Stringvalue=this.myrequest.getParameter(name);if(value==null)returnnull;//将数据转码后返回try{value=newString(value.getBytes("ISO8859-1"),"UTF-8");}catch(UnsupportedEncodingExceptione){e.printStackTrace();}returnvalue;}}项目20访问权限控制20.2新知识点-Filter处理字符编码的过滤器实现2:编写过滤器类Encoding,在该类的doFilter方法中,在使用FilterChain对象将请求传递至下一个过滤器或调用目标资源前,将原request对象进行装饰。程序6-15Encoding.javapublicclassEncodingimplementsFilter{publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{arg2.doFilter(newMyServletRequest((HttpServletRequest)request),arg1);}}项目20访问权限控制20.3扩展-Servlet3.0新特性Servlet3.0在Servlet2.5版本的基础上提供了若干新特性用于简化Web应用的开发和部署。其中有几项特性的引入获得了Java开发人员的赞誉:(1)异步处理支持(2)新增的注解支持(3)可插性支持右图对新增的注解支持@WebFilter作进一步的介绍

表6-4@WebFilter常用属性项目21用EL遍历数据21.1项目描述与实现(1)描述使用EL配合JSTL标签遍历输出JSP容器中的一个Map中的数据。图6-18使用EL访问JSP容器中的数据项目21用EL遍历数据21.1项目描述与实现(2)实现过程引入JSTL库文件

转到tomcat目录下,找到\webapps\examples\WEB-INF\lib下的taglibs-standard-impl-1.2.5.jar和taglibs-standard-spec-1.2.5.jar两个文件(也可以从Tomcat官网下载这两个文件),拷贝到项目WEB-INF\lib目录下。创建JSP文件

在Eclipse中JavaWebExample项目下找到chapter6目录,并创建exam21_el.jsp文件,在文件首部添加<%@tagliburi=”/jsp/jstl/core”prefix=”c”%>项目21用EL遍历数据21.1项目描述与实现(2)实现过程程序6-18exam21_el.jsp<%@pagecontentType="text/html;charset=utf-8"language="java"import="java.util.*"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><!DOCTYPEHTML><html><head><metahttp-equiv=”Content-Type”content=”text/html;charset=utf-8”><title>EL表达式</title></head><body><h4>使用EL访问JSP容器中的数据</h4><%Map<String,String>map2=newHashMap();map2.put(“a”,”HelloWorld!”);map2.put(“b”,”HelloJavaEL!”);map2.put(“c”,”ThisisMap!”);request.setAttribute(“map2”,map2);%><br>键值对遍历<br><c:forEachvar=”item”items=”${map2}”>${item.key}>${item.value}<br></c:forEach></body></html>代码分析:在本例中,使用了Java中的集合类HashMap,创建了对象map2,调用该Map对象的put方法,将键值对放入该对象中,然后使用JSTL中的迭代标签forEach(该标签的items属性代表要迭代的集合,var属性代表每一次迭代时所取出来的集合元素),迭代输出map2对象中的键(key)和值(value)。项目21用EL遍历数据21.2新知识点-EL语法基础EL(ExpressionLanguage),表达式语言,是JSP2.0的一个重要组件,在JSTL中被广泛使用。EL使用十分方便,语法也很简单,已成为标准规范之一。EL的主要优势在于:简化对象的访问、简化对象属性的访问、简化集合元素的访问、简化请求参数等的访问,同时EL还提供了运算符集合、支持条件输出、支持自动类型转换等功能。EL语法结构EL语法非常简单,${expression},是一个以“${”开始,以“}”结束的表达式,expression通常是一个变量名称或者表达式,功能是在JSP页面中输出该变量或表达式对应的值。EL运算符EL提供“.”和“[]”两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[]”。项目21用EL遍历数据21.2新知识点-EL语法基础EL(ExpressionLanguage),表达式语言,是JSP2.0的一个重要组件,在JSTL中被广泛使用。EL语法结构EL运算符变量EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。其中,pageScope、requestScope、sessionScope和applicationScope都是EL的隐含对象,由它们的名称可以很容易判断出它们所代表的意思,例如:${sessionScope.username}是取出session范围的username变量。项目21用EL遍历数据21.3扩展——EL运算符JSP表达式语言提供以下操作符,其中大部分是Java中常用的操作符,基本分为四大类,分别是算术运算符、关系运算符、逻辑运算符和其他运算符。算术运算符表达式语言支持的算术运算符和逻辑运算符非常多,所有在Java语言里支持的算术运算符,表达式语言都可以使用;甚至Java语言不支持的一些算术运算符和逻辑运算符,表达式语言也支持。项目21用EL遍历数据21.3扩展——EL运算符

JSP表达式语言提供以下操作符,其中大部分是Java中常用的操作符,基本分为四大类,分别是算术运算符、关系运算符、逻辑运算符和其他运算符。关系运算符表达式语言不仅可在数字与数字之间比较,还可在字符与字符之间比较,字符串的比较是根据其对应UNICODE值来比较大小的。常用的关系运算符有6个项目21用EL遍历数据21.3扩展——EL运算符JSP表达式语言提供以下操作符,其中大部分是Java中常用的操作符,基本分为四大类,分别是算术运算符、关系运算符、逻辑运算符和其他运算符。逻辑运算符EL常用的逻辑运算符有3个项目21用EL遍历数据21.3扩展——EL运算符

JSP表达式语言提供以下操作符,其中大部分是Java中常用的操作符,基本分为四大类,分别是算术运算符、关系运算符、逻辑运算符和其他运算符。其他运算符(1)empty运算符empty运算符主要用来判断值是否为空(null,空字符串,空集合)。(2)条件运算符${A?B:C}:若条件表达式A为ture,则执行表达式B,否则执行表达式C。(3)()运算符${A*(B+C)}用来改变表达式之间的运算优先级。注意:如果需要在支持表达式语言的页面中正常输出“$”符号,则在“$”符号前加转义字符“\”,否则系统以为“$”是表达式语言的特殊标记。项目22用EL简化JSP开发22.1项目描述与实现(1)描述使用EL重写JSP页面。完成与模块3项目6相同的注册功能,但要求在获取请求参数时不再使用Java脚本获取,而是使用EL表达式获取request参数。图6-19用户注册界面图6-20获取并显示用户注册信息项目22用EL简化JSP开发22.1项目描述与实现(2)实现过程创建用户注册表单页面创建使用EL的注册信息处理页面运行页面项目22用EL简化JSP开发22.1项目描述与实现(2)实现过程程序6-20exam22_reg_do.jsp<%@pagecontentType=”text/html;charset=utf-8”language=”java”import=”java.util.*”errorPage=””%><%@tagliburi=”/jsp/jstl/core”prefix=”c”%><!DOCTYPEhtmlPUBLIC“-//W3C//DTDXHTML1.0Transitional//EN”“/TR/xhtml1/DTD/xhtml1-transitional.dtd”><htmlxmlns=”/1999/xhtml”><head><metahttp-equiv=”Content-Type”content=”text/html;charset=utf-8”/><title>显示用户注册信息</title></head><body><h2>用户提交注册信息</h2><tablewidth=”90%”border=”1”align=”center”cellspacing=”1”><tr><tdwidth=”120”>用户名:</td><td>${param.username}</td></tr><tr><td>密码:</td><td>${param.password}</td></tr><tr><td>性别:</td><td>${param.sex}</td></tr><tr><td>E-mail:</td><td>${param.email}</td></tr><tr><td>熟练开发语言:</td><td><c:forEachvar="p"items="${paramValues.lan}"> ${p}, </c:forEach></td></tr></table></body></html>代码分析:此处使用了EL表达式的请求参数param及paramValues对象,用于读取请求参数的值,分别等同于JSP中的request.getParameter(Stringname)和request.getParameterValues(Stringname)方法,很明显,使用EL后,代码变得简单。项目22用EL简化JSP开发22.2新知识点-EL内建对象JSP有9个隐含对象,而EL也有自己的内建对象。EL内建对象分为6大类,总共有11个。项目22用EL简化JSP开发22.3扩展——EL数据类型和自动类型转换

EL是为了便于存取数据而定义的一种语言,JSP2.0之后才成为一种标准。EL借鉴了JavaScript语言简单的数据类型和多类型之间转换无关性的特点,使用非常方便。EL数据类型表达式语言EL定义了5种数据类型,即:Boolean:布尔型,值为true或false。Integer:整型,与Java语言一样。Float:浮点型,与Java语言一样。String:字符串,与Java语言中的String一样。Null:空值,null。项目22用EL简化JSP开发22.3扩展——EL数据类型和自动类型转换

EL是为了便于存取数据而定义的一种语言,JSP2.0之后才成为一种标准。EL借鉴了JavaScript语言简单的数据类型和多类型之间转换无关性的特点,使用非常方便。EL自动类型转换表达式语言EL除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,主要优点表现在于:EL元素可以出现在常规的页面正文、HTML以及JSP的标签属性中。EL表达式的结果会被强制转换成字符串,

温馨提示

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

评论

0/150

提交评论