SpringBoot简单使用

157 阅读4分钟

在漫长的java应用程序开发过程中,笨重的开发框架渐渐的不受人待见,取而代之的将是越来越自动化,越来越轻量级的框架。
学过java的人都应该知道,目前最流行的SSM组合,SpringSpringMVCMybatis。这三个框架要想组合在一起,需要编写大量的配置文件,而且这一过程使得整个项目开发在一开始就变得又臭又长。如此一来,对一个全自动化,不需要用户输入任何配置的智能框架的需求就变得格外重要了。于是乎,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 {
...