|
Simple web-app without frameworks
#39446411
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Всем привет!
Написала простой CRUD (web app without frameworks), все операции работают, но никак не могу "победить" update user.:-)
Посмотрите пожалуйста, может быть что-то посоветуете.
Спасибо большое!:-)
P.S. Переписать все на Spring или поменять структуру приложения просьба не советовать, т.к. задание написать именно без Spring и желательно с соблюдением такой структуры.
1. 2. 3. 4. 5. 6.
public class UserFormController implements Controller {
public ViewModel process (Request request){
Integer userId = Integer.valueOf(request.getParameter("userId"));
return new ViewModel("/WEB-INF/userform.jsp").withAttribute("userId",userId );
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
public class UpdateController implements Controller{
private final UserService userService;
public UpdateController(UserService userService) {
this.userService = userService;
}
@Override
public ViewModel process(Request request) {
Integer userId = Integer.valueOf(request.getParameter("userId"));
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
// String role = request.getParameter("role");
User user = User.from (userId,username,password,email);
userService.update(userId);
// User user = User.from(username, password, email, role);
return new ViewModel("/WEB-INF/postProcPage.jsp").withAttribute("user",user);
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
public class Factory {
public static Connection getConnection() {
Connection connection = null;
try {
Class.forName("org.h2.Driver");
connection = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
} catch (SQLException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
return connection;
}
public static Controller getHomeController() {
return new HomeController();
}
public static Controller getLoginController() {
return new LoginController();
}
public static Controller getErrorController (){return new ErrorController();}
public static Controller getRegistrationController(UserService userService) {
return new RegistrationController(userService);
}
public static Controller getUserGetByIdController (UserService userService){
return new UserGetByIdController(userService);
}
public static Controller getAllUsersController(UserService userService) {
return new GetAllUsersController(userService);
}
public static Controller getRemoveController (UserService userService){
return new RemoveController (userService);
}
public static Controller getUserFormController (){return new UserFormController();}
public static Controller getUpdateController (UserService userService){
return new UpdateController(userService);
}
public static UserService getUserServiceImpl(UserDao userDao) {
return new UserServiceImpl(userDao);
}
public static UserDao getUserDaoImpl(Connection connection) {
return new UserDaoImpl(connection);
}
public static Controller getAllCategoriesController (CategoryService categoryService){
return new GetAllCategoriesController(categoryService);
}
public static CategoryService getCategoryServiceImpl (CategoryDao categoryDao){
return new CategoryServiceImpl(categoryDao);
}
public static CategoryDao getCategotyDaoImpl(Connection connection) {
return new CategoryDaoImpl(connection);
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
public class UserServiceImpl implements UserService {
private final UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public User save(User user) {
return userDao.save(user);
}
@Override
public List<User> getUsersByName(String username) {
return userDao.getUsersByName(username);
}
@Override
public User getById(int userId) {
return userDao.getById(userId);
}
@Override
public User remove (int userId){
return userDao.remove(userId);
}
@Override
public User update(int userId) {
return userDao.update(userId);
}
@Override
public List<User> getAllUsers(){
return userDao.getAllUsers();
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
public class MainServlet extends HttpServlet {
private final Map<Request, Controller> controllerMap = new HashMap<>();
public void init() throws ServletException {
controllerMap.put(Request.create("GET", "/root/home"), Factory.getHomeController());
controllerMap.put(Request.create("GET", "/root/login"), Factory.getLoginController());
controllerMap.put(Request.create("GET", "/error"), Factory.getErrorController());
controllerMap.put(Request.create("POST", "/root/login"), Factory.getRegistrationController(
getUserServiceImpl(
getUserDaoImpl(
getConnection()))));
controllerMap.put(Request.create("GET", "/root/users"), Factory.getAllUsersController(
getUserServiceImpl(
getUserDaoImpl(
getConnection()))));
controllerMap.put(Request.create("GET", "/root/users/remove"), Factory.getRemoveController(
getUserServiceImpl(
getUserDaoImpl(
getConnection()))));
controllerMap.put(Request.create("GET", "/root/user"), Factory.getUserGetByIdController(
getUserServiceImpl(
getUserDaoImpl(
getConnection()))));
controllerMap.put(Request.create("GET", "/root/userform"), Factory.getUserFormController());
controllerMap.put(Request.create("POST", "/root/userform"), Factory.getUpdateController(
getUserServiceImpl(
getUserDaoImpl(
getConnection()))));
controllerMap.put(Request.create("GET", "/root/categories"),Factory.getAllCategoriesController(
getCategoryServiceImpl(
getCategotyDaoImpl(
getConnection()))));
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = getUri(request.getRequestURI());
Request req = new Request(request.getMethod(), uri, request.getParameterMap());
try {
Controller controller = controllerMap.get(req);
if (controller == null) {
throw new RuntimeException("Cannot handle " + req);
}
ViewModel viewModel = controller.process(req);
if (viewModel.hasCookies()) {
Map<String, String> newCookies = viewModel.getNewCookies();
for (String cookieName : newCookies.keySet()) {
response.addCookie(new Cookie(cookieName, newCookies.get(cookieName)));
}
}
forward(request, response, viewModel);
} catch (Throwable t) {
request.getRequestDispatcher("/WEB-INF/error.jsp").forward(request, response);
}
}
private String getUri(String requestURI) {
if(!requestURI.contains("?")) {
return requestURI;
}
return requestURI.substring(0, requestURI.indexOf("?"));
}
private void forward(HttpServletRequest request, HttpServletResponse response, ViewModel viewModel) throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher(getView(request, viewModel));
setAttributes(request, viewModel);
dispatcher.forward(request, response);
}
private void setAttributes(HttpServletRequest request, ViewModel viewModel) {
for (String attr: viewModel.getAttributes().keySet()) {
request.setAttribute(attr, viewModel.getAttribute(attr));
}
}
private String getView(HttpServletRequest request, ViewModel viewModel) {
return request.getContextPath() + viewModel.getView();
}
users.jsp
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Users</title>
<style>
<%@include file="/bootstrap/css/bootstrap.min.css" %>
<%@include file="/bootstrap/css/hello.css" %>
<%@include file="header.jsp"%>
</style>
</head>
<body>
<div class="container">
<h3>Users List</h3>
<form method="post" action="/root/users" class="well">
<table class="table table-striped">
<thead>
<tr>
<td><b>UserId</b></td>
<td><b>Username</b></td>
<td><b>Email</b></td>
<td><b>Action</b></td>
<td><b>Action</b></td>
<td><b>Action</b></td>
</tr>
</thead>
<c:forEach var = "user" items="${users}">
<tr>
<td>${user.userId}</td>
<td>${user.username}</td>
<td>${user.email}</td>
<td><a href="/root/user?userId=${user.userId}" methods="get">User details</a></td>
<td><a href="/root/users/remove?userId=${user.userId}" methods="get">Delete</a></td>
<td><a href="/root/userform?userId=${user.userId}" methods="get">Update</a></td>
</tr>
</c:forEach>
</table>
</form>
<a href="/root/home" class="btn btn-lg btn-default">Home</a>
</div>
<script>window.jQuery || document.write('<script src="<c:url value="/bootstrap/js/jquery.min.js"/>"><\/script>')</script>
<script>
<%@include file="/bootstrap/js/bootstrap.min.js" %>
<%@include file="footer.jsp"%>
</script>
</body>
</html>
usersform.jsp
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<title>User form</title>
<style>
<%@include file="/bootstrap/css/bootstrap.min.css" %>
<%@include file="/bootstrap/css/hello.css" %>
<%@include file="header.jsp"%>
</style>
</head>
<body>
<div class="container">
<form class="form-user" action="/root/userform?userId=${user.userId}" method="post">
<h2 class="form-user-heading">Please input user's details</h2>
<label for="inputUserId" class="sr-only">UserId</label>
<input type="text" id="inputUserId" class="form-control" name="userId" placeholder=${user.userId}>
<label for="inputUsername" class="sr-only">Username</label>
<input type="text" id="inputUsername" class="form-control" name="username" placeholder="Username">
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" name="password" placeholder="Password">
<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" id="inputEmail" class="form-control" name="email" placeholder="Email">
<button class="btn btn-lg btn-primary btn-block" type="submit">Update</button>
</form>
<a href="/root/users" class="btn btn-lg btn-default">Users list</a>
<a href="/root/home" class="btn btn-lg btn-default">Home</a>
</div>
<script>window.jQuery || document.write('<script src="<c:url value="/bootstrap/js/jquery.min.js"/>"><\/script>')</script>
<script>
<%@include file="/bootstrap/js/bootstrap.min.js" %>
<%@include file="footer.jsp"%>
</script>
</body>
</html>
postProcPage.jsp
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Confirm registration page</title>
<style>
<%@include file="/bootstrap/css/bootstrap.min.css" %>
<%@include file="/bootstrap/css/signin.css" %>
</style>
</head>
<body>
<div style="text-align: center">
<h1>Congratulations, your operation with <c:out value="${user.username}"/> is done successfully!</h1>
<a href="/root/home" class="btn btn-lg btn-default">Home</a>
</div>
</body>
</html>
|
|
|