基于springboot搭建的web系统架构的方法步骤

下面详细讲解基于Spring Boot搭建Web系统架构的步骤:

1. 准备工作

在开始构建基于Spring Boot的Web系统之前,需要完成一些准备工作。这些包括:
* 安装Java JDK
* 安装Eclipse或IntelliJ IDEA等IDE
* 安装Maven或Gradle等构建工具

安装完成后,我们就可以开始构建Web系统了。

2. 创建Spring Boot项目

使用IDE创建一个新的Spring Boot项目,可以在IDE中选择Spring Boot工程模板,也可以使用Maven或Gradle创建一个新的Spring Boot项目。

3. 添加相关依赖

为了构建一个完整的Web应用程序,我们需要添加以下依赖:
* Spring Boot Web
* Thymeleaf或Freemarker模板引擎
* Spring Data JPA(如果需要使用数据库)

Maven用户可以在项目的“pom.xml”文件中添加所需的依赖。

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Thymeleaf Template Engine -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- Spring Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

4. 创建Controller层

创建一个Controller类用于处理Web请求和响应。使用Spring MVC时,可以使用@Controller注释来标记一个类作为Controller。例如:

@Controller
public class HomeController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

5. 创建模板

我们需要为Web应用程序创建一个模板。在这里,我们将创建一个基于Thymeleaf的模板。我们可以在“src/main/resources/templates”文件夹中创建一个名为“index.html”的文件来作为我们的首页模板。

<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1 th:text="'Hello, world!'"></h1>
</body>
</html>

6. 启动应用程序

启动我们的Spring Boot应用程序。可以使用Maven或Gradle的Spring Boot插件来启动应用程序,或者直接运行“main”方法来启动。

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

示例1:构建一个简单的TodoList应用程序

1. 创建Todo模型

@Entity
public class Todo {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    private String taskName;

    private Boolean isComplete;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public Boolean getIsComplete() {
        return isComplete;
    }

    public void setIsComplete(Boolean isComplete) {
        this.isComplete = isComplete;
    }
}

2. 创建TodosRepository

public interface TodosRepository extends CrudRepository<Todo, Long> {

}

3. 创建TodosController

@Controller
public class TodosController {

    @Autowired
    TodosRepository todosRepository;

    @GetMapping("/todos")
    public String todosList(Model model) {
        Iterable<Todo> todos = todosRepository.findAll();
        model.addAttribute("todos", todos);
        return "todos";
    }

    @GetMapping("/todo/{id}")
    public String todoDetail(@PathVariable("id") Long id, Model model) {
        Optional<Todo> todo = todosRepository.findById(id);
        if (todo.isPresent()) {
            model.addAttribute("todo", todo.get());
            return "todo";
        } else {
            return "redirect:/todos";
        }
    }

    @PostMapping("/todo/add")
    public String addTodo(@RequestParam("taskName") String taskName) {
        Todo newTodo = new Todo();
        newTodo.setTaskName(taskName);
        newTodo.setIsComplete(false);
        todosRepository.save(newTodo);
        return "redirect:/todos";
    }
}

4. 创建模板

4.1 todos.html模板

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Todos</title>
</head>
<body>
<div>
    <h1>Todos</h1>
    <form action="#" method="POST">
        <input type="text" name="taskName" />
        <input type="submit" value="Add" />
    </form>
    <ul>
        <li th:each="todo : ${todos}">
            <a th:href="@{/todo/{id}(id=${todo.getId()})}" th:text="${todo.getTaskName()}"></a>
        </li>
    </ul>
</div>
</body>
</html>

4.2 todo.html模板

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Todos</title>
</head>
<body>
<div>
    <h1 th:text="${todo.getTaskName()}"></h1>
</div>
</body>
</html>

示例2:使用Spring Security实现用户登录和授权

1. 添加相关依赖

<dependencies>
  <!-- Spring Boot Web -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <!-- Thymeleaf Template Engine -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>

  <!-- Spring Security -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
  </dependency>

  <!-- Spring Data JPA -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>

  <!-- MySQL Connector -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
  </dependency>

  <!-- Spring Boot Test -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

2. 创建User模型

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    private String username;

    @NotNull
    private String password;

    @NotNull
    private String email;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

3. 创建UserRepository

public interface UserRepository extends CrudRepository<User, Long> {
    User findByUsername(String username);
}

4. 配置Spring Security

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home", "/register").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login").permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Bean
    public PasswordEncoder getPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

5. 创建UserDetailsService

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException(username);
        }
        List<GrantedAuthority> authorities = new ArrayList<>();
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);
    }
}

6. 创建UserController

@Controller
public class UserController {

    @Autowired
    UserRepository userRepository;

    @GetMapping("/register")
    public String register() {
        return "register";
    }

    @PostMapping("/register")
    public String register(User user) {
        user.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
        userRepository.save(user);
        return "redirect:/login";
    }

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/home")
    public String home() {
        return "home";
    }
}

7. 创建模板

