主题列表: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…