springboot简单使用之登录注册模块

开发环境与工具如下:

令人舒适的音乐+win10+IDE+springboot1.5.19,结合Spring DataJPA,Mysql

创建项目:

1.选择dependency:

2.配置文件:

在src/main/resources下创建application.yml文件用于配置属性:

#mysql 配置
spring:
  datasource:
  #添加characterEncoding=utf-8解决数据库乱码
    url: jdbc:mysql://localhost:3306/库名?characterEncoding=utf-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  #jpa 配置
  jpa:
    hibernate:
    #项目启动后根据实体类更新数据库的表
      ddl-auto: update 
      #在控制台输出用到的数据库语句
    show-sql: true
  #thymeleaf 配置,取消缓存,这样子就可以在只修改完html后ctrl+f9重新build一下
  thymeleaf:
    cache: false

3.自己创建包 entity ,包下创建实体类User(id,username,password),其代码如下:

@Entity(name="tbl_user")    //项目启动后,在关联的数据库中创建tbl_user表
class User{
    @Id    //该注解表示该属性是一个主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)    //主键自动生成
    private Integer id;
    @Column    //定制生成字段的属性,后面可以追加(name="字段名"),若没有配置,则默认是属性值username
    private String username;//用户名
    @Column
    private String phone;//手机号码
    @Column
    private String password;//密码
    
    //getter和setter

4.创建包 repository,包下创建接口类UserRepository,并实现JpaRepository<>,其代码如下:

/**
*就好像mapper.java文件,jpa为我们自动完成了一些基本mysql语句,增删改查,分页查询,排序查询使用时很方便
*说明一下就是JpaRepository<>尖括号里面属性,第一个是指明User类,Integer则是主键的数据类型即id为Integer
*/
public interface UserRepository extends JpaRepository<User,Integer>{
    User findByUsernameAndPassword(String username,String password);
}

5.其实我想创建一个service包,包下有接口类IUserService,实现该类的类(@Service)

ImpUserService,业务层,但是这次的模块实现比较基础吧,省时间。所以直接使用controller层,即我们创建包controller,包下创建类UserController,并用@Controller注解该类。如:

@Controller
class UserController{
    
    @Autowired
    UserRepository userRepository;
    
    //实现register功能
    @PostMapping("/user/handleRegister")
    public String handleRegister(User user){
        userRepository.save(user);//UserRepository自带简单的sql语句,即insert into...
        return "login";
    }
    
    //实现login功能
    @PostMapping("/user/handleLogin")
    public String handleLogin(@RequestParam("username")String username,
                                @RequestParam("password")String password
                            HttpSession session,Map<String,Object> map){
        User user = userRepository.findByUsernameAndPassword(username,password);
        if(user != null){
            session.setAttribute("username",user.getUsername());
            return "redirect:/main.html";//redirect重定向
        } else {
            //向页面输出的内容
            map.put("msg","用户名或密码错误");
            return "login";
    }
}

6.接下来你会发现上面Usercontroller没有写方法来实现显示登录页面,name我们如何显示登录,Springboot为我们准备很多自动配置(autoConfig),我们可以尝试使用它们。我们创建包config,包下创建MyMvcConfig,并用@Configuration注解,同时继承WebMvcConfigurerAdapter,有人可能会发现该WebMvcConfigurerAdapter类竟然被划上横线,首先注意的是,翻上去看看我们使用的Springboot版本是1.5.19,那么如果你使用了Springboot2.0版本以上的话就会划上横线,提示该类已经被淘汰了,可以用实现WebMvcConfigurer的操作。

@Configuration
//public class MyMvcConfig implements WebMvcConfigurer
public class MyMvcConfig extends WebMvcConfigurerAdapter{
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //super.addViewControllers(registry);
        //测试所用
        registry.addViewController("/").setViewName("success");
    }
    
    @Bean
    public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
        WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                //super.addViewControllers(registry);
                register.addViewController("register").setViewName("register");
                //在客户端输入login.html就会跳转到该页面,
                registry.addViewController("login").setViewName("login");
                //在客户端输入main.html,跳转到index.html页面
                registry.addViewController("main.html").setViewName("index");
            }
        };
        return adapter;
    }
}

使用2.0以上版本的是

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry viewControllerRegistry) {
        viewControllerRegistry.addViewController("register").setViewName("register");
        viewControllerRegistry.addViewController("login").setViewName("login");
        viewControllerRegistry.addViewController("main.html").setViewName("index");
    }
}

当然配置上面的代码还不够显示页面,这时我们需要导入thymeleaf依赖,

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

7.我们自己弄一个简单的注册和登录页面,在src/main/resources/templates下新建HTML文件名为login.html,在<html>标签中加载thymeleaf模块的xmlns,代码如下:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <title>注册</title>
</head>
<body>
<!--th:action=""是thymeleaf语法,可以去学习-->
<form th:action="@{/user/handleRegister}" method="post">
    <label for="username">用户名</label>
    <input id="username" type="text" name="username">
    <label for="phone">手机号</label>
    <input id="phone" type="text" name="phone">
    <label for="password">密码</label>
    <input id="password" type="password" name="password">
    <button type="submit"> 登录</button>
</form>
</body>
</html>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="utf-8">
	<title>登录</title>
</head>
<body>
	<!--th:action=""是thymeleaf语法,可以去学习-->
	<form th:action="@{/user/handleLogin}" method="post">
		<label for="username">用户名</label>
		<input id="username" type="text" name="username">
		<label for="password">密码</label>
		<input id="password" type="password" name="password">
		<button type="submit"> 登录</button>
		<!--就是UserController类中的map.put("msg","用户名或密码错误")-->
		<p th:text="${msg}"></p>
	</form>
</body>
</html>

index.html(成功后显示用户名):

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="utf-8">
	<title>登录</title>
</head>
<body>
	<p>[[${session.username}]]</p>
</body>
</html>

8.我们尝试运行一下项目,输入地址:http://localhost:8080/register,然后出现了template might not exist or might not be accessible by any of the configured Template Resolvers,这是因为thymeleaf无法解析html模板,thymeleaf下载的依赖版本比较低,详细可以看依赖库,配置MyMvcConfig.class 无法跳转页面,所以我们在pom.xml文件中更改properties标签内容,使用高版本的thymeleaf

    <properties>
        <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
        <!-- 布局功能的支持程序 thymeleaf3主程序 layout2以上版本 -->
        <!-- thymeleaf2 layout1-->
        <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
        <java.version>1.8</java.version>
    </properties>

9.修改bug,尝试运行,http://localhost:8080/register,显示注册页面并输入信息:

注册后根据controller跳转到登录页面:

登录后显示主页并显示用户名:

简单的整个注册登录模块我们就基本完成了,我也会抽时间就是优化一下页面,并持续更新自己的学习内容,第一次写云社区,感觉写得很一般吧,有建议请大家提出,欢迎大家的批评与评价(bgm:colors(Audien Remix)--Halsey)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券