7.1 register.html模板

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<div>
    <h1>Register</h1>
    <form action="#" method="POST">
        <table>
            <tbody>
                <tr>
                    <td>Username</td>
                    <td><input type="text" name="username" /></td>
                </tr>
                <tr>
                    <td>Password</td>
                    <td><input type="password" name="password" /></td>
                </tr>
                <tr>
                    <td>Email</td>
                    <td><input type="text" name="email" /></td>
                </tr>
            </tbody>
        </table>
        <input type="submit" value="Register" />
    </form>
</div>
</body>
</html>

7.2 login.html模板

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<div>
    <h1>Login</h1>
    <form th:action="@{/login}" method="POST">
        <table>
            <tbody>
                <tr>
                    <td>Username</td>
                    <td><input type="text" name="username" /></td>
                </tr>
                <tr>
                    <td>Password</td>
                    <td><input type="password" name="password" /></td>
                </tr>
            </tbody>
        </table>
        <input type="submit" value="Login" />
    </form>
</div>
</body>
</html>

7.3 home.html模板

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<div>
    <h1 th:text="${#authentication.name}"></h1>
</div>
</body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于springboot搭建的web系统架构的方法步骤 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • httpclient模拟post请求json封装表单数据的实现方法

    Httpclient模拟POST请求JSON封装表单数据的实现方法 什么是Httpclient? HttpClient是Apache下的一个开源项目,用于模拟浏览器请求,支持协议如下:HTTP、HTTPS、FTP、LDAP、SMTP。 为什么使用Httpclient模拟POST请求JSON封装表单数据? Httpclient模拟POST请求JSON封装表单数…

    Java 2023年5月26日
    00
  • jsp实现仿QQ空间新建多个相册名称并向相册中添加照片功能

    实现仿QQ空间新建多个相册名称并向相册中添加照片功能需要进行以下步骤: 准备工作 确定基础环境:使用JSP,需要安装Java和Tomcat等环境。 安装数据库:本文以MySQL为例进行讲解,需要安装MySQL数据库,并创建相应的数据库和表格。 创建数据库和表格 在MySQL中创建相应的数据库,例如“photo_album”。 在该数据库下创建两个表格:一个用…

    Java 2023年6月15日
    00
  • Bootstrap和Java分页实例第二篇

    下面是对于“Bootstrap和Java分页实例第二篇”的详细讲解攻略。 什么是Bootstrap和Java分页实例第二篇 Bootstrap和Java分页实例第二篇是一篇关于如何使用Bootstrap和Java进行分页功能实现的技术文章。文章的主要内容涵盖了Bootstrap基础、Java分页实现、Ajax分页实现、Bootstrap分页器等方面,旨在帮助…

    Java 2023年6月15日
    00
  • Spring整合Mybatis具体代码实现流程

    下面我将介绍Spring整合Mybatis的具体代码实现流程。 第一步:导入依赖 首先,需要在项目的pom.xml文件中添加Spring和Mybatis相关的依赖。具体的依赖可以根据使用的版本和需求进行选择。 <dependencies> <!–Spring依赖–> <dependency> <groupId&g…

    Java 2023年5月19日
    00
  • SSM框架JSP使用Layui实现layer弹出层效果

    这里是关于SSM框架JSP使用Layui实现layer弹出层效果的完整攻略。 1. 前置知识 SSM框架的基本概念和使用方法 JSP页面的基本语法和编写方法 Layui的基本概念和使用方法 layer弹出层的基本概念和使用方法 2. 实现步骤 步骤1:引入Layui和layer的相关资源 在JSP页面中引入Layui和layer的相关资源,包括CSS和JS文…

    Java 2023年6月15日
    00
  • Java中的字节流文件读取教程(一)

    这里是Java中的字节流文件读取教程(一)的完整攻略。 什么是Java中的字节流? Java中的字节流是一种用于读取和写入二进制数据的输入输出流,也称为二进制流。它是一种以字节为单位,而不是以字符为单位,读取和写入数据的过程。 如何使用字节流读取文件? 步骤一:打开文件 要使用字节流读取文件,我们需要先打开文件。我们可以使用Java中的FileInputSt…

    Java 2023年5月20日
    00
  • PHP 巧用数组降低程序的时间复杂度

    PHP巧用数组降低程序的时间复杂度 在PHP开发中,数组是常用的数据类型之一。通过巧妙地运用数组,可以降低程序的时间复杂度,提高程序效率。接下来,我们将探讨如何使用数组降低程序的时间复杂度。 使用数组代替循环 通常情况下,我们需要在数组中查找特定的元素。如果使用循环进行遍历查找,时间复杂度为O(n),而使用In_array函数则可以将时间复杂度降至O(1)。…

    Java 2023年5月26日
    00
  • Java-SpringBoot-Range请求头设置实现视频分段传输

    老实说,人太懒了,现在基本都不喜欢写笔记了,但是网上有关Range请求头的文章都太水了下面是抄的一段StackOverflow的代码…自己大修改过的,写的注释挺全的,应该直接看得懂,就不解释了写的不好…只是希望能给视频网站开发的新手一点点帮助吧. 业务场景:视频分段传输、视频多段传输(理论上配合前端能实现视频预览功能, 没有尝试过)下面是API测试图…

    Java 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部