使用 IntelliJ IDEA 搭建基于 Maven+SSM 的 Java Web 开发法框架

最近接触了 Java 开发,相比 Android 开发,技术栈的差异还是蛮大的,许多新的知识需要学习,这里记录一下开发环境的搭建过程,对于新手来说这个过程可能并不会太容易,开发工具自然是 IntelliJ IDEA,毕竟和 Android Studio 的体验类似,个人感觉比 eclipse 更好用。

一、创建 Maven web 项目

首先创建基于 Maven 的 web 项目,以方便后续的项目管理,然后再整合 SSM 框架。由于 IntelliJ IDEA 已经集成了 Maven 插件,可以不用额外安装,创建 Maven web 项目基本的步骤如下:

1、选择 maven-archetype-webapp

1

2、GroupId 可以按照包名的规则填写,ArtifactId 可以填写项目名称

2g

3、选择 Maven 路径

3

4、确定最终的项目名称及路径等信息

4

5、上一步 Finish 后就开始 Maven web 项目构建了,注意右下角会有如下提示,选择 Enable Auto-Import 即可,构建可能要一小段时间,不妨起来活动下身体。

5

6、构建成功后的项目结构如下,这里需要再手动完善下目录结构,在 main 下创建 java、resources目录(按需创建即可)

6

7、为了创建的目录更好的被编译器识别,打开 Project Structure 分别标记先创建的目录

7

8、Java web 项目要运行自然需要一个 web 容器,这里使用 Tomcat,要先安装好,然后通过 Edit Configurations 选项打开如下页面进行配置

8

9、Tomcat 配置,给 Tomcat 取个名字,选择已安装的 Tomcat 版本,运行 web 项目的浏览器,占用的端口号等

9

10、切换到 Deployment 标签

10

11、部署 Tomcat,还可以配置 Application context 即 web 项目的默认访问路径,这里先不配置,到这里 web 项目就可以运行了

11

12、可点击编译器上边的绿三角还运行项目,不出意外的话可以看到如下页面,这就成功的迈出了第一步。如果上一步配置了Application context,例如 /myjavaee,则通过 http://localhost:8080/myjavaee 同样可以访问到如下页面。

12

一、整合 SSM 框架

上边已经成功的创建了 Maven web 项目,下面开始整合 SSM 框架,即 Spring MVC + Spring + MyBatis,这里采用 xml 的配置方式,最终的目录结构如下,需要的文件自行创建。


13

1、首先在 pom.xml 中引入相关库的 Maven 依赖,关键的部分如下:

  
    4.3.23.RELEASE
  

  
    
    
      org.springframework
      spring-context
      ${spring.version}
    
    
    
      org.springframework
      spring-tx
      ${spring.version}
    
    
    
      org.springframework
      spring-jdbc
      ${spring.version}
    
    
    
      org.springframework
      spring-web
      ${spring.version}
    
    
    
      org.springframework
      spring-webmvc
      ${spring.version}
    
    
    
      org.mybatis
      mybatis
      3.5.1
    
    
    
      org.mybatis
      mybatis-spring
      1.3.2
    
     
    
      log4j
      log4j
      1.2.17
    
    
    
      mysql
      mysql-connector-java
      8.0.15
    
    
    
      commons-dbcp
      commons-dbcp
      1.4
    
    
    
      javax.servlet
      jstl
      1.2
    
    
      javax.servlet
      javax.servlet-api
      4.0.1
      provided
    
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.9.8
    
  

2、web.xml、dispatcher-servlet.xml、applicationContext.xml是比较关键的几个配置文件

web.xml 作为 Web 应用的核心配置文件,会加载其它两个:

  
  
    contextConfigLocation
    /WEB-INF/applicationContext.xml
  
  
  
    org.springframework.web.context.ContextLoaderListener
  
  
  
  
    dispatcher
   
    org.springframework.web.servlet.DispatcherServlet
    
        
        
    
    1
  
  
  
    dispatcher
    /
  

dispatcher-servlet.xml 主要是 Spring MVC 相关的配置:

    
    
    
    
    
    
    
    
        
            
            
        
    
    
    
    

applicationContext.xml 主要进行了 MyBatis 数据持久化相关Bean的配置,以及 Service Bean 的初始化:

    
    
    
    
    
    
    
    
        
        
        
        
        
        
        
        
        
        
    
    
    
        
        
        
        
        
    
    
    
        
        
        
        
        
    
    
    
        
    
    
    

