课后作业一

61 阅读1分钟

主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, greenwillow, v-green, vue-pro, healer-readable, mk-cute, jzman, geek-black, awesome-green, qklhk-chocolate

贡献主题:github.com/xitu/juejin…

theme: juejin highlight:

需求一

> 要求:通过自研Web MVC框架实现一个用户注册,forward到一个成功页面。

注册Controller

通过spi机制将Controller注册到容器中

//实现注册功能的Controller
org.geektimes.projects.user.web.controller.RegisterController
//跳转到登陆界面的controller    
org.geektimes.projects.user.web.controller.RegisterIndexController

代码实现

RegisterController

@Path("/register")
public class RegisterIndexController implements PageController {

    @GET
    @Path("/index")
    @Override
    public String execute(HttpServletRequest request, HttpServletResponse response) throws Throwable {
        return "register.jsp";
    }
}

register.jsp

<head>
<jsp:directive.include file="/WEB-INF/jsp/prelude/include-head-meta.jspf" />
	<title>My Home Page</title>
    <style>
      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }

      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }
    </style>
</head>
<body>
	<div class="container">
		<form action="/user/register" method="post">
			<table align="center">
				<tr align="right">
					<td>请输入用户名:</td>
					<td><input type="text" name=name autofocus="autofocus"></td>
				</tr>
				<tr align="right">
					<td>请输入密码:</td>
					<td><input type="text" name=password></td>
				</tr>
				<tr align="right">
					<td>请输入邮箱:</td>
					<td><input type="text" name=email></td>
				</tr>
				<tr align="right">
					<td>请输入电话号码:</td>
					<td><input type="text" name=phoneNumber></td>
				</tr>
			</table>
			<input type="submit" name=register value="注册" >
		</form>
	</div>
</body>

需求二

> 通过 Controller -> Service -> Repository 实现(数据库实现) > > 该部分代码目前只是完成了保存用户功能,数据库采用的是jdk自带的derby

代码实现

RegisterController

@Path("/user")
public class RegisterController implements PageController {

    UserService userService = new UserServiceImpl();

    @POST
    @Path("/register")
    @Override
    public String execute(HttpServletRequest request, HttpServletResponse response) throws Throwable {
        Enumeration<String> parameterNames = request.getParameterNames();

        User user = new User();
        user.setName(request.getParameter("name"));
        user.setPassword(request.getParameter("password"));
        user.setEmail(request.getParameter("email"));
        user.setPhoneNumber(request.getParameter("phoneNumber"));
        userService.register(user);

        return "success";
    }
}

UserServiceImpl

public class UserServiceImpl implements UserService {

    InMemoryUserRepository inMemoryUserRepository = new InMemoryUserRepository();

    @Override
    public boolean register(User user) {
        inMemoryUserRepository.save(user);
        return true;
    }

    @Override
    public boolean deregister(User user) {
        return false;
    }

    @Override
    public boolean update(User user) {
        return false;
    }

    @Override
    public User queryUserById(Long id) {
        return null;
    }

    @Override
    public User queryUserByNameAndPassword(String name, String password) {
        return null;
    }
}

InMemoryUserRepository

public class InMemoryUserRepository implements UserRepository {


    private Map<Long, User> repository = new ConcurrentHashMap<>();

    @Override
    public boolean save(User user){
        if(Objects.isNull(user)){
            throw new RuntimeException("插入用户失败");
        }
        StringBuilder sb = new StringBuilder("INSERT INTO users(name,password,email,phoneNumber) VALUES ");
        sb.append("(");
        sb.append("'").append(user.getName()).append("',");
        sb.append("'").append(user.getPassword()).append("',");
        sb.append("'").append(user.getEmail()).append("',");
        sb.append("'").append(user.getEmail()).append("')");
        Connection connection = null;
        Statement statement = null;
        try {
            System.out.println("当前保存用户的sql是:[ "+sb.toString()+" ]");
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            Driver driver = DriverManager.getDriver("jdbc:derby:D:\\db\\user-platform;create=true");
            connection = driver.connect("jdbc:derby:D:\\db\\user-platform;create=true",new Properties());
            statement = connection.createStatement();
            statement.executeUpdate(sb.toString());
        }catch (Exception e){
            return false;
        }finally {
            try {
                statement.close();
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }

        }
        return true;
    }

    @Override
    public boolean deleteById(Long userId) {
        return repository.remove(userId) != null;
    }

    @Override
    public boolean update(User user) {
        return true;
    }

    @Override
    public User getById(Long userId) {
        return repository.get(userId);
    }


    @Override
   public User getByNameAndPassword(String userName, String password) {
        return repository.values()
               .stream()
               .filter(user -> Objects.equals(userName, user.getName())
                       && Objects.equals(password, user.getPassword()))
                .findFirst()
               .get();
    }

    @Override
    public Collection<User> getAll() {
        return repository.values();
    }
}

derby数据库安装参考链接:www.cnblogs.com/wkfvawl/p/1…