相关阅读:

阿里职位层级(附P级详细要求)

易到高管被原百度外卖CEO巩振兵逼下跪:职场人到中年的无奈

刚写完排序算法,就被开除了…

转载自:https://www.jianshu.com/p/ab6a9eaacaf3

前言

本文章详细的列出了开发一个传统JavaWeb项目需要注意的要点,从环境准备开始到三层架构搭建,需要注意的地方全部罗列出来。

第一部分:环境准备

1. Maven命令创建web骨架
mvn archetype:create -DgroupId=net.rocketa -DartifactId=mywebapp -DarchetypeArtifactId=maven-archetype-webapp注意web servlet版本(web.xml,3.1),Junit版本指定为4.X(这样Spring好通过注解的方式来运行单元测试)
2. 注意在IDEA中需要设置好MAVEN工程的Sources/Tests/Resources/Test Resources属性。
3. 日志依赖
slf4j:规范和接口具体的日志实现有:log4j、logback、common-logging

因此我们一般是使用slf4j接口+一种具体的日志实现+slf4j和这个具体日志实现的依赖整合

4. 数据库依赖
有2个依赖,需要注意,一个是驱动,一个是数据库连接池(C3P0,DBCP...)。驱动JAR包是运行期需要包含,编译期不需要的。
5. 持久层框架依赖
说白了,DAO层的框架依赖:MyBatis or Hibernate or ....比如除MyBatis本身的依赖需要引入之外,还需要引入MyBatis和Spring的整合依赖。
6. Web层依赖

比如,JSP中使用到的一些JSTL、标签、Ajax访问JSON等,还有需要注意的是,在编译期需要引入servlet-api。

7. Spring核心依赖
spring-core、spring-beans、spring-context
8. Spring和DB之间的整合依赖
Spring是需要介入DB的管理的,比如它的声明式事务。spring-jdbc、spring-tx
9. Spring对Web的一些整合依赖
spring-web、spring-webmvc
10. Spring对Junit的支持依赖

spring-test

NOSQL对事务的支持不是很好,它主要追求的是性能、高可用、分布式。

MySQL等关系型数据库对事务的支持是很成熟的,也是很可靠的落地方案。

第二部分:DAO层

NOSQL对事务的支持不是很好,它主要追求的是性能、高可用、分布式。

MySQL等关系型数据库对事务的支持是很成熟的,也是很可靠的落地方案。

1. 表

可以在项目中建立一个SQL文件,便于SQL的管理。

注意,表的存储引擎(事务的支持:innodb)、自动增长的特性、编码、主键和索引。

一个良好的习惯是:为所有的表都添加一个创建时间字段,用于记录,方便排查。

应该为表名、列名添加注释,方便其他工程师查阅。

应该注意SQL技巧,比如插入存在唯一约束的表中,如果出现冲突不想报错的话,可以:insert ignore into ….(可以通过返回的影响行数来进行判断)

2. Dao层实体

一些业务对象的建立,setter/getter/toString等就不说了,需要特别注意的是,除了表的字段之外,还需要什么属性?这里涉及到一个一对一、一对多,多对多的概念!

3. Dao层接口和mapper sql

MyBatis的特点:从SQL(参数+sql)映射到Entity/List(定制SQL、自由传递参数、结果集自动赋值)

使用MyBatis的方式:SQL写在XML中,或者注解提供SQL。更加推荐的是XML,因为更加灵活,XML提供的动态拼接功能也是比注解简单的多。

一个全局的mybatis配置文件+具体的SQL文件+DAO接口:让我们只需要设计接口,关注业务逻辑,解放出来。

在全局mybatis配置文件中重点注意:是否开启驼峰转换,获取数据库自增主键,列别名替换列名等。

注意DAO接口和具体的SQL文件之间的对应关系。

具体SQL写法中,比如#{},等需要引起注意。

输入参数类型parameterType,如果是多个基本类型,那么不用给出来。

