使用工具: idea
项目类型: maven (jar)
1. 建立表结构, 这里数据表和实体类对应字段简单设置为 id, username, password (代码略)
2. 创建maven工程, 并添加spring-boot及相关依赖
1. 创建maven项目(最简单的即可, 图略)
2. 添加spring-boot及相关依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热部署 idea默认运行期间不自动编译 需要提前配置一下-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!--整合mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
<scope>runtime</scope>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.4</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--json @responseBody/@requestBody-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
</dependencies>
其中, springBoot热部署在idea中需要配置一下. 因为idea只在程序未运行期间才能自动编译, 而在程序启动期间, 默认是不编译的. 所以, 这与springBoot热部署的作用冲突了, 需要配置两点
解决springBoot热部署失效的问题:
1. setting-->compiler-->Build project automatically前面的对勾
2. Ctrl+shift+A 搜索Registry, 找到 compiler.automake.allow.when.app.running ,打上对勾
设置完运行期间自动编译, spring-boot才能在idea上进行热部署
3. 配置文件
在resource下创建application.properties, 内容:
#端口号
server.port=8998
#数据库
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123
#前缀和后缀 这里把页面放在webapp下, 不再配置前缀
#spring.mvc.view.suffix=.html
4. 页面
注册页面: regist.html
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form action="/user/regist.do" method="post">
用户名:<input name="username" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="注册">
</form>
</body>
登录页面 login.html
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/user/login.do" method="post">
用户名:<input name="username" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="登录">
</form>
</body>
登录和注册成功页面:
<head>
<meta charset="UTF-8">
<title>成功</title>
</head>
<body>
<h1>登陆/注册成功</h1>
</body>
登录和注册失败页面:
<head>
<meta charset="UTF-8">
<title>失败</title>
</head>
<body>
<h1>登录/注册失败</h1>
</body>
5. 后端
(1). 在外层包(所有类和接口所在包的外面)创建springBoot启动入口
/**
* @SpringBootApplication相当于3个注解
* 1. @Configuration 定义一个配置类
* 2. @EnableAutoConfiguration spring boot自动根据jar包的依赖来自动配置项目
* 3. @ComponentScan spring自动扫描类上的注解, 并注入spring容器
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
(2). controller
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/login")
public String login(User user){
User userExist = userService.login(user);
if(userExist != null){
return "redirect:/success.html";
}
return "redirect:/fail.html";
}
@RequestMapping("/regist")
public String regist(User user){
userService.regist(user);
return "redirect:/success.html";
}
}
(3). service
public interface UserService {
User login(User user);
void regist(User user);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User login(User user) {
return userMapper.login(user);
}
@Override
public void regist(User user) {
userMapper.regist(user);
}
}
(4). dao
@Mapper
public interface UserMapper {
@Select("select id,username,password from user where username=#{username} and password = #{password}")
User login(User user);
@Insert("insert into user (id,username,password) values(#{id},#{username},#{password})")
void regist(User user);
}
问题:
1. 若入口类不放在所有包的外层, 它的注解会扫描不到这些包和类, 无法注入到spring容器
报错信息: There was an unexpected error (type=Not Found, status=404)
2. 关于springMVC返回视图的问题.
表单中若设置提交方式为post, 那么controller层, 数据返回时, 若返回 return"xxx.html", 直接返回静态视图, 会造成html无法解析post请求, 会造成 (type=Method Not Allowed, status=405). Request method 'POST' not support的错误
因此, 只能重定向, 或者将页面表单提交方式改为get