新建Maven project项目时,需要选择archetype。archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。原型将帮助作者为用户创建Maven项目模板,规范了项目的结构。根据所创建项目的不同,常见的三种模板有:
src/main/java 项目的源代码所在的目录src/main/resources 项目的资源文件所在的目录src/main/filters 项目的资源过滤文件所在的目录src/main/webapp 如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下。src/test/java 测试代码所在的目录src/test/resources 测试相关的资源文件所在的目录src/test/filters 测试相关的资源过滤文件所在的目录目录实例图:

从一个用户访问一个网站的情况来看,对应着项目代码结构来分析,可以贯穿整个代码分层:


utils包作为一个工具类包,工具类:可以动态地生成DAO的实现类(或者说可以动态生成DAO的代理类)
model层即数据库实体层,也被称为entity层,pojo层。

是用于存放实体的类的
类中定义了多个类属性,并与数据库表的字段保持一致,一般数据库一张表对应一个实体类,类属性同表字段一一对应。
主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。
作为一个报错包,可自定义创建报错类,见名知意

dao层即数据持久层,也被称为mapper层,叫数据持久层,先设计接口,然后在配置文件中进行配置其实现的关联。
dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。
数据持久化操作就是指,把数据放到持久化的介质中,同时提供增删改查操作,比如数据通过hibernate插入到数据库中
一般都是在dao层下写给接口,然后在impl包下实现类连接接口,然后重写方法
- 业务逻辑层,完成功能的设计 和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。
- 接下来就可以在service层调用dao层的接口进行业务逻辑应用的处理。
- service的impl是把mapper和service进行整合的文件 封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。
controller层即控制层,控制业务逻辑service
controller层的功能为请求和响应控制,负责前后端交互。
controller层接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端
controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行
主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等
什么是架构分层?
分层架构是将软件模块按照水平切分的方式分成多个层,一个系统由多层组成,每层由多个模块组成。同时,每层有自己独立的职责,多个层次协同提供完整的功能。比如,我们经常提到的MVC架构,就是一种非常典型非常基础的分层方式
系统架构分层之后,往往需要达到以下目标:

一般分层架构由以下组成:
RPC(采用Service提供RPC接口服务)”和“HTTP(通过Web封装成Http接口服务)”。这层一般不抛出异常,否则会导致client会出现不可控的错误,以通过标准的ErrorCode&ErrorMeg提示为主,一般还会有流量控制和权限等控制监控在这层三层架构 ,通常就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

表现层(PL):
业务逻辑层(BLL):
数据访问层(DAL):
在开源技术框架中,表现层实现的代表作品是Struts1/2、Spring MVC,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate和Mybatis
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,虽然MVC并不是严格意义上的三层架构,但可以与传统的三层架构进行对比
处理请求的过程:
请求->servlet->调取service(业务逻辑代码)->调取dao层(持久化层)->db(mysql)
简单来说:

模型(Model):
视图(View):
控制器(Controller):
标准的MVC交互模型如下图:

Web MVC标准架构,如下图所示:

MVC严格说是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话,而C层直接与三层中的BLL进行对话。
三层架构和MVC可以共存。三层架构是基于业务逻辑来分的,而MVC是基于页面来分的。MVC是表现模式(Presentation Pattern),三层架构是典型的架构模式(Architecture Pattern)。
三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,而是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不同领域的技术。
jar包:
war包
其区别:
jar是java普通项目打包,通常是开发时要引用通用类,打成jar包便于存放管理。当你使用某些功能时就需要这些jar包的支持,需要导入jar包。
war是java web项目打包,web网站完成后,打成war包部署到服务器,目的是为了节省资源,提供效率。
jar文件(扩展名为. Jar,Java Application Archive)包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)等。通常是开发时要引用的通用类,打成包便于存放管理。简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。
war文件(扩展名为.War,Web Application Archive)包含全部Web应用程序。在这种情形下,一个Web应用程序被定义为单独的一组文件、类和资源,用户可以对jar文件进行封装,并把它作为小型服务程序(servlet)来访问。 war包是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下