即便返回的是List对象,我们的resultType依然指定的是集合中的对象类型。

在Mybatis的SQL文件中是可以通过OGNL表达式来对对象中的一些对象类型的属性进行赋值的!

表名.xxx 或者 表名.xxx as yyy 对于Mybatis而言,会忽略表名.前缀,也会忽略as。

另外,注意在Dao接口中,如果方法有多个基本类型参数,别忘了通过@Param来进行运行期参数标记!

总结:Dao层的工作逐渐演变成接口设计和SQL编写了,这种代码和SQL的分离方式,便于我们进行review,而Dao的拼接将在Service层完成。

4. 一些优化配置

比如,对带包路径的类型进行简化,通过配置扫描包。

比如,批量扫描SQL文件,通过自动扫描配置文件。

5. mybatis和spring需要整合

spring需要接管数据库

JDBC的一些连接信息,数据库连接池的一些配置信息,就是配置DataSource的过程。

spring和mybatis整合的核心

SqlSessionFactory是MyBatis的配置核心,把DataSource注入,并指明MyBatis的全局配置文件位置,typeAliasesPackage扫描,mapper文件位置扫描等。

spring通过动态代理帮助生成Dao的代理实现类(MapperScannerConfigurer)

注入SqlSessionFactory(通过sqlSessionFactoryBeanName),指明Dao接口的包路径basePackage

总之,配置的一项原则是:约定优于配置!!!

第三部分:进行Spring Junit单元测试

当我们进行了一些配置,写了一些SQL,Dao接口后,应该要进行Spring Junit单元测试,可以通过IDEA快速的生成测试用例(很好用的一个功能,因为IDEA可以帮助我们快速在test下建立与dao/service接口的同级目录下生成用例)

在用例中,我们只需要在类上打上注解:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration({"classpath:spring配置文件"})

加载Spring容器后,我们就可以在用例中注入对象,开始测试了!!!

第四部分:Service层

Service层需要关注几个要点:

业务对象的封装、web和service之间进行数据传递的DTO、异常的处理(业务异常)

注意Spring事务回退的默认机制是:运行时异常。

因此,我们在service层默认定义的业务异常一般extends RuntimeException。

一般而言,通过:

try{}catch(业务异常1 e1){}catch(业务异常2 e2){}catch(Exception e){throw new 业务异常(...);}

要知道,service层可能会发生业务异常,也可能发生一些其他异常,为了Spring都可以感知到,这里会把Exception异常转化成运行时异常

第五部分:Controller层

1. Restful

一种优雅的URI表述方式;资源的状态;状态的转移

Restful示例:GET     /product/list   查询操作GET    /product/{productId}/detailGET     /product/time/nowPOST    /product/{productId}/execution 添加、修改操作【非幂等性】POST    /product/{productId}/{userId}/orderDELETE  /product/{productId}/delete  删除操作PUT       修改操作【幂等性】URL设计:/模块/资源/{标示}/集合1/...
2.Controller中请求方法的细节处理

考虑几个方面:请求参数绑定、请求方式限制、转发与重定向、数据模型赋值、JSON数据返回、Cookie访问

