一. MVC
1)概念:MVC是一种使用Model-View-Controller设计Web应用程序的模式
2)组成:
- Model ——业务逻辑层:应用层的程序核心,主要用于存储或者处理数据。实现业务逻辑层对实体类相应数据库的操作。
- View —— 表示层:用户接口层,将业务逻辑层的数据返回显示给用户
- Controller —— 控制:处理用户交互
3)业务逻辑:
MVC作为表现模式:
二. SSH集成框架:
1)Struts:系统的整体基础架构,负责MVC分离。
2)Hibernate:对持久层提供支持
3)Spring:管理Struts和Hibernate
具体做法:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(Data Access Object)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后Spring做管理。
2.1 Struts
SSH的基础框架,负责MVC分离:
1. Model:
实现业务逻辑层对实体类相应数据库的操作,分为两部分:
- ActionForm:用户的Request请求参数封装成ActionForm对象,由ActionServlet装发给Action,Action根据ActionForm里面的请求参数处理用户的请求。
- JavaBean:封装底层的业务逻辑,包括数据库访问等
2. View:
- 展示数据部分,该部分采用JSP(或者:HTML,PHP)实现。
- Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。
3. Controller:
控制用户交互,主要分为两个部分:
- ActionServlet:系统核心控制器。
- 负责:拦截所有HTTP请求,然后根据请求决定是否要转给业务逻辑层
- 继承:HttpServlet
- Action:业务逻辑控制器。
- 由用户提供
- 该控制器负责接收ActionServlet的请求,并根据该请求调用模型的业务逻辑层方法处理请求,最后将处理结果返回给JSP页面显示。
2.2 Spring
2. 基本业务流程
1)在表示层中,首先通过JSP页面实现交互界面,负责接收请求(Request)和传送响应(Response),
然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。
2)在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
3)在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
3. 优点
不仅实现了视图、控制器和模型的彻底分离,还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
PS:
三. JavaBean
3.1. 概念:
JavaBean:完成特定功能的组件,是符合一定规范编写的Java类。——对应数据库
Bean:保存数据的实体,通常与数据库中的表对应,也称为:entity,domain,pojo,比如:apple,person。
简单JavaBean:如果在一个类中只包含属性、setter、getter方法。对于简单的JavaBean几个名词:
(1)VO:与简单Java对象对应,专门用于传递值的操作上
(2)POJO:简单Java对象
(3)TO:传输对象,进行远程传输时,对象所在的类必须实现java.io.Serializable接口。
3.2. 规范:
1)所有属性为private
2)提供默认构造方法
3)提供getter()和setter()方法
4)实现serializabel 接口
import java.io.Serializable;
package blog.csdn.joywy;
//必须实现Serializable接口 public class SimpleBean implements Serializable{ // 属性都必须为:private private String name; private int age; //有public的setter()和getter()方法 public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } public String getName(){ return this.name; } public int getAge(){ return this.age; } }
3.2 WEB开发的标准目录结构
3.3 JSP & JavaBean
在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁,并且实现了HTML和Java代码分离,有利于日后维护。
1.打包编译:编译时直接使用javac -d . SimpleBean.java命令根据package的定义打包编译。
2.Tomcat中classpath的配置:
所有的class要进行访问时都必须在classpath中进行配置,在Tomcat中依然可以使用,在Web开发中,Tomcat安装目录的lib文件夹、WEB-INFclasses和WEB-INFlib文件夹实际上都表示了classpath,所以直接将类或jar包复制到这些文件夹中就可以直接使用了。
1 <%@ page contentType="text/html" pageEncoding="GBK"%> 2 <%@ page import="blog.csdn.joywy.*"%> <!-- 导入blog.csdn.joywy包 --> 3 <html> 4 <head><title>欢迎来到望星空</title></head> 5 <body> 6 <% 7 SimpleBean simple = new SimpleBean(); //声明并实例化SimpleBean对象 8 simple.setName("Joywy"); //设置name属性 9 simple.setAge(23); //设置age属性 10 %> 11 <h3>姓名:<%=simple.getName()%></h3> <!-- 输出name属性的内容 --> 12 <h3>年龄:<%=simple.getAge()%></h3> <!-- 输出age属性的内容 --> 13 </body> 14 </html>
使用<jsp:useBean>:
除了使用import的语句之外,也可以使用JSP中提供的:<jsp:useBean>指令完成操作,指令的操作语法如下所示:
1. <jsp:useBean id="实例化对象名称" scope=“保存范围” class=“包.类名称“/>
2. 主要属性:
(1)id:表示实例化对象的名称
(2)scope:表示此对象保存的范围,一共有四种属性范围:page、request、session、application
(3)class:对象所对应的包.类名称
1 <%@ page contentType="text/html" pageEncoding="GBK"%> 2 <jsp:useBean id="simple" scope="page" class="blog.csdn.joywy.SimpleBean"/> 3 <html> 4 <head><title>欢迎来到望星空</title></head> 5 <body> 6 <% 7 simple.setName("Joywy"); 8 simple.setAge(23); 9 %> 10 <h3>姓名:<%=simple.getName()%></h3> 11 <h3>年龄:<%=simple.getAge()%></h3> 12 </body> 13 </html>
在使用<jsp:useBean/>指令时,实际上会默认调用SimpleBean类中的无参构造方法进行对象实例化,当修改SimpleBean.java文件后,如果要想让其起作用,则需要重新启动服务器,我们可以通过在Tomcat中直接配置自动加载的操作,这样即使不重新启动服务器,JavaBean修改后也可以被立即加载进来。重新加载的配置如下:在Tomcat安装目录下conf/server.xml文件中进行配置
<Context path="/joywy" docBase="D:myweb" reloadable="true"/>