Java Web项目开发从0开始的要点!
相关阅读:
阿里职位层级(附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开始的要点!相关推荐
- MyEclipse搭建java Web项目开发环境
MyEclipse搭建java Web项目开发环境 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭 ...
- java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...
首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...
- 进行Java Web项目开发需要掌握的技术
目前, 国内外信息化建设已经进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.概括一下,实施Ja ...
- Java Web项目开发流程
1.Web项目开发流程图解 2.Web项目开发的细节(转载) 任何一个项目或者系统开发之前都需要定制一个开发约定和规则,这样有利于项目的整体风格统一.代码维护和扩展.由于Web项目开发的分散性.独立性 ...
- Java Web项目开发灵感和知识点总结
关于项目开发技术方案 基本骨架: A:DB(Mysql.Oracle)+ JDBC +javaBean+JSP (M1模型:视图与控制层混合) 打单 B:JSP(JSTL/EL)(AJAX) + se ...
- java项目如何单元测试_大家java web项目开发做单元测试吗?
java web项目测试用Web的测试工具,如HtmlUnit,JWebUnit等. main()方法就可以测试,在main方法中获得connection对象将他输出就可以了. 如果正常输出一大串就是 ...
- 亮剑java web_为什么《亮剑Java Web 项目开发案例导航》第二个项目运行不了?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大二学学生党一枚,吧里有人也在看吗?我调试了一周里面的 "飞达商贸POS系统"项目,总是在myeclicpse中发布失败,有近来运行过 ...
- 新手小白Linux(Centos6.5)部署java web项目(mongodb4.0.2安装及相关操作)
红帽企业或CentOS的Linux上安装MongoDB的社区版: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat ...
- JAVA Web项目开发SSM框架搭建(第一天)
- Java Web实战开发 | Web项目的创建与运行
01Web项目的创建与运行 1●创建项目 在完成了IDE.Tomcat服务器以及数据库的安装后,Java Web项目开发集成环境已经准备就绪,可以进行Java Web应用系统的开发.下面通过例1-1讲 ...
最新文章
- cmd进入Oracle的sql*plus
- 算法导论-动态规划(dynamic programming)
- dex文件结构(二):dex文件加载基本原理
- error while loading shared libraries: libz.so.1错误
- python 利用 whoosh 搭建轻量级搜索
- 数据库基本概念 - 表、字段、sql语句
- OpenStack在线迁移
- 线性规划实战—投资的收益和风险
- lua cocos 动画回调
- 泛化,过拟合,欠拟合素材(part1)--python机器学习基础教程
- 服务器安全维护包含,服务器安全维护包含
- vue中多行文本标签_vue控制多行文字展开收起的实现示例
- Sublime的Package Control 及 Emmet插件的安装,Tab键快速html和css代码
- 查看被Linux干掉的进程,Linux 查看进程被杀死的详情
- 49个Python学习资源:从初学者到高级玩家都有了
- 记一次服务器上架的总结和反思
- 图:试图播放的文件扩展名与文件格式不匹配。播放该文件可能会导致意外行为...的解决办法
- 【安卓】设置界面为横屏的设置方法
- mkv文件怎样转成mp4
- win10误删的注册表能还原吗_教你手动还原Win10注册表?