在漫长的java应用程序开发过程中,笨重的开发框架渐渐的不受人待见,取而代之的将是越来越自动化,越来越轻量级的框架。
学过java的人都应该知道,目前最流行的SSM组合,Spring
、SpringMVC
、Mybatis
。这三个框架要想组合在一起,需要编写大量的配置文件,而且这一过程使得整个项目开发在一开始就变得又臭又长。如此一来,对一个全自动化,不需要用户输入任何配置的智能框架的需求就变得格外重要了。于是乎,spring的作者就为我们开发者带来了福音 -> spring boot。
spring boot并不是一个全新的框架,而是对目前所有流行框架和库的一种整合,jar包管理有了Maven,今后框架的管理也有了Spring Boot。
- 第一步创建Maven工程
- 在pom.xml中加入如下配置
<!-- 继承spring boot父工程的依赖配置 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.4.RELEASE</version>
</parent>
<!-- 默认支持jdk版本为1.6 -->
<properties>
<java.version>1.8</java.version>
</properties>
<!-- springMvc依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 加入jsp依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- 加入jstl标签使用 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- Mybatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- PageHelper依赖,简化分页代码 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
- 创建一个启动类
package cn.java2016.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App
{
public static void main(String[] args)
{
// spring boot项目的启动入口
SpringApplication.run(App.class, args);
}
}
- 创建一个Controller类
package cn.java2016.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorldController
{
@RequestMapping("/helloworld")
public String helloworld()
{
// 转发到helloworld.jsp页面
return "helloworld";
}
}
- 在WEB-INF下创建一个jsp文件夹,并创建一个
helloworld.jsp

- 在
src/main/resource
目录下创建application.properties
文件,这个文件很重要,这就相当于我们以前配置过的所有的spring xml文件。 在这个文件中做如下配置,指定controller中return的jsp页面路径,注意application.properties里面不能包含中文
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
- 这时候回到App.java类中,启动 run as -> java application 运行spring boot项目,没有任何报错说明启动成功!
- 最后我们来访问localhost:8080/helloworld
(这里默认不需要加项目名)
这时候说明访问成功 - 我们还可以做更多的配置,设置UTF-8编码
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
server.tomcat.uri-encoding=UTF-8
- 数据库连接配置,这里需要mysql驱动的依赖
spring.datasource.url=jdbc:mysql:///boot_crm?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- 我们在分页会用到的分页配置,这里需要配置pagehelper的依赖
pagehelper.helper-dialect: mysql
pagehelper.reasonable: true
pagehelper.support-methods-arguments: true
pagehelper.params: count=countSql
pagehelper在spring boot中的用法
// 开始分页,第一个参数表示要查第几页,第二个参数表示一页有多少条数据
Page<Object> page = PageHelper.startPage(pageNum, 15);
// 这里写查询语句,如:查询所有customer表中的数据
List<Customer> list = customerMapper.selectByExample(example);
// 将分页后的数据返回
return page.toPageInfo();
- 配置登陆拦截器, 创建一个类LoginInterceptor
package cn.java2016.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 配置拦截器
*
* @author Administrator
*
*/
public class LoginInterceptor implements HandlerInterceptor
{
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception
{
// TODO Auto-generated method stub
}
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception
{
// TODO Auto-generated method stub
}
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception
{
// 没有登陆过的用户直接打回login页面
if (req.getSession().getAttribute("username") != null || req.getRequestURI().indexOf("/login") >= 0)
{
return true;
}
else
{
req.getRequestDispatcher("WEB-INF/jsp/index.jsp").forward(req, resp);
return false;
}
}
}
- 在App.java中配置拦截器, 需要继承
WebMvcConfigurerAdapter
,并重写addInterceptors
方法
public class App extends WebMvcConfigurerAdapter
{
@Override
public void addInterceptors(InterceptorRegistry registry)
{
// /** 表示拦截多层请求,如 /a/b/c/, 而 /* 只拦截一层请求,如: /a
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
}
...
}
- 如果你用的是mybatis的话 如果你的mapper.xml和mapper.java在cn.java2016.mapper包下,在启动类上加@MapperScan("cn.java2016.mapper"),配置mapper文件扫描器
...
@MapperScan("cn.java2016.mapper") // 扫描所有的mapper文件, 不能指定到包名,否则报错
public class App extends WebMvcConfigurerAdapter {
...