Страницы

Поиск по вопросам

среда, 20 февраля 2019 г.

Переделать веб приложение с сервлетами в RESTful

Есть приложение, которое соединяется с бд через glassfish ресурсы и все работает. Используются servlet. Как это можно реализовать с использованием RESTful. Не понимаю что куда должно передаваться и как. Как REST принимает из формы и возвращает. Все что я находила было с возвращением статуса, а не ресурсов. Так же интересно как реализовать ввод логина и пароля и получать приветствие с именем пользователя, соответствующего этим логину и паролю в бд. Я совсем плаваю в этом.(
CRUD операции:
@Stateless public class UserLogIn {
@PersistenceContext(unitName = "LEADER") public EntityManager em;
public UserLogIn(){}

public void add(User user){ if (!user.getLogin().equals("") || !user.getPassword().equals("") || !user.getUsername().equals("")){ em.persist(user); } } public void delete(int id){ em.remove(getUser(id)); }
public User getUser(int id){ return em.find(User.class, id);
} public void update(User user){ em.merge(user); }
public List getAll(){ TypedQuery namedQuery = em.createNamedQuery("User.getAll", User.class); return namedQuery.getResultList(); }
}
Сущность:
@Entity @Table(name = "annusers") @NamedQuery(name = "User.getAll", query = "SELECT u FROM User u") public class User { @Id @SequenceGenerator(name="ad_point_gen",allocationSize=1,sequenceName="ad_points_id_ad_point_seq") @GeneratedValue(generator="ad_point_gen",strategy=GenerationType.SEQUENCE) @Column(name = "id", nullable = false) private Integer id; @Column(name = "login", nullable = false) private String login; @Column(name = "password", nullable = false) private String password; @Column(name="username", nullable = false) private String username;
public User() { }
public User(String login, String password, String username) { this.login = login; this.password = password; this.username = username; }
public String getLogin() { return login; }
public void setLogin(String login) { this.login = login; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
@Override public String toString() { return "User{" + "login='" + login + '\'' + ", password='" + password + '\'' + ", username='" + username + '\'' + '}'; }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; } }
Классы сервлетов для работы с CRUD операциями
@WebServlet("/add") public class AddAndEditUserServlet extends HttpServlet{ @EJB private UserLogIn userLogIn;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ resp.setContentType("text/html"); req.setCharacterEncoding("UTF-8");
if(req.getParameter("edit")!=null){ int id = Integer.valueOf(req.getParameter("edit")); User user = userLogIn.getUser(id); req.setAttribute("user",user); }
req.getRequestDispatcher("/add.jsp").forward(req,resp); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ resp.setContentType("text/html"); req.setCharacterEncoding("UTF-8");
String login = req.getParameter("login"); String password = req.getParameter("password"); String username = req.getParameter("username");
if(!req.getParameter("id").equals("")){ int id = Integer.valueOf(req.getParameter("id")); User user = userLogIn.getUser(id); user.setLogin(login); user.setPassword(password); user.setUsername(username); userLogIn.update(user); }else { userLogIn.add(new User(login, password,username)); }
resp.sendRedirect("list"); }
}
package com.mkyong.rest.servlet;

@WebServlet("/delete") public class DeleteUser extends HttpServlet {
@EJB private UserLogIn userLogIn;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if(req.getParameter("id") != null && req.getParameter("id") != ""){ int id = Integer.valueOf(req.getParameter("id")); userLogIn.delete(id); } resp.sendRedirect("list"); } }


@WebServlet("/list") public class UserServlet extends HttpServlet{
@EJB private UserLogIn userLogIn;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); req.setAttribute("users", allUsers); req.getRequestDispatcher("/list.jsp").forward(req,resp); }
}


Ответ

rest сервисы, как правило нужны для CRUD операций(создание, удаление, редактирование, удаление).например:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); req.setAttribute("users", allUsers); req.getRequestDispatcher("/list.jsp").forward(req,resp); }
для запроса /list делает из бд выборку всех пользователей и перенаправляет запрос в list.jsp, где отображается список пользователей. Все что пришло от клиента, находится в объекте класса HttpServletRequest, например:
req.getParameter("id")
содержит http параметр id
Update.
Если делать именно рестовский сервис, то надо подключить библиотеку jackson для xml и GSON для json.в методе вместо resp.sendRedirect("list"); возвращаете свой объект, например:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); //.. String json = new Gson().toJson(allUsers); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); }

Комментариев нет:

Отправить комментарий