更新时间:2020-05-28 11:25:32 来源:极悦 浏览1810次
本文章详细的列出了开发一个传统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等关系型数据库对事务的支持是很成熟的,也是很可靠的落地方案。
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写法中,比如#{},<![CDATA[...]]>等需要引起注意。
输入参数类型parameterType,如果是多个基本类型,那么不用给出来。
即便返回的是List对象,我们的resultType依然指定的是集合中的对象类型。
在Mybatis的SQL文件中是可以通过OGNL表达式来对对象中的一些对象类型的属性进行赋值的!
表名.xxx或者表名.xxx as yyy对于Mybatis而言,会忽略表名.前缀,也会忽略as。
另外,注意在Dao接口中,如果方法有多个基本类型参数,别忘了通过Param来进行运行期参数标记!
总结:Dao层的工作逐渐演变成接口设计和SQL编写了,这种代码和SQL的分离方式,便于我们进行review,而Dao的拼接将在Service层完成。
4.一些优化配置
比如,对带包路径的类型进行简化,通过配置扫描包。
比如,批量扫描SQL文件,通过自动扫描配置文件。
1.Restful
一种优雅的URI表述方式;资源的状态;状态的转移
Restful示例:
GET/product/list查询操作
GET/product/{productId}/detail
GET/product/time/now
POST/product/{productId}/execution添加、修改操作【非幂等性】
POST/product/{productId}/{userId}/order
DELETE/product/{productId}/delete删除操作
PUT修改操作【幂等性】
URL设计:
/模块/资源/{标示}/集合1/...
2.Controller中请求方法的细节处理
考虑几个方面:请求参数绑定、请求方式限制、转发与重定向、数据模型赋值、JSON数据返回、Cookie访问
RequestMapping(value="/{productId:\\d+}/detail",method=RequestMethod.GET,produces={"application/json;charset=UTF-8"})
ResponseBody
public 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的注解模式:
<mvc:annotation-driven/>
静态资源请求采用默认的servlet配置
<mvc:default-servlet-handler/>
配置JSP、ViewResolver的prefix「如/WEB-INF/jsp」suffix「如.jsp」
扫描web相关的Controller:
<context:component-scan base-package="">
Javaweb相关视频教程
2020最新JavaWeb教程:
EL&JSTL视频教程:
Filter&Listener视频教程:
JSP视频教程:
Servlet视频教程:
以上就是极悦java培训机构的小编针对“学习Javaweb的注意要点之Javaweb视频学习”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习