3、MyBatis 映射器

applicationContext.xml 中已经完成了 MyBatis 的相关配置,这里将 RoleMapper.xml 映射器文件放到了 resources目录下,和接口文件分开:


    
        
        
        
    

    
        insert into t_role (role_name, note)
        values (#{roleName}, #{note})
    

    

    

    
        update t_role
        set role_name = #{roleName},
            note      = #{note}
        where id = #{id}
    

    
        delete
        from t_role
        where id = #{id}
    

对应的接口文件 RoleDao 如下:

@Repository
public interface RoleDao {
    public int insertRole(Role role);
    public Role getRole(Long id);
    public List getAllRole();
    public  int deleteRole(Long id);
    public  int updateRole(Role role);
}

使用了 @Repository 注解会被 Spring 扫描以生成 Mapper 对象,即 RoleDao 对象,方便依赖注入。

使用 MyBatis 时,我们有时候难以避免的在 xml 文件和接口文件之间切换跳转,查找对应的关系,Free Mybatis 可以非常方便的帮我们完成这个工作,值得一试。

使用 MyBatis 时,一般用 log4j 打印 sql 日志,但是需要提取 sql 并完成参数的填充还是一件麻烦事。没关系,MyBatis log 框架就是专门干这个事的,值得拥有。

4、服务类

在 Spring MVC 中一般通过服务类来进行具体的数据库操作逻辑,然后在控制器中使用服务类。服务类一般通过接口模式实现,方便扩展:

public interface RoleService {
    public Role getRole(Long id);
    public List getAllRole();
}
@Service
public class RoleServiceImpl implements RoleService {

    @Autowired
    private RoleDao roleDao = null;
    
    @Override
    @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)
    public Role getRole(Long id) {
        return roleDao.getRole(id);
    }

    @Override
    @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)
    public List getAllRole() {
        return roleDao.getAllRole();
    }

}

使用了 @Service 注解,同样会被 Spring 扫描生成 Bean 保存在 IoC 容器中,为后续的依赖注入准备。同时用 @Autowired 注解实现了 roleDao 对象的注入。@Transactional 是 Spring 事务配置注解。

5、控制器

控制器是 Spring MVC 的核心,主要的功能是获取请求参数,根据参数处理业务逻辑,最后绑定模型和视图并返回。我们编写的控制器类如下:

@Controller
@RequestMapping("/role")
public class RoleController {
    @Autowired
    private RoleService roleService;

    @RequestMapping("/getRoles")
    public ModelAndView getRoles() {
        List roles = roleService.getAllRole();
        ModelAndView mv = new ModelAndView();
        mv.setViewName("role");
        mv.addObject("roles", roles);
        return mv;
    }

    @RequestMapping("/getRole/{id}")
    @ResponseBody
    public Object getRole(@PathVariable("id") long id) {
        Role role = roleService.getRole(id);
        return role;
    }
}

首先控制器类要用 @Controller 注解标注,之前已经在 dispatcher-servlet.xml 中配置要扫描控制器类。同时还在类和方法上使用了 @RequestMapping 注解,用来指定 URI 对应哪个请求处理方法。

6、视图渲染

Spring MVC 默认使用 JstlView 进行视图渲染,前边控制器类的第一个方法里,通过 mv.setViewName("role")设置了逻辑视图名 role,根据 dispatcher-servlet.xml 中视图解析器的配置,会用 /WEB-INF/jsp/role.jsp文件去相应对应请求,通过 mv.addObject("roles", roles) 添加了模型数据会传递到 jsp 中,用 EL 读取。例如:${roles}

role.jsp 的内容如下:

<%@ page pageEncoding="utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    角色信息



        
编号 名称 备注

就是显示一个 table。启动 web 应用,在浏览器输入 http://localhost:8080/role/getRoles 就可以看到如下页面:

14

返回 JSON 格式的数据也是比较常见的,在控制器类的第二个方法中使用了 @ResponseBody 注解,这样会把返回的数据通过 JSON视图转换成JSON格式的数据,在浏览器输入 http://localhost:8080/role/getRole/1 可以看到:

15

到这里,已经完成了框架的整合,基本的流程已经走通了,当然这些只是基础内容,SSM 框架中还有更多的内容值得我们去深入了解。

文中demo地址:https://github.com/SheHuan/MyJavaEE

你可能感兴趣的:(使用 IntelliJ IDEA 搭建基于 Maven+SSM 的 Java Web 开发法框架)