@RequestMapping(value="/{productId:\d+}/detail",method=RequestMethod.GET,produces={"application/json;charset=UTF-8"})@ResponseBodypublic String detail(@PathVariable("productId") Long  productId,@CookieValue(value="userId",required=false) Long userId,Model model){# return "rediect:/xxx/yyy"# return "forward:/xxx/yyy"# return "view"}
3.整合配置Spring MVC

在web.xml中配置DispatcherServlet拦截请求,并指出Spring相关的配置文件。

开启Spring MVC的注解模式:

静态资源请求采用默认的servlet配置

配置JSP、ViewResolver的prefix「如/WEB-INF/jsp」suffix「如.jsp」

扫描web相关的Controller:

OK,先整理到这里。

如有收获,欢迎「分享 

「点赞「评论 

 妈妈常教导我,让我养成良好习惯。这样长大才能成为一个有用的人。良好的习惯是尊敬师长这样长大才能成为一个有用的人。良好的习惯是尊敬师长,爱护同学,对人有礼貌;是不粗心,做事情不拖拉;还是爱护公物,不浪费粮食。为什么呢?因为拥有良好习惯,做一个品德高尚的人,懂得尊重别人,才会得到别人的尊重。我要努力地做到这些。我有一些坏习惯,有时候学习很粗心,把一些会做的题做错。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃饭很慢,有的时候还剩饭。我还起床磨蹭,本来应该迅速地穿好衣服,但是,我总是磨磨蹭蹭地,速度很慢。“我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!”  在上幼儿园以前,我什么也不会干,就连穿衣服也是妈妈给我穿好,就要上幼儿园了,这样可不行,妈妈锻炼我要学会自己穿衣服。   有一天,妈妈把衣服摆在我面前,开始让我自己穿。一开始。我又哭又叫就是不穿,还把衣服扔的满地都是,然后坐在地上开始大哭,等了好长时间,妈妈还是不理我,我只好自己乖乖的把衣服穿好, 一出了房间门,妈妈就笑了起来,再看看我的衣服,毛衣和裤子都穿反了,我赶紧回房间又重新穿了一遍,这次穿好了,拿起外套,可是外套的扣子又扣不上了,扣子可调皮了,好像故意和我作对,我把扣子往扣眼——人类邪恶的根源;爱情——幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话:幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话“亲爱的!擦干你的眼泪,至高无上的爱情已经打开了我们的眼界,使我们成了它的崇拜者。是它,

 妈妈常教导我,让我养成良好习惯。这样长大才能成为一个有用的人。良好的习惯是尊敬师长这样长大才能成为一个有用的人。良好的习惯是尊敬师长,爱护同学,对人有礼貌;是不粗心,做事情不拖拉;还是爱护公物,不浪费粮食。为什么呢?因为拥有良好习惯,做一个品德高尚的人,懂得尊重别人,才会得到别人的尊重。我要努力地做到这些。我有一些坏习惯,有时候学习很粗心,把一些会做的题做错。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃饭很慢,有的时候还剩饭。我还起床磨蹭,本来应该迅速地穿好衣服,但是,我总是磨磨蹭蹭地,速度很慢。“我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!我打算在这学期里,改掉这些坏习惯。早上起来,迅速地穿好衣服,不拖拉。学习不粗心,仔细完成每一道题。吃饭的时候,要很快的把饭吃完,不剩饭。我要从一点一滴做起,逐渐养成良好习惯。我相信自己一定能成为一名品学兼优的好学生!”  在上幼儿园以前,我什么也不会干,就连穿衣服也是妈妈给我穿好,就要上幼儿园了,这样可不行,妈妈锻炼我要学会自己穿衣服。   有一天,妈妈把衣服摆在我面前,开始让我自己穿。一开始。我又哭又叫就是不穿,还把衣服扔的满地都是,然后坐在地上开始大哭,等了好长时间,妈妈还是不理我,我只好自己乖乖的把衣服穿好, 一出了房间门,妈妈就笑了起来,再看看我的衣服,毛衣和裤子都穿反了,我赶紧回房间又重新穿了一遍,这次穿好了,拿起外套,可是外套的扣子又扣不上了,扣子可调皮了,好像故意和我作对,我把扣子往扣眼——人类邪恶的根源;爱情——幸福和光明的源泉。我一直在这些思想的舞台上徘徊。突然我发现两个身影从我面前经过,坐在不远的草地上。这是一对从农田那边走过来的青年男女。农田那边有农民的茅舍。在一阵令人伤心的沉默之后,随着一声长叹,我听见从一个肺痨病人的嘴里说出了这样的话:“亲爱的!擦干你的眼泪,至高无上的爱情已经打开了我们的眼界,使我们成了它的崇拜者。是它,

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

Java Web项目开发从0开始的要点!相关推荐

  1. MyEclipse搭建java Web项目开发环境

    MyEclipse搭建java Web项目开发环境 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭 ...

  2. java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...

    首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...

  3. 进行Java Web项目开发需要掌握的技术

    目前, 国内外信息化建设已经进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.概括一下,实施Ja ...

  4. Java Web项目开发流程

    1.Web项目开发流程图解 2.Web项目开发的细节(转载) 任何一个项目或者系统开发之前都需要定制一个开发约定和规则,这样有利于项目的整体风格统一.代码维护和扩展.由于Web项目开发的分散性.独立性 ...

  5. Java Web项目开发灵感和知识点总结

    关于项目开发技术方案 基本骨架: A:DB(Mysql.Oracle)+ JDBC +javaBean+JSP (M1模型:视图与控制层混合) 打单 B:JSP(JSTL/EL)(AJAX) + se ...

  6. java项目如何单元测试_大家java web项目开发做单元测试吗?

    java web项目测试用Web的测试工具,如HtmlUnit,JWebUnit等. main()方法就可以测试,在main方法中获得connection对象将他输出就可以了. 如果正常输出一大串就是 ...

  7. 亮剑java web_为什么《亮剑Java Web 项目开发案例导航》第二个项目运行不了?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大二学学生党一枚,吧里有人也在看吗?我调试了一周里面的 "飞达商贸POS系统"项目,总是在myeclicpse中发布失败,有近来运行过 ...

  8. 新手小白Linux(Centos6.5)部署java web项目(mongodb4.0.2安装及相关操作)

    红帽企业或CentOS的Linux上安装MongoDB的社区版: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat ...

  9. JAVA Web项目开发SSM框架搭建(第一天)

  10. Java Web实战开发 | Web项目的创建与运行

    01Web项目的创建与运行 1●创建项目 在完成了IDE.Tomcat服务器以及数据库的安装后,Java Web项目开发集成环境已经准备就绪,可以进行Java Web应用系统的开发.下面通过例1-1讲 ...

最新文章

  1. cmd进入Oracle的sql*plus
  2. 算法导论-动态规划(dynamic programming)
  3. dex文件结构(二):dex文件加载基本原理
  4. error while loading shared libraries: libz.so.1错误
  5. python 利用 whoosh 搭建轻量级搜索
  6. 数据库基本概念 - 表、字段、sql语句
  7. OpenStack在线迁移
  8. 线性规划实战—投资的收益和风险
  9. lua cocos 动画回调
  10. 泛化,过拟合,欠拟合素材(part1)--python机器学习基础教程
  11. 服务器安全维护包含,服务器安全维护包含
  12. vue中多行文本标签_vue控制多行文字展开收起的实现示例
  13. Sublime的Package Control 及 Emmet插件的安装,Tab键快速html和css代码
  14. 查看被Linux干掉的进程,Linux 查看进程被杀死的详情
  15. 49个Python学习资源:从初学者到高级玩家都有了
  16. 记一次服务器上架的总结和反思
  17. 图:试图播放的文件扩展名与文件格式不匹配。播放该文件可能会导致意外行为...的解决办法
  18. 【安卓】设置界面为横屏的设置方法
  19. mkv文件怎样转成mp4
  20. win10误删的注册表能还原吗_教你手动还原Win10注册表?

热门文章

  1. React Native : AsyncStorage 存储
  2. SVN创建项目以及检出项目
  3. ISCSI LINUX(RHEL)的搭建与配置
  4. 本人译著《Professional Xcode 3》现已翻译完毕
  5. poj 1789 Truck History prim最小生成树 基础!!!!
  6. poj 1962 Corporative Network 并查集,很容易超时,大家要注意合并
  7. 如何在 Mac 上将照片导出为不同的文件格式?
  8. macOS Monterey兼容哪些Mac电脑?
  9. XStream 初探,很给力
  10. FZU 1054 阅读顺序