《《JavaEE概述》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《JavaEE概述》PPT课件.ppt(73页珍藏版)》请在金锄头文库上搜索。
1、第一章 JavaEE概述1 1、什么是、什么是JavaEEJavaEE1. 1. JavaEEJavaEE是一个开发分布企业级应用的规范和标准是一个开发分布企业级应用的规范和标准2. Java2. Java平台的三个版本平台的三个版本 JavaSEJavaSE 适用于桌面系统适用于桌面系统 JavaEEJavaEE 适用于企业级应用适用于企业级应用 JavaMEJavaME 适用于小型设备和智能卡适用于小型设备和智能卡3.3.使用使用JspJsp的弊端的弊端 由于大量的显示代码和业务逻辑混淆在一起,由于大量的显示代码和业务逻辑混淆在一起,不利于程序的维护和扩展不利于程序的维护和扩展JavaEE
2、JavaEE包含的技术包含的技术最基础的是最基础的是JavaSEJavaSEJSPServletJavaBeanEJBJDBCJNDIXMLStruts HibernateJSFSpringWebServiceJavaJava与框架的关系与框架的关系JavaEEJavaEE是框架的基础,框架又是应用程序的基础是框架的基础,框架又是应用程序的基础JavaEEStruts Hibernate Spring应用程序应用程序三层的好处三层的好处一个组件的更改不会影响其他两个组件一个组件的更改不会影响其他两个组件由于表示层和数据层相互独立,因而可以方便扩由于表示层和数据层相互独立,因而可以方便扩充表示层
3、,使系统有良好的可扩展性充表示层,使系统有良好的可扩展性代码重复减少,可以共享代码代码重复减少,可以共享代码良好的分工与协作良好的分工与协作三层的关系三层的关系耦合耦合 表示层表示层 耦合耦合 中间层中间层 数据层数据层三层的技术内容三层的技术内容表示层技术表示层技术 HTMLHTMLJavaScriptJavaScriptAjaxAjax中间层技术中间层技术 JspJspServletServletJSTLJSTLJavaBeanJavaBean Struts Struts框架框架数据层技术数据层技术 JDBCJDBC技术技术HibernateHibernate技术技术连接池连接池系统集成技
4、术和提交方法系统集成技术和提交方法JAXJAXWS(JavaWS(Java API for XML Web Service) API for XML Web Service)技术技术JNDI(JavaJNDI(Java Naming and Directory Interface) Java Naming and Directory Interface) Java命名和目录接口,通过名称找到相应的对象命名和目录接口,通过名称找到相应的对象 getget请求将字符串添加到请求将字符串添加到urlurl中,使页面可以被设置中,使页面可以被设置成书签或使用电子邮件发送,而成书签或使用电子邮件发送,而
5、postpost不可以不可以方法方法安全性安全性长度限制长度限制GETGET方法方法安全安全最大长度为最大长度为255255个个字符字符Post Post 方法方法不安全不安全没有长度限制没有长度限制HTTPHTTP协议协议HTTPHTTP协议协议 超文本传输协议超文本传输协议w无状态协议无状态协议不用记录谁发出的请求不用记录谁发出的请求, ,只需给出响应只需给出响应适用于传输文件适用于传输文件w用于通过用于通过 Internet Internet 发送请求消息和响应消息发送请求消息和响应消息w使用端口接收和发送消息,默认为使用端口接收和发送消息,默认为8080端口端口第二章:Servlet基
6、础为什么需要为什么需要ServletServlet使用使用JSPJSP技术如何编写服务器动态网页?技术如何编写服务器动态网页?在在JSPJSP技术出现技术出现之前编写之前编写服务器服务器动态网页过程动态网页过程请求请求响应响应JSP页面页面运行运行执行执行Java代码代码HTML代码代码 生成生成JSP使用使用Java生成动态内容生成动态内容运行运行Servlet程序程序什么什么是是ServletServlet定义:定义:Servlet Servlet 是一个是一个 JavaJava程序,是在服务器上程序,是在服务器上 运行以处理客户端请求并做出响应运行以处理客户端请求并做出响应的程序的程序请
7、求请求响应响应Servlet 运行运行于服务器端于服务器端ServletServlet与与JspJsp之间的关系之间的关系 联系:联系:ServletServlet是是JspJsp的基础。的基础。 区别:区别: (1 1)JspJsp是是HTMLHTML或或XMLXML与与JavaJava代码结合的嵌套型语言,代码结合的嵌套型语言, 而而ServletServlet是纯是纯JavaJava类。类。 (2 2)JspJsp是以显示为中心。是以显示为中心。 (3 3)JspJsp使人们把显示和逻辑分隔为可视,而使人们把显示和逻辑分隔为可视,而ServletServlet没有没有把输出把输出HTML
8、HTML语句和逻辑处理分离开。语句和逻辑处理分离开。 ServletServlet的生命周期的生命周期ServletServlet的生命周期由的生命周期由ServletServlet容器容器( (如:如:Tomcat)Tomcat)控控制制w w容器如何处理请求容器如何处理请求HTTP请求请求容器请求请求响应响应12Servlet实例实例Servlet通过通过URL找到找到执行执行service(请求,响应请求,响应)34doGet(请求,响应请求,响应)5响应响应6ServletServlet的生命周期(的生命周期(2222)生命周期的各个阶段生命周期的各个阶段实例化实例化Servlet容器
9、创建容器创建Servlet的实例的实例初始化初始化该容器调用该容器调用init()方法方法服服务务如果请求如果请求Servlet,则容器调用,则容器调用service()方法方法销毁实例之前调用销毁实例之前调用destroy()方法方法销销毁毁RequestRequest与与ResponseResponse常用方法常用方法Request常用方法:常用方法:request.getParameter(“param”););request.setCharacterEncoding(“gbk”););request.setAttribute(“loginname”,user););Responsere
10、sponse.setContentType(“text/html;charset=GBK”););response.sendRedirect(“url”);页面跳转的方法页面跳转的方法转发是在服务器端起作用的转发是在服务器端起作用的 RequestDispatcherRequestDispatcher disdis= =request.getRequestDispachterrequest.getRequestDispachter(urlurl);); dis.forwarddis.forward(requestrequest,responseresponse);); 重定向是在浏览端起作用的
11、重定向是在浏览端起作用的 response.sendRedirectresponse.sendRedirect(“ “urlurl” ”););重定向将丢失重定向将丢失requestrequest作用域内的数据。作用域内的数据。 Web.xmlWeb.xml nameAaaservletAaaservlet/name y2javaee.sg.ch03.Aaaservlety2javaee.sg.ch03.Aaaservletclass / mapping nameAaaservletAaaservlet/name /pattern/AaaservletAaaservlet/pattern /
12、mapping 注意:注意: 中中 name与与 mapping中中 name内容要一致内容要一致第三章 基于Servlet的会话跟踪()httphttp协议和会话协议和会话1.Http1.Http协议是无状态的,是不能进行用户状态的跟协议是无状态的,是不能进行用户状态的跟踪踪2.2.什么是会话什么是会话用户与用户与webweb服务器的多次请求与响应的过程服务器的多次请求与响应的过程SessionSession运行机制运行机制HttpSessionHttpSession对象对象w w服务器为每个会话创建一个服务器为每个会话创建一个HttpSessionHttpSession对象对象w w每个会
13、话对象都有一个唯一的每个会话对象都有一个唯一的IDIDw w把用户的数据保存在相应的把用户的数据保存在相应的HttpSessionHttpSession对象内对象内第一次请求第一次请求响应响应服务器创建一个服务器创建一个HttpSession对象对象并把该对象的并把该对象的ID返回给用户返回给用户把把ID发送给客户端发送给客户端第二次请求把第二次请求把ID一一起发送给服务器起发送给服务器根据根据ID号服务器寻找号服务器寻找内存中相应的数据内存中相应的数据会话的创建会话的创建RequestRequest的的getSessiongetSession() ()方法创建会话方法创建会话publicHt
14、tpSessiongetSession();publicHttpSessiongetSession(booleanvalue);获取获取session对象的方法对象的方法getSession()getSession(booleanbool)getSession(true)truefalse返回与当前关联的返回与当前关联的会话,如果没有就会话,如果没有就创建后将其返回创建后将其返回返回与当前关联返回与当前关联的会话,如果没的会话,如果没有返回有返回null会话的使用会话的使用 void void setAttribute(StringsetAttribute(String name,Object
15、name,Object value) value) 进行数据的保存进行数据的保存 Object Object getAttribute(StringgetAttribute(String name) name) 进行数据的读取进行数据的读取*读取出的数据返回的是读取出的数据返回的是ObjectObject类型,必须转换成类型,必须转换成存入时的数据类型存入时的数据类型结束结束sessionsession的三种方式的三种方式1 1)关闭浏览器)关闭浏览器2 2)两次访问的时间间隔大于非活动时间)两次访问的时间间隔大于非活动时间3 3)调用)调用HttpSessionHttpSession的的in
16、validate()invalidate()方法方法第四章 基于Serverlet的会话跟踪(二)购物车的实现购物车的实现1.1.创建创建sessionsession对象,判断对象,判断sessionsession是否存在是否存在2.2.取出商品信息取出商品信息3.3.取出购物车取出购物车4.4.判断购物车是否存在,如果不存在,就创建新的判断购物车是否存在,如果不存在,就创建新的购物车购物车5.5.判断商品是否存在购物车中判断商品是否存在购物车中6.6.如果存在,再该商品的原有数量上加如果存在,再该商品的原有数量上加1 1,如果不存,如果不存在,就设置数量为在,就设置数量为1 1JavaEEJ
17、avaEE与后续课程关系与后续课程关系HttpSessionHttpSession session= session=request.getSession(falserequest.getSession(false); );If(sessionIf(session=null)=null)转换到详细信息页面转换到详细信息页面 BookBeanBookBean book=( book=(BookBean)request.getAttribute(“bookToAddBookBean)request.getAttribute(“bookToAdd”);”);Map cart=(Map cart=(M
18、ap)session.getAtrribute(“cartMap)session.getAtrribute(“cart”);”);If(cartIf(cart=null)=null)cart=new cart=new HashMapHashMap();();session.setAttribute(“cart”,cartsession.setAttribute(“cart”,cart); ); CartItemBeanCartItemBean cartItemcartItem=(=(CartItemBean)cart.get(book.getISBNCartItemBean)cart.get(
19、book.getISBN();();If(cartItemIf(cartItem!=null)!=null)cartItem.setQuantity(cartItem.getQuantity()+1);cartItem.setQuantity(cartItem.getQuantity()+1);elseelse cart.put(book.getIsbn(),newcart.put(book.getIsbn(),new CartItemBean(book,1); CartItemBean(book,1); JavaEEJavaEE体系结构体系结构1.1.取出购物车取出购物车2.2.将购物车数组
20、化将购物车数组化3.3.遍历购物车数组遍历购物车数组4.4.再循环体内获得商品信息封装类信息对象再循环体内获得商品信息封装类信息对象简单的代码实现简单的代码实现Map cart=(Map cart=(Map)session.getAttribute(“cartMap)session.getAttribute(“cart”);”);Set Set cartItemscartItems= =cart.keySetcart.keySet();();Object Object isbnisbn= =cartItems.toArraycartItems.toArray();();intint i=0;
21、i=0;while(iwhile(i isbn.lengthisbn.length) ) cartItemcartItem=(=(CartItemBean)cart.get(String)isbniCartItemBean)cart.get(String)isbni ); );i+;i+; 集合,接口,类关系图集合,接口,类关系图Collection接口接口List接口接口Set接口接口ArrayList类类LinkedList类类HashSet类类TreeSet类类继承继承 继承继承 实现实现 实现实现 List及实现类是可变及实现类是可变大小的列表大小的列表,适用于,适用于按数值索引访问元
22、素按数值索引访问元素Set集合中不允许集合中不允许有重复的数据有重复的数据Set Set 接口的层次结构接口的层次结构Collection接口接口Set接口接口HashSet类类TreeSet类类继承继承实现实现实现实现intsize()booleanisEmpty()ObjecttoArray()booleanadd(Objecto)返回返回Set集合元素数集合元素数返回一个包含返回一个包含Set中所有元素的数组中所有元素的数组向向Set中添加元素中添加元素判断判断Set中是否包含元素,不包含返回中是否包含元素,不包含返回trueMapMap接口实现类接口实现类一个一个MapMap容器中的键
23、对象不允许重复,保证查找结容器中的键对象不允许重复,保证查找结果的一致性果的一致性Map接口接口HashMap类类Properties类类Map中以键中以键-值对值对形式存储数据形式存储数据实现实现 PostPost与与GetGet的区别的区别w wPostPost请求数据在地址栏内不可见,而请求数据在地址栏内不可见,而getget可见。可见。w wPostPost请求提交数据在理论上没有长度请求提交数据在理论上没有长度 限制限制 ,getget限制限制在在255255个字符内。个字符内。w wGetGet请求将字符串添加到请求将字符串添加到URLURL中,使页面可以被设置为中,使页面可以被设
24、置为书签或使用邮件发送,而书签或使用邮件发送,而postpost不能。不能。w wHttpHttp协议是无状态协议。即客户端发送请求,服务器响协议是无状态协议。即客户端发送请求,服务器响应,响应完毕应,响应完毕 断开连接。断开连接。第五章 基于Servlet的MVC设计模式MVCMVC模式的模式的3 3个模块个模块模型(模型(ModelModel):对应的组件是):对应的组件是JavaBeanJavaBean(JavaJava类)类)视图(视图(ViewView):对应的组件是):对应的组件是JSPJSP或或HTMLHTML文件文件控制器(控制器(ControllerController):组
25、件是):组件是ServletServlet模型可分为业务模型和数据模型,代表应用程序模型可分为业务模型和数据模型,代表应用程序的业务逻辑和状态的业务逻辑和状态视图提供可交互的客户页面,向客户显示模型数视图提供可交互的客户页面,向客户显示模型数据据控制器响应客户的请求,根据客户的请求来操作控制器响应客户的请求,根据客户的请求来操作模型,并把模型的响应结构经由视图展现给客户模型,并把模型的响应结构经由视图展现给客户MVCMVC设计模式的好处设计模式的好处各司其职,互不干涉各司其职,互不干涉有利于开发中的分工有利于开发中的分工有利于组件的重要有利于组件的重要MVCMVC最重要的特点是把显示与数据分离
26、,这样就最重要的特点是把显示与数据分离,这样就增加了各个模块的可重用性增加了各个模块的可重用性MVCMVC编程模式编程模式 WebWeb容器处理请求过程容器处理请求过程请求请求ServletJavaBeanJSP页面页面执行执行调用调用转向转向响应响应访问访问返回数据返回数据数数数数 据据据据 库库库库客户端客户端JSP视图动视图动态显示数据态显示数据数数数数 据据据据 库库库库Servlet控制器,用控制器,用于接收于接收请求和控制请求和控制应用程序的流程应用程序的流程JavaBean数据数据模型进行业务逻模型进行业务逻辑和访问数据库辑和访问数据库程序开发中,实现程序开发中,实现MVCMVC
27、模式模式 当客户端发送请求时,服务器端当客户端发送请求时,服务器端ServletServlet接收请求接收请求数据,并根据数据,调用模型中的相应的方法访数据,并根据数据,调用模型中的相应的方法访问数据库,然后把执行结果返回问数据库,然后把执行结果返回ServletServlet,ServletServlet根据结果转向不同的根据结果转向不同的JSPJSP或或HTMLHTML页面,以响应客页面,以响应客户请求。户请求。第六章第六章Model层开发:高级层开发:高级JDBC数据源与连接池数据源与连接池在在DataSourceDataSource中事先建立了多个数据库连接,这中事先建立了多个数据库连
28、接,这些数据库连接保存在连接池中,些数据库连接保存在连接池中,JavaJava程序访问数程序访问数据库时,只需要从连接池中取出空闲状态的数据据库时,只需要从连接池中取出空闲状态的数据库连接,当程序访问数据库结束时,在将数据库库连接,当程序访问数据库结束时,在将数据库连接放回连接池中,这可以提高访问数据库的效连接放回连接池中,这可以提高访问数据库的效率。率。连接池连接连接池连接连接池中的连接连接池中的连接数数数数 据据据据 库库库库想要获得连接想要获得连接返回一个连接返回一个连接返回一个已连接返回一个已连接好的空闲连接好的空闲连接应用程序从连接池中获得连接应用程序从连接池中获得连接应用程序应用程
29、序连接池连接池Connection1Connection2Connection3使用使用JNDIJNDI配置配置context.xmlcontext.xml文件文件配置配置web.xmlweb.xml文件文件进行代码编写,使用进行代码编写,使用lookup()lookup()方法获得数据源对象方法获得数据源对象* *添加数据库驱动文件添加数据库驱动文件必须把必须把JDBCJDBC驱动程序复制到驱动程序复制到TomcatTomcat的的commonlibcommonlib目录下目录下JNDIJNDI的配置(连接池的创建)的配置(连接池的创建) 在在TomcatTomcat根目录根目录confco
30、nfcontext.xmlcontext.xml文件中文件中节节点中添加点中添加信息信息 Resource name=“=“jdbc:sqlserver:/localhost:1433;datatbaseName=book” / 其中的其中的maxActive,maxIdle,maxWaitmaxActive,maxIdle,maxWait可以省略可以省略 Web.xmlWeb.xml文件的配置文件的配置 Ebooks Ebooks DataSourceDataSource jdbcjdbc/books/books javax.sql.DataSourcejavax.sql.DataSourc
31、e ContainerContainer 文件的配置文件的配置数据源与数据源与JNDIJNDI资源资源 获得数据库连接获得数据库连接 1.1.创建创建ContextContext对象对象 Context Context ctxctx=new =new InitialContextInitialContext();(); 2.2.创建创建DataSourceDataSource对象对象 DataSourceDataSource source=(source=(DataSource)ctx.lookup(“jdbc:comp/env/jdbc/booksDataSource)ctx.lookup(
32、“jdbc:comp/env/jdbc/books”);”); 3.3.获得数据库连接获得数据库连接 Connection con=Connection con=source.getConnectionsource.getConnection();(); lookup(Stringlookup(String name) name) 此方法描述是返回与指定的名字绑定的此方法描述是返回与指定的名字绑定的对象对象属性文件的写法属性文件的写法读取属性文件来进行数据库连接读取属性文件来进行数据库连接driver=driver=com.microsoft.sqlserver.jdbc.SQLServerc
33、om.microsoft.sqlserver.jdbc.SQLServerDriverDriverurlurl=jdbc:sqlserver:/localhost:1433;databaseNa=jdbc:sqlserver:/localhost:1433;databaseName=me=restrantrestrantuser = user = sasapassword = password = sasa读取属性文件读取属性文件import import java.io.InputStreamjava.io.InputStreamimprotimprot java.util.Properti
34、esjava.util.Properties; ;public final class public final class EnvEnv extends Properties extends Propertiesprivate static private static EnvEnv instance; / instance; /私有的静态变量私有的静态变量private private EnvEnv() () InputStreamInputStream is= is=getClass().getResourceAsStream(“/db.propertiesgetClass().getR
35、esourceAsStream(“/db.properties”);”);trytryload(isload(is); ); catch(Exceptioncatch(Exception e) e) System.err.printlnSystem.err.println(“ (“错误,没有读取属性文件错误,没有读取属性文件” ”); ); / /以单例模式创建,获得对象实例以单例模式创建,获得对象实例public static public static EnvEnv getInstancegetInstance() () if(instanceif(instance!=null)!=nul
36、l)return instance;return instance;elseelsemakeInstancemakeInstance();();return instance;return instance; / /私有的创建对象的方法私有的创建对象的方法private static synchronized void private static synchronized void makeInstancemakeInstance()()if(instanceif(instance!=null)!=null)instance=new instance=new EnvEnv();(); 读取属
37、性文件读取属性文件读取配置文件,创建数据库连接读取配置文件,创建数据库连接public class public class ConnectionManagerConnectionManager public static synchronized Connection public static synchronized Connection getCongetCon() () String String driverClassNamedriverClassName= =Env.getInstance().getProperty(driverEnv.getInstance().getProp
38、erty(driver); );String String urlurl= =Env.getInstance().getProperty(“urlEnv.getInstance().getProperty(“url”);”);String password=String password=Env.getInstance().getProperty(“passwordEnv.getInstance().getProperty(“password”);”);String user=String user=Env.getInstance().getProperty(“userEnv.getInsta
39、nce().getProperty(“user”);”);Connection con=null;Connection con=null;trytryClass.forName(driverClassNameClass.forName(driverClassName);/);/加载数据库驱动程序加载数据库驱动程序con=con=DriverManager.getConnection(url,user,passwordDriverManager.getConnection(url,user,password); ); catch(Exceptioncatch(Exception e) e) e.
40、printStackTracee.printStackTrace();();return con;return con; ClassClass与与ObjectObject小结小结 ClassClass类类1.Class.forName(String 1.Class.forName(String classnameclassname): ):该方法生成一个该方法生成一个StringString类型参数指定的类型参数指定的classnameclassname的的ClassClass对象对象2.InputStream 2.InputStream getResourceAsStream(Stringg
41、etResourceAsStream(String name): name):该方该方法是打开并读取一个法是打开并读取一个StringString类型参数指定的文件到系统内类型参数指定的文件到系统内存中,以方便获得文件信息存中,以方便获得文件信息 ObjectObject类类1.getClass()1.getClass():返回一个对象的运行时类:返回一个对象的运行时类2.toString():2.toString():返回该对象的字符串表示,在返回该对象的字符串表示,在ObjectObject类中是返类中是返 回对象的地址信息回对象的地址信息3.equals(Object 3.equals(
42、Object objobj): ):判断判断objobj与当前对象是否相等与当前对象是否相等连接数据库的连接数据库的3 3种方式种方式1.1.编码方式,把数据库配置信息直接写入编码方式,把数据库配置信息直接写入JavaJava代码代码中中2.properties2.properties文件,把数据库配置信息写在属性文件文件,把数据库配置信息写在属性文件中,用程序读取。中,用程序读取。3.3.数据源,用数据源,用JNDIJNDI来获取来获取DataSourceDataSource对象,从而得对象,从而得到到ConnectionConnection对象对象读取读取.properties.prope
43、rties文件的步骤文件的步骤创建继承自创建继承自PropertiesProperties的类,并以单例模式获得的类,并以单例模式获得实例:私有的静态成员,私有的默认构造方法,实例:私有的静态成员,私有的默认构造方法,公有的静态同步方法。公有的静态同步方法。使用使用ClassClass对象的对象的getResourceAsStreamgetResourceAsStream()()方法,方法,把指定的属性文件读入输入流中,并使用把指定的属性文件读入输入流中,并使用PropertiesProperties类中的类中的load()load()方法,充输入流中读取方法,充输入流中读取属性列表(键属性列
44、表(键/ /值对)值对)在实现数据库连接方法是,使用在实现数据库连接方法是,使用PropertiesProperties类的类的getPropertygetProperty()()方法,通过键读取出方法,通过键读取出valuevalue值,从而实现数据库值,从而实现数据库连接的操作连接的操作第七章 View层开发:JavaBean在JSP中的使用JavaBeanJavaBean的功能的功能1.1.封装数据封装数据2.2.封装业务封装业务JavaBeanJavaBean一般情况满足的要求一般情况满足的要求1.1.是一个公有类,并提供无参的公有构造方法是一个公有类,并提供无参的公有构造方法2.2.
45、属性私有属性私有3.3.具有公有的访问属性具有公有的访问属性gettergetter和和settersetter方法方法JavaBeanJavaBean概念概念JspJsp标准动作使用要注意的事情标准动作使用要注意的事情 :作为前缀作为前缀JspJsp标准动作中的属性区分大小写标准动作中的属性区分大小写属性中的值必须置于双引号内属性中的值必须置于双引号内常用的常用的JspJsp标准动作有四个,如下:标准动作有四个,如下: ” scope=“scope” / =“Parameter” / =“Parameter” / ” /标准动作使用的含义标准动作使用的含义 用来装载一个将在用来装载一个将在J
46、SPJSP页面中使用页面中使用JavaBeanJavaBean 设置设置JavaBeanJavaBean中的属性值中的属性值 获取获取JavaBeanJavaBean中指定的属性值中指定的属性值 实现页面的跳转,实现页面的跳转, 实质是实质是RequestDispatcher(url).forward(requestRequestDispatcher(url).forward(request response);response);pagepageJavaBeanJavaBean只能在当前页面中使用,当加载新只能在当前页面中使用,当加载新页面时就会将其销毁页面时就会将其销毁requestreq
47、uestJavaBeanJavaBean在用户对其发出请求时存在在用户对其发出请求时存在sessionsessionJavaBeanJavaBean一直存在于会话中,直至其终止或被一直存在于会话中,直至其终止或被除除applicatioapplication njavaBeanjavaBean在整个应用程序中均可使用在整个应用程序中均可使用ScopeScope的常用属性的常用属性验证用的方法验证用的方法public public booleanboolean getValidgetValid()()booleanboolean valid=false; valid=false;Connecti
48、on con=Connection con=ConnectionManager.getConnectionConnectionManager.getConnection();();PreparedStatementPreparedStatement psps=null;=null;String String sqlsql=“select * from =“select * from userInfouserInfo where where loginnameloginname=?”=?”psps= =con.prepareStatement(sqlcon.prepareStatement(sq
49、l); );ps.setString(1,getName);ps.setString(1,getName);if(rs.next()&rs.getString(“password”).equals(getPasswordif(rs.next()&rs.getString(“password”).equals(getPassword()() System.out.printlnSystem.out.println(“ (“登录成功!登录成功!” ”); );valid =true;valid =true;elseelseSystem.out.printlnSystem.out.println(“
50、 (“登录失败!登录失败!” ”); );valid=false;valid=false; return valid;return valid; / /不能忘记不能忘记try catch finally try catch finally 使用使用JspJsp标准动作的好处标准动作的好处可以方便程序的开发,体现在代码的重用可以方便程序的开发,体现在代码的重用可以方便美工人员美化页面,在可以方便美工人员美化页面,在JspJsp中减少大量的中减少大量的JavaJava代码代码简化了数据的获取和封装的过程简化了数据的获取和封装的过程Model1Model1与与Model2Model2的区别的区别Mo
51、del1Model1使用使用JSP+JavaBeanJSP+JavaBean实现,即页面和模型实现,即页面和模型Model2Model2使用使用JSP+JavaBean+ServletJSP+JavaBean+Servlet实现,即实现,即MVCMVC模式模式使用使用Model1Model1设计的项目缺少控制层,不易进行扩设计的项目缺少控制层,不易进行扩展,只适合开发中小型项目展,只适合开发中小型项目第八章 View层开发:EL和JSTL为什么需要为什么需要ELEL EL(ExpressionEL(Expression Language) Language)表达式语言表达式语言 为了在为了在J
52、spJsp页面中应该尽可能减少,或是不出现页面中应该尽可能减少,或是不出现JavaJava代码,代码,使用使用ELEL表达式可以直接获取对象的属性表达式可以直接获取对象的属性 ELEL表达式的实质就是调用表达式的实质就是调用JavaBeanJavaBean中的中的get()get()方法方法 语法:语法:$ EL$ EL表达式表达式 点操作符:左边是点操作符:左边是JavaBeanJavaBean的对象,右边是的对象,右边是JavaBeanJavaBean的的属性属性 操作符:可以操作数组操作符:可以操作数组 $ $ teacher“nameteacher“name” ” 或是或是$ teac
53、her0 $ teacher0 $ $ bean.namebean.name 或或 $ $ beannamebeanname JSTL JSTL 标准标签库标准标签库JSTLJSTL(Java Server Pages Java Server Pages StanderdStanderd Tag Tag Library,JspLibrary,Jsp标准标签库)包含用于编写和开发标准标签库)包含用于编写和开发JspJsp页面的一组标准标签,他可为用户提供一个无脚页面的一组标准标签,他可为用户提供一个无脚本环境。本环境。JSTL的优点的优点提供一组标准标签提供一组标准标签可用于编写各种可用于编写各
54、种动态动态JSP页面页面用于访问数据库用于访问数据库JSTLJSTL标准标签库介绍标准标签库介绍JSTLJSTL标准标签库内的标签标准标签库内的标签核心标签库核心标签库通用标签通用标签条件标签条件标签迭代标签迭代标签JSTL标准标签库标准标签库SQL标签库标签库setremoveoutifforEachupdatequeryparam通用标签通用标签taglibtaglib将标签库描述符文件(将标签库描述符文件(. .tldtld)引人页面中,并设置前缀,利用前缀)引人页面中,并设置前缀,利用前缀来使用标签库描述符文件中的标签。来使用标签库描述符文件中的标签。语法:语法:% ” prefix=
55、“c”%1)1) 设置指定范围内的变量值,如果该变量不存在,则创建它设置指定范围内的变量值,如果该变量不存在,则创建它 scope=“page/request/session/application”/2)2) 用于删除变量用于删除变量 =“name” scope=“page/request/session/application”/3)3) value=“value”/计算表达式并将结果显示在页面上计算表达式并将结果显示在页面上 value=“value” / valuevalue可以是表达式或变量可以是表达式或变量条件标签条件标签语法:语法: =“name” scope=“page”/ /
56、条件为条件为truetrue时,执行的代码时,执行的代码/ 迭代标签迭代标签语法:语法: =“Status”/ /循环体内容循环体内容/ varvar相当于遍历集合中的对象相当于遍历集合中的对象条件和迭代标签条件和迭代标签隐式对象隐式对象隐式对象隐式对象JSP隐式对象隐式对象paramValuesparamapplicationScoperequestScopesessionScopepageScope作用域访问对象作用域访问对象参数访问对象参数访问对象pageContextpageScopepageScope返回页面范围内的变量名返回页面范围内的变量名requestScoperequestS
57、cope返回请求范围内的变量名返回请求范围内的变量名sessionScopesessionScope返回会话范围内的变量名返回会话范围内的变量名applicationScopeapplicationScope返回应用范围内的变量返回应用范围内的变量paramparam返回客户端的请求参数的字符串值返回客户端的请求参数的字符串值paramValuesparamValues返回映射至客户端的请求参数的一组值返回映射至客户端的请求参数的一组值pageContextpageContext提供对用户请求和页面信息的访问提供对用户请求和页面信息的访问隐式对象隐式对象SQLSQL标签标签 JSTLJSTL的
58、的SQLSQL标签用于访问各种关系类型数据库标签用于访问各种关系类型数据库%” %1 1)使用使用SQLSQL标签中定义数据源的标签中定义数据源的setDataSourcesetDataSource标签标签语法:语法: =“name” scope=“page” /2 2)修改数据库信息的)修改数据库信息的updateupdate标签标签语法:语法: ” scope=“page”/SQL/SQL语句语句/: updateSqlSql 标签标签3 3)传递参数的)传递参数的paramparam标签标签语法:语法: value=“value” /4 4)使用)使用queryquery标签来查询数据库
59、信息标签来查询数据库信息语法:语法: scope=“page” /SQL/SQL语句语句/ dataSourcedataSource指定使用的数据源,与指定使用的数据源,与 标签中的标签中的varvar的变量名称一致的变量名称一致。总结总结 在在JspJsp页面中使用页面中使用ELEL和和JSTL,JSTL,主要目的就是实现主要目的就是实现JSPJSP中无脚中无脚本编程,从而提高项目的可维护性(包括美工的网页维护)本编程,从而提高项目的可维护性(包括美工的网页维护)和可扩展性和可扩展性 使用使用SQLSQL标签可以进行数据库的如下操作标签可以进行数据库的如下操作1 1)在)在JSPJSP页面中
60、使用页面中使用taglibtaglib指令,导入描述符文件。指令,导入描述符文件。2 2)使用)使用setDataSourcesetDataSource标签创建数据源。标签创建数据源。3 3)如果)如果SQLSQL语句中有参数,使用语句中有参数,使用paramparam标签进行参数的设置标签进行参数的设置4 4)如果是执行查询,则使用)如果是执行查询,则使用queryquery标签后,使用标签后,使用forEachforEach标标签对返回的结果集进行遍历。签对返回的结果集进行遍历。创建数据库连接代码和更新代码创建数据库连接代码和更新代码 =“con” / =“$ con ”insert in
61、to insert into BookOrder(usernameBookOrder(username, , zipcode,phone,total)valueszipcode,phone,total)values(?,?,?,?)(?,?,?,?) ” / ” / ” / value=50 / 创建数据库连接代码和更新代码创建数据库连接代码和更新代码 =“con” / =“$ con ”insert into insert into BookOrder(usernameBookOrder(username, , zipcode,phone,total)valueszipcode,phone,total)values(?,?,?,?)(?,?,?,?) ” / ” / ” / value=50 / 查询代码和迭代代码查询代码和迭代代码 ” $ $ row.orderidrow.orderid $ $ row.usernamerow.username $ $ row.zipcoderow.zipcode $ $ row.totalrow.total / /