Spring MVC用户注册和登录示例

原文地址: https://dzone.com/articles/spring-mvc-example-for-user-registration-and-login-1?edition=274902&utm_source=Daily%20Digest&utm_medium=email&utm_campaign=dd%202017-03-04

本文是使用几种Web开发语言和数据库设置用户注册和登录的分步指南。

   · Web Dev Zone

本文是使用以下工具和技术的用户注册和登录的分步指南。

Spring框架(Core,MVC和JBDC)

2. Java 1.8

3.Maven 3.3.9

4. Eclipse IDE(Mars2)

5. MySQL 5.1

步骤1:创建Maven项目

使用Eclipse IDE,通过选择Web Archetype创建Maven项目。

步骤2:更新Pom.xml

更新你的maven依赖。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>jbr</groupId>

    <artifactId>SpringMvcUser</artifactId>

    <packaging>war</packaging>

    <version>0.1</version>

    <name>SpringMvcUser Maven Webapp</name>

    <url>http://maven.apache.org</url>

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <spring.version>4.3.2.RELEASE</spring.version>

        <junit.version>4.12</junit.version>

        <servlet.version>3.1.0</servlet.version>

        <servlet.version>3.0.1</servlet.version>

        <mysql.connector.version>5.1.9</mysql.connector.version>

    </properties>

    <dependencies>

        <!-- Junit -->

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>${junit.version}</version>

            <scope>test</scope>

        </dependency>

        <!--Servlet-Api -->

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>javax.servlet-api</artifactId>

            <version>${servlet.version}</version>

        </dependency>

        <!-- Spring Framework -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <version>${spring.version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-beans</artifactId>

            <version>${spring.version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context</artifactId>

            <version>${spring.version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-jdbc</artifactId>

            <version>${spring.version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-test</artifactId>

            <version>${spring.version}</version>

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-webmvc</artifactId>

            <version>${spring.version}</version>

        </dependency>

        <!-- Servlet API -->

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>javax.servlet-api</artifactId>

            <version>${servlet.version}</version>

        </dependency>

        <!-- MySQL database driver -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>${mysql.connector.version}</version>

        </dependency>

    </dependencies>

    <build>

        <finalName>SpringMvcUser</finalName>

    </build>

</project>

步骤3:更新web.xml

更新src / main / webapp / WEB-INF下的web.xml,如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

    <display-name>Archetype Created Web Application</display-name>

    <welcome-file-list>

        <welcome-file>home.jsp</welcome-file>

    </welcome-file-list>

    <servlet>

        <servlet-name>spring-mvc</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>spring-mvc</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>

</web-app>

  1. DispatcherServlet   是您的应用程序中定义的任何Servlet的根Servlet。 它将根据URL将对应用程序发出的请求重定向到相应的控制器。

  2. spring-mvc   是根servlet的名称,Spring容器将查找具有此名称的配置。 所以下一步是使用spring-mvc-servlet.xml创建一个spring配置。

步骤4:创建spring-mvc-servlet.xml

创建spring-mvc-servlet.xml   在src / main / webapp / WEB-INF文件夹下,并定义bean。

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <import resource="classpath:jbr/config/user-beans.xml" />

    <context:component-scan base-package="jbr.springmvc" />

    <context:annotation-config />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/jsp/" />

        <property name="suffix" value=".jsp" />

    </bean>

</beans>

步骤5:创建控制器

为用户注册和登录创建单独的控制器,如下所示。

创建一个包jbr.springmvc.controller  

RegistrationController.java
package jbr.springmvc.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.servlet.ModelAndView;

import jbr.springmvc.model.User;

import jbr.springmvc.service.UserService;

@Controller

public class RegistrationController {

  @Autowired

  public UserService userService;

  @RequestMapping(value = "/register", method = RequestMethod.GET)

  public ModelAndView showRegister(HttpServletRequest request, HttpServletResponse response) {

    ModelAndView mav = new ModelAndView("register");

    mav.addObject("user", new User());

    return mav;

  }

  @RequestMapping(value = "/registerProcess", method = RequestMethod.POST)

  public ModelAndView addUser(HttpServletRequest request, HttpServletResponse response,

  @ModelAttribute("user") User user) {

  userService.register(user);

  return new ModelAndView("welcome", "firstname", user.getFirstname());

  }

}
LoginController.java
package jbr.springmvc.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.servlet.ModelAndView;

import jbr.springmvc.model.Login;

import jbr.springmvc.model.User;

import jbr.springmvc.service.UserService;

@Controller

public class LoginController {

  @Autowired

  UserService userService;

  @RequestMapping(value = "/login", method = RequestMethod.GET)

  public ModelAndView showLogin(HttpServletRequest request, HttpServletResponse response) {

    ModelAndView mav = new ModelAndView("login");

    mav.addObject("login", new Login());

    return mav;

  }

  @RequestMapping(value = "/loginProcess", method = RequestMethod.POST)

  public ModelAndView loginProcess(HttpServletRequest request, HttpServletResponse response,

  @ModelAttribute("login") Login login) {

    ModelAndView mav = null;

    User user = userService.validateUser(login);

    if (null != user) {

    mav = new ModelAndView("welcome");

    mav.addObject("firstname", user.getFirstname());

    } else {

    mav = new ModelAndView("login");

    mav.addObject("message", "Username or Password is wrong!!");

    }

    return mav;

  }

}

步骤5:创建POJO类

创建一个包: jbr.springmvc.model  

Login.java
package jbr.springmvc.model;

public class Login {

  private String username;

  private String password;

  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;

  }

}

User.java
package jbr.springmvc.model;

public class User {

  private String username;

  private String password;

  private String firstname;

  private String lastname;

  private String email;

  private String address;

  private int phone;

  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 getFirstname() {

  return firstname;

  }

  public void setFirstname(String firstname) {

  this.firstname = firstname;

  }

  public String getLastname() {

  return lastname;

  }

  public void setLastname(String lastname) {

  this.lastname = lastname;

  }

  public String getEmail() {

  return email;

  }

  public void setEmail(String email) {

  this.email = email;

  }

  public String getAddress() {

  return address;

  }

  public void setAddress(String address) {

  this.address = address;

  }

  public int getPhone() {

  return phone;

  }

  public void setPhone(int phone) {

  this.phone = phone;

  }

}

注意:如果您想添加任何新的逻辑,您可以添加另一个称为服务的层并访问DAO层。

步骤6:创建DAO类

创建用于访问MySQL数据库的接口/类。

创建一个包: jbr.springmvc.dao  

UserDao.java
package jbr.springmvc.dao;

import jbr.springmvc.model.Login;

import jbr.springmvc.model.User;

public interface UserDao {

  void register(User user);

  User validateUser(Login login);

}

UserDaoImpl.java
package jbr.springmvc.dao;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import jbr.springmvc.model.Login;

import jbr.springmvc.model.User;

public class UserDaoImpl implements UserDao {

  @Autowired

  DataSource datasource;

  @Autowired

  JdbcTemplate jdbcTemplate;

  public void register(User user) {

    String sql = "insert into users values(?,?,?,?,?,?,?)";

    jdbcTemplate.update(sql, new Object[] { user.getUsername(), user.getPassword(), user.getFirstname(),

    user.getLastname(), user.getEmail(), user.getAddress(), user.getPhone() });

    }

    public User validateUser(Login login) {

    String sql = "select * from users where username='" + login.getUsername() + "' and password='" + login.getPassword()

    + "'";

    List<User> users = jdbcTemplate.query(sql, new UserMapper());

    return users.size() > 0 ? users.get(0) : null;

    }

  }

  class UserMapper implements RowMapper<User> {

  public User mapRow(ResultSet rs, int arg1) throws SQLException {

    User user = new User();

    user.setUsername(rs.getString("username"));

    user.setPassword(rs.getString("password"));

    user.setFirstname(rs.getString("firstname"));

    user.setLastname(rs.getString("lastname"));

    user.setEmail(rs.getString("email"));

    user.setAddress(rs.getString("address"));

    user.setPhone(rs.getInt("phone"));

    return user;

  }

}

步骤7:创建Spring Bean配置

resources 创建一个新的xml bean配置user-beans.xml 来定义我们创建的bean。

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="jbr.springmvc" />

    <context:annotation-config />

    <bean id="userService" class="jbr.springmvc.service.UserServiceImpl" />

    <bean id="userDao" class="jbr.springmvc.dao.UserDaoImpl" />

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

        <property name="dataSource" ref="datasource" />

    </bean>

    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />

        <property name="url" value="jdbc:mysql://localhost:3306/myusers" />

        <property name="username" value="root" />

        <property name="password" value="root" />

    </bean>

</beans>

步骤8:在MySQL中创建表

CREATE DATABASE 

  IF NOT EXISTS myusers;USE 

    DROP TABLE 

    DROP TABLE IF EXISTS `myusers`.`users`;CREATE TABLE `myusers`.`users` 

                 ( 

                              `username`  VARCHAR(45) NOT NULL, 

                              `password`  VARCHAR(45) NULL, 

                              `firstname` VARCHAR(45) NOT NULL, 

                              `lastname`  VARCHAR(45) NULL, 

                              `email`     VARCHAR(45) NULL, 

                              `address`   VARCHAR(45) NULL, 

                              `phone`     INT NULL, 

                              PRIMARY KEY (`username`) 

                 )

步骤9:创建视图

在/ src / main / webapp文件夹下,创建一个home.jsp,我们在web.xml中定义为“welcome-file”。

home.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

    <html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

        <title>Welcome</title>

    </head>

    <body>

        <table align="center">

            <tr>

                <td><a href="login">Login</a>

                </td>

                <td><a href="register">Register</a>

                </td>

            </tr>

        </table>

    </body>

    </html>

在/ src / main / webapp / jsp下创建:

register.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>

        <html>

        <head>

            <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

            <title>Registration</title>

        </head>

        <body>

            <form:form id="regForm" modelAttribute="user" action="registerProcess" method="post">

                <table align="center">

                    <tr>

                        <td>

                            <form:label path="username">Username</form:label>

                        </td>

                        <td>

                            <form:input path="username" name="username" id="username" />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <form:label path="password">Password</form:label>

                        </td>

                        <td>

                            <form:password path="password" name="password" id="password" />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <form:label path="firstname">FirstName</form:label>

                        </td>

                        <td>

                            <form:input path="firstname" name="firstname" id="firstname" />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <form:label path="lastname">LastName</form:label>

                        </td>

                        <td>

                            <form:input path="lastname" name="lastname" id="lastname" />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <form:label path="email">Email</form:label>

                        </td>

                        <td>

                            <form:input path="email" name="email" id="email" />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <form:label path="address">Address</form:label>

                        </td>

                        <td>

                            <form:input path="address" name="address" id="address" />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <form:label path="phone">Phone</form:label>

                        </td>

                        <td>

                            <form:input path="phone" name="phone" id="phone" />

                        </td>

                    </tr>

                    <tr>

                        <td></td>

                        <td>

                            <form:button id="register" name="register">Register</form:button>

                        </td>

                    </tr>

                    <tr></tr>

                    <tr>

                        <td></td>

                        <td><a href="home.jsp">Home</a>

                        </td>

                    </tr>

                </table>

            </form:form>

        </body>

        </html>

login.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>

        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

        <html>

        <head>

            <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

            <title>Login</title>

        </head>

        <body>

            <form:form id="loginForm" modelAttribute="login" action="loginProcess" method="post">

                <table align="center">

                    <tr>

                        <td>

                            <form:label path="username">Username: </form:label>

                        </td>

                        <td>

                            <form:input path="username" name="username" id="username" />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <form:label path="password">Password:</form:label>

                        </td>

                        <td>

                            <form:password path="password" name="password" id="password" />

                        </td>

                    </tr>

                    <tr>

                        <td></td>

                        <td align="left">

                            <form:button id="login" name="login">Login</form:button>

                        </td>

                    </tr>

                    <tr></tr>

                    <tr>

                        <td></td>

                        <td><a href="home.jsp">Home</a>

                        </td>

                    </tr>

                </table>

            </form:form>

            <table align="center">

                <tr>

                    <td style="font-style: italic; color: red;">${message}</td>

                </tr>

            </table>

        </body>

        </html>

welcome.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

    <html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

        <title>Welcome</title>

    </head>

    <body>

        <table>

            <tr>

                <td>Welcome ${firstname}</td>

            </tr>

            <tr>

            </tr>

            <tr>

            </tr>

            <tr>

                <td><a href="home.jsp">Home</a>

                </td>

            </tr>

        </table>

    </body>

    </html>

步骤10:运行应用程序

  1. 右键单击应用程序,然后Maven-> clean。

  2. 右键单击应用程序,然后单击Maven-> install。

  3. 右键单击应用程序并运行As->在服务器上运行 - >使用Tomcat运行。

您将看到以下输出。

主页:

图片标题


用户注册:

图片标题

用户注册成功:

图片标题

登录:

图片标题

登录成功:

图片标题

概要

本教程有助于为Spring MVC创建一个Maven项目,并为用户注册和登录开发一个小应用程序。







  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
好的,我可以为您提供一些指导。 首先,您需要创建一个Spring Boot项目并添加所需的依赖项。您需要添加Spring Boot Starter Web和Spring Boot Starter Data JPA依赖项。在pom.xml文件中添加以下依赖项: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` 这些依赖项将为您提供Spring Boot Web和Spring Boot Data JPA的支持。还添加了H2数据库支持,以便您可以在本地运行应用程序。 接下来,您需要创建一个用户实体。用户实体将用于存储用户的详细信息,例如用户名,密码等。以下是一个简单的用户实体类: ``` @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String password; // Getters and setters } ``` 在这个实体中,我们使用了@Entity和@Table注释来指定实体名称和表名称。我们还为每个属性指定了@Column注释,以便JPA可以将它们映射到表的列。 接下来,您需要创建一个用户存储库。用户存储库将用于处理与用户相关的操作,例如创建用户,查找用户等。以下是一个简单的用户存储库: ``` @Repository public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByUsername(String username); } ``` 在这个存储库中,我们使用了@Repository注释来指定它是一个Spring Bean。我们还扩展了JpaRepository来获得标准的CRUD操作。我们还添加了一个findByUsername方法,以便我们可以根据用户名查找用户。 接下来,您需要创建一个用户服务。用户服务将处理与用户相关的业务逻辑,例如验证用户,创建用户等。以下是一个简单的用户服务: ``` @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public User createUser(String username, String password) throws UserAlreadyExistsException { Optional<User> existingUser = userRepository.findByUsername(username); if (existingUser.isPresent()) { throw new UserAlreadyExistsException(); } User user = new User(); user.setUsername(username); user.setPassword(passwordEncoder().encode(password)); return userRepository.save(user); } public User authenticateUser(String username, String password) throws UserNotFoundException, InvalidPasswordException { Optional<User> optionalUser = userRepository.findByUsername(username); User user = optionalUser.orElseThrow(UserNotFoundException::new); if (!passwordEncoder().matches(password, user.getPassword())) { throw new InvalidPasswordException(); } return user; } private PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` 在这个服务中,我们使用了@Service注释来指定它是一个Spring Bean。我们还注入了一个UserRepository,以便我们可以使用它来处理与用户相关的操作。 我们添加了两个方法:createUser和authenticateUser。createUser方法将创建一个新用户,并将其保存到数据库中。authenticateUser方法将验证用户的凭据,并返回用户对象。 在上面的代码中,您可能已经注意到我们使用了一个PasswordEncoder来处理密码。这是一个用于密码加密和解密的Spring Security组件。在这个示例中,我们使用了BCryptPasswordEncoder。 最后,您需要创建一个控制器来处理HTTP请求。以下是一个简单的控制器: ``` @RestController @RequestMapping("/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @PostMapping("/register") public User registerUser(@RequestBody UserDTO userDTO) throws UserAlreadyExistsException { return userService.createUser(userDTO.getUsername(), userDTO.getPassword()); } @PostMapping("/login") public User loginUser(@RequestBody UserDTO userDTO) throws UserNotFoundException, InvalidPasswordException { return userService.authenticateUser(userDTO.getUsername(), userDTO.getPassword()); } @ExceptionHandler({UserAlreadyExistsException.class, UserNotFoundException.class, InvalidPasswordException.class}) public ResponseEntity<String> handleException(Exception e) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(e.getMessage()); } } ``` 在这个控制器中,我们使用了@RestController和@RequestMapping注释来指定它是一个Spring MVC控制器。我们还注入了UserService,以便我们可以使用它来处理与用户相关的业务逻辑。 我们添加了两个端点:registerUser和loginUser。registerUser将创建一个新用户,并返回用户对象。loginUser将验证用户的凭据,并返回用户对象。 我们还添加了一个ExceptionHandler方法,以便我们可以捕获和处理异常。在这个示例中,我们返回了一个HTTP 401 Unauthorized响应。 这就是您需要实现的所有内容。您可以使用POSTMAN或其他HTTP客户端来测试这些端点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值