《用Eclipse开发javaweb应用程序.ppt》由会员分享,可在线阅读,更多相关《用Eclipse开发javaweb应用程序.ppt(36页珍藏版)》请在三一办公上搜索。
1、第2讲 基于Servlet+JavaBean+Jsp开发应用的过程,第2讲 基于Servlet+JavaBean+Jsp开发应用的过程,本讲主要介绍主流的java web编程技术、设计模式和框架,以及如何利用Eclipese开发Web应用程序。要点:1、Java Web编程的主要组件技术;2、MVC设计模式;3、用Eclipse构建一个基于MVC模式的Java Web的应用程序。目的:掌握如何用Eclipse构建一个基于MVC模式的Java WEB的应用程序。,2.1 java web 编程的主要组件技术,HtmljspServletJavabeanJdbcXmlTomcatMySQL,2.2
2、 MVC设计模式,今天,我们见到的绝大部分应用,都是基于B/S(浏览器/服务器)架构的,其中的服务器就是Web服务器。可见,Web应用是目前广泛使用的应用模式。Web程序开发方法的发展:JSP的Model 1 JSP的Model 2 MVC,1 Model 1和Model 2,对于Java的动态Web编程技术而言,则经历了Model 1和Model 2时代。Model 1:Model 1就是JSP大行其道的时代,在Model 1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。Mo
3、del 2:Model 2下JSP不再承担控制器的责任,它仅仅是表现层角色,仅仅用于将结果呈现给用户,JSP页面的请求与Servlet(控制器)交互,而Servlet负责与后台的JavaBean通信。在Model 2模式下,模型(Model)由JavaBean 充当,视图(View)由JSP页面充当,而控制器(Controller)则由Servlet充当。,Model 1的程序流程:,特点:由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作,Model 2的程序流程:基本上是MVC结构,特点:Model 2下JS
4、P不再承担控制器的责任,它仅仅是表现层角色,仅仅用于将结果呈现给用户,JSP页面的请求与Servlet(控制器)交互,而Servlet负责与后台的JavaBean通信。在Model 2模式下,模型(Model)由JavaBean 充当,视图(View)由JSP页面充当,而控制器(Controller)则由Servlet充当。,2 Model 1和Model 2的比较,对于非常小型的Web站点,如果后期的更新、维护工作不是特别大,可以使用Model 1的模式来开发应用,而不是使用Model 2的模式。虽然Model 2提供了更好的可扩展性及可维护性,但增加了前期开发成本。从某种程度上讲,Mode
5、l 2为了降低系统后期维护的复杂度,却导致前期开发的更高复杂度。,3 MVC思想,MVC并不是Java语言所特有的设计思想,也并不是Web应用所特有的思想,它是所有面向对象程序设计语言都应该遵守的规范。MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)和Controller(控制器),这三个部分以最少的耦合协同工作,从而提高应用的可扩展性及可维护性。,MVC,MVC:M(model)是指数据模型,V(View)是指用户界面,C(Control)则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。模型、视图与控制器的分离,使得一个
6、模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、控制器3者之间的关系和各自的主要功能。,MVC的组成部分,视图(View)代表用户交互界面,对于Web应用来说就是HTML界面。模型(Model):就是业务流程/状态的处理以及业务规则的制定。控制(Controller):可以理解为一个分发器,他来决定选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求,控制层并不做任何的数据处理。,MVC
7、带来的好处,MVC从根本上强制性的将它们分开,最大程度上实现了程序代码与网页的分离。数据和业务规则从表示层分开,所以可以最大化的重用代码。,MVC的特点,MVC特点:多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护。模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如,使用JSP页面、Velocity模板或者直接产生Excel文档等。应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用
8、户请求权限的概念。MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。,4 常用的MVC框架,Struts:-包括struts1和struts2两个。JSF:JSF是一个标准,目前,JSF是作为JEE 5.0的一个组成部分,与JEE 5.0一起发布 JSF的行为方法在POJO中实现,JSF的Managed Bean无需继承任何特别的类。因此,无需在表单和模型对象之间实现多余的控制器层。JSF中没有控制器对象,控制器行为通过模型对象实现。JSF的事件框架可以细化到表单中每个字段。JSF依然是基于JSP/Servlet的,仍然是
9、JSP/Servlet架构,因而学习曲线相对简单,2.3 用Eclipse构建一个基于MVC模式的Java Web应用程序,题目要求:(1)技术要求:按照MVC设计模式,利用JSP、Servlet及JavaBean构建一个简单的登录系统。(2)系统功能要求:当用户在登录页面上填写用户名和密码并提交后,系统检查该用户是否已经注册,若注册,系统进入主页面,否则,进入注册页面。系统的工作流程见下图。,(2)控制器-1LoginServlet,(1)登录页面Login.jsp,(5)数据组件userdoadb_op,(6)数据库MySQL,进行验证,不符合格式,返回注册页面,重新注册,并提示出错情况,
10、注册成功,进入登录页面,未注册,登录系统的工作流程,(3)提示:登录成功Main.jsp(过20秒后再自动进入注册页面),(4)进入注册页面Register.jsp,(7)控制器-2RegisterServlet,(8)提示:注册失败Register_err.jsp(过20秒后再自动进入注册页面),(9)注册成功Register_succ.jsp(过20秒后再自动进入注册页面),已注册,或者,密码错误,(10)进入主页面Main2.jsp,构建系统的处理步骤,(1)数据库设计:构建数据库表T_UserInfo(2)在Eclipse中创建一个项目:Login_Proj(3)构建视图组件:登录页面
11、(login.jsp)、主页面(main.jsp)、注册页面(register.jsp),注册失败(Register_err.jsp),注册成功(Register_succ.jsp)(4)构建控制层组件:一个servlet(LoginServlet.java)-实现登录的控制 一个servlet(RegisterServlet.Java)-实现注册的验证控制(5)构建业务逻辑层组件(模型组件):一个JavaBean:user,doa,db_op(6)部署该程序到服务器Tomcat中,然后运行。,(1)数据库设计:构建数据库表T_UserInfo,利用MySQL数据库,创建数据库:user创建表
12、及其结构:T_UserInfo,数据表结构T_UserInfo,注意,该数据库所存放的位置,(2)在Eclipse中创建一个项目:Login_Proj,按Eclipse建立工程的提示,建立Web工程,工程的名称为:Login_Proj。,(3)构建视图组件:-登录页面(login.jsp),选中工程“Login_Proj”,击右键,选“新建”,按Eclipse的提示,建立jsp,名称为:Login。修改默认jsp内容,达到我们所要求的编码。,login.jsp的代码,登录页面 用户名:密,(3)构建视图组件-主页面(main.jsp),选中工程“Login_Proj”,击右键,选“新建”,按E
13、clipse的提示,建立jsp,名称为:main.jsp。修改默认jsp内容,达到我们所要求的编码。,main.jsp代码,主页面,你成功登录,20秒后自动进入主页面!,类似可以建立其它的页面:系统页面main2.jsp 注册页面register.jsp 注册失败提示页面Register_err.jsp 注册成功提示页面Register_succ.jsp,构建控制层组件(第4步)建立数据JavaBean用户(user);建立连接数据库的JavaBean(doa)建立实现对用户数据库进行操作的java类-db_op.java,4.1 建立数据JavaBean用户(user),package Ja
14、vaBean;public class user private String username;private String password;public String getUsername()return username;public void setUsername(String username)this.username=username;public String getPassword()return password;public void setPassword(String password)this.password=password;,4.2 建立连接数据库的Ja
15、vaBean(doa),package JavaBean;public class doa private String db_username;private String db_password;private String db_driver;private String db_connection;public String getDb_username()return db_username;public void setDb_username(String db_username)this.db_username=db_username;public String getDb_pa
16、ssword()return db_password;public void setDb_password(String db_password)this.db_password=db_password;public String getDb_driver()return db_driver;public void setDb_driver(String db_driver)this.db_driver=db_driver;public String getDb_connection()return db_connection;public void setDb_connection(Stri
17、ng db_connection)this.db_connection=db_connection;,4.3 在JavaBean(doa)的基础上,建立实现对用户数据库进行操作的java类-db_op.java,public class db_op public Connection db_getConnection()Connection conn=null;String db_username=null;String db_password=null;String db_driver=null;String db_connection=null;Properties pro=new Pro
18、perties();File file=new File(H:web_15Login_Projsrcdb.properties);try pro.load(new FileInputStream(file);catch(Exception e)e.printStackTrace();db_username=pro.getProperty(db_username,);db_password=pro.getProperty(db_password,);db_driver=pro.getProperty(db_driver,db_driver);db_connection=pro.getProper
19、ty(db_connection,db_connection);try Class.forName(db_driver).newInstance();conn=DriverManager.getConnection(db_connection,db_username,db_password);return conn;catch(Exception e)System.out.println(e);return null;,实现数据库的连接,public boolean select_1(user u)/查询用户是否已经注册 Connection conn=null;ResultSet rs=nu
20、ll;Statement ps=null;String xm=u.getUsername();String pass=u.getPassword();conn=db_getConnection();String s1=select*from T_userInfo where username=+xm+and password=+pass+;try ps=conn.createStatement();rs=ps.executeQuery(s1);if(rs.next()rs.close();ps.close();conn.close();return true;else rs.close();p
21、s.close();conn.close();return false;catch(SQLException e)return false;,public boolean select_2(String u)/在注册时,查询是否有重名的用户已经注册Connection conn=null;ResultSet rs=null;Statement ps=null;conn=db_getConnection();String s1=select*from T_userInfo where username=+u+;tryps=conn.createStatement();rs=ps.executeQ
22、uery(s1);if(rs.next()rs.close();ps.close();conn.close();return true;elsers.close();ps.close();conn.close();return false;catch(SQLException e)return false;,public void append(user u)/注册时,添加注册用户信息Connection conn=null;Statement ps=null;conn=db_getConnection();String xm=u.getUsername();String pass=u.get
23、Password();String s1=insert into T_userInfo(username,password)values(+xm+,+pass+);tryps=conn.createStatement();ps.executeUpdate(s1);ps.close();conn.close();catch(SQLException e)System.out.println(e);,(5)构建控制层组件(第5步):5.1 一个servlet(LoginServlet.java)-实现登录的控制 5.2 一个servlet(RegisterServlet.Java)实现注册的验证控
24、制 5.3 web.xml配置文件的解读,5.2 构建控制层组件:一个servlet(registerServlet.java,public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException String xm=(String)request.getParameter(username);String mm=(String)request.getParameter(password);String mm2=(String)request.g
25、etParameter(repassword);String type_err=;db_op b=new db_op();if(b.select_2(xm)type_err=xm+:该用户已经注册!;HttpSession s=request.getSession(true);s.setAttribute(type_err,type_err);response.sendRedirect(Register_err.jsp);else if(!mm.equals(mm2)type_err=两次密码不一致错!;HttpSession s=request.getSession(true);s.setA
26、ttribute(type_err,type_err);response.sendRedirect(Register_err.jsp);else HttpSession s=request.getSession(true);s.setAttribute(username,xm);s.setAttribute(password,mm);user u=new user();u.setUsername(xm);u.setPassword(mm);db_op d=new db_op();d.append(u);response.sendRedirect(Register_succ.jsp);,5.1
27、构建控制层组件:一个servlet(LoginServlet.java),public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException user u=new user();String xm=;String ps=;xm=request.getParameter(username);ps=request.getParameter(password);u.setUsername(xm);u.setPassword(ps);HttpSessi
28、on s=request.getSession(true);s.setAttribute(username,xm);db_op d=new db_op();boolean tf=d.select_1(u);if(tf)response.sendRedirect(main2.jsp);else response.sendRedirect(register2.jsp);,5.3 web.xml配置文件的解读和配置,提示:必须要学会自己修改和配置,这对于我们了解servlet的工作原理和实用有着重要的作用。,Java Web应用通过一个基于XML的发布描述符文件来配置其发布信息,这个文件名为web.
29、xml,它存放于WEB-INF子目录下。在web.xml文件中可主要包含如下配置信息:(1)Servlet的定义。(2)Servlet的初始化参数。(3)Servlet以及JSP的映射。(4)Filter的定义。(5)安全域配置参数。(6)welcome文件清单。(7)资源引用。(8)环境变量的定义。,(6)部署该程序到服务器Tomcat中,然后运行 另外,必须对系统进行测试和调试,总结,该程序的设计关键:(1)了解系统流程,给出系统分析,并给出图形描述;(2)数据库模型的设计:为了使对数据库的操作,具有通用性,采用属性文件,存放数据库连接的有关信息,通过对数据文件的读,获取该信息,实现连接;(3)网页之间是如何传递信息的?(4)jsp网页与servlet之间是如何传递信息的:信息由jspservlet如何实现;信息由servlet jsp如何实现;(5)应该自己逐步设计,绝不能找一个类似的程序修该一下。,