【问题标题】:Java Servlet Switches execution order [closed]Java Servlet切换执行顺序[关闭]
【发布时间】:2018-03-19 23:32:54
【问题描述】:

我在使用来自 servlet 的两个开关时遇到了一些问题。我正在尝试从 jsp 上的这些开关加载数据,但它基本上只是在第一个开关上得到,而第二个没有执行。我试过只创建一个开关,但它会给我Cannot forward after response has been committed 等错误。你们知道解决这个问题的正确方法是什么吗? 谢谢!

这是代码:

public class UserControllerServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private UserDao userDao;
    private ReservationDao reservationDao;
    private DBConnection dbConnection;


    @Override
    public void init() throws ServletException {
        super.init();

        try {
            userDao = new UserDao(dbConnection);
            reservationDao = new ReservationDao(dbConnection);
        }catch(Exception e) {
            throw new ServletException(e);
        }
    }




    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {

        try {
            // read the "command" parameter
            String theCommand = request.getParameter("command");
            String theCommand2 = request.getParameter("command2");
            if(theCommand == null) {
                theCommand = "LIST";
            }

            if(theCommand2 == null) {
                theCommand2 = "LIST";
            }

            switch(theCommand2) {
            case "LIST":
                listReservations(request, response);
                return;

            case "ADD":
                addReservation(request, response);
                return;


            case "LOAD":
                loadReservation(request, response);
                return;


            case "UPDATE":
                updateReservation(request, response);
                return;



            case "DELETE":
                deleteReservation(request, response);
                return;


            default:
                listReservations(request, response);
        }

            //route to the appropriate method
            switch(theCommand) {
                case "LIST":
                    listUsers(request, response);
                    break;

                case "ADD":
                    addUser(request, response);
                    break;


                case "LOAD":
                    loadUser(request, response);
                    break;


                case "UPDATE":
                    updateUser(request, response);
                    break;



                case "DELETE":
                    deleteUser(request, response);
                    break;


                default:
                    listUsers(request, response);
            }

        }catch(Exception e) {
            throw new ServletException(e);
        }

    }

    private void deleteUser(HttpServletRequest request, HttpServletResponse response) 
    throws Exception {
        String theUserId = request.getParameter("userId");

        userDao.deleteUser(theUserId);

        listUsers(request, response);
    }

    private void updateUser(HttpServletRequest request, HttpServletResponse response) 
            throws Exception {

        int id = Integer.parseInt(request.getParameter("userId"));
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String role = request.getParameter("role");
        String nume = request.getParameter("nume");
        String prenume = request.getParameter("prenume");
        String email = request.getParameter("email");
        String adresa = request.getParameter("adresa");
        UserBean theUser = new UserBean(id, username, password, role,nume,prenume,email,adresa);
        userDao.updateUser(theUser);
        listUsers(request, response);
    }

    private void loadUser(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String theUserId = request.getParameter("userId");
        UserBean theUser = userDao.getUser(theUserId);
        request.setAttribute("THE_USER", theUser);
        RequestDispatcher dispatcher = 
                request.getRequestDispatcher("/update-user-form.jsp");
        dispatcher.forward(request, response);
        return;
    }

    private void addUser(HttpServletRequest request, HttpServletResponse response) throws Exception {

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String role = request.getParameter("role");
        String nume = request.getParameter("nume");
        String prenume = request.getParameter("prenume");
        String email = request.getParameter("email");
        String adresa = request.getParameter("adresa");
        UserBean theUser = new UserBean(username, password, role,nume,prenume,email,adresa);
        userDao.addUser(theUser);
        listUsers(request, response);

    }

    private void listUsers(HttpServletRequest request, HttpServletResponse response) 
    throws Exception {
        List<UserBean> users = userDao.getUsers();
        request.setAttribute("USER_LIST", users);
        RequestDispatcher dispatcher = request.getRequestDispatcher("/list-users.jsp");
        dispatcher.forward(request, response);
        return;
    }


    //Reservations Methods

    private void deleteReservation(HttpServletRequest request, HttpServletResponse response) 
            throws Exception {
                String theReservationId = request.getParameter("reservationId");
                reservationDao.deleteReservation(theReservationId);
                listReservations(request, response);
            }

            private void updateReservation(HttpServletRequest request, HttpServletResponse response) 
                    throws Exception {

                int idReservation = Integer.parseInt(request.getParameter("reservationId"));
                int idUser = Integer.parseInt(request.getParameter("userId"));
                String dataCheckin = request.getParameter("dataCheckin");
                String dataCheckout = request.getParameter("dataCheckout");
                int nrPersoane = Integer.parseInt(request.getParameter("nrPersoane"));
                int nrCamere = Integer.parseInt(request.getParameter("nrCamere"));
                ReservationBean theReservation = new ReservationBean(idReservation, idUser, dataCheckin, dataCheckout,nrPersoane,nrCamere);
                reservationDao.updateReservation(theReservation);
                listReservations(request, response);
            }

            private void loadReservation(HttpServletRequest request, HttpServletResponse response) throws Exception {
                String theReservationId = request.getParameter("reservationId");
                ReservationBean theReservation = reservationDao.getReservation(theReservationId);
                request.setAttribute("THE_RESERVATION", theReservation);
                RequestDispatcher dispatcher = 
                        request.getRequestDispatcher("/update-reservation-form.jsp");
                dispatcher.forward(request, response);
                return;
            }

            private void addReservation(HttpServletRequest request, HttpServletResponse response) throws Exception {

                int userId = Integer.parseInt(request.getParameter("userId"));
                String dataCheckin = request.getParameter("dataCheckin");
                String dataCheckout = request.getParameter("dataCheckout");
                int nrPersoane = Integer.parseInt(request.getParameter("nrPersoane"));
                int nrCamere = Integer.parseInt(request.getParameter("nrCamere"));
                ReservationBean theReservation = new ReservationBean(userId, dataCheckin, dataCheckout,nrPersoane,nrCamere);
                reservationDao.addReservation(theReservation);
                listReservations(request, response);

            }

            private void listReservations(HttpServletRequest request, HttpServletResponse response) 
                throws Exception {
                    List<ReservationBean> reservations = reservationDao.getReservations();
                    request.setAttribute("RESERVATION_LIST", reservations);
                     request.getRequestDispatcher("/list-users.jsp").forward(request, response);
                    return;
                }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

【问题讨论】:

  • 第一次切换的所有情况你都试过了吗?

标签: java servlets switch-statement


【解决方案1】:

进入第一个开关,第二个不执行

您的第一个 switch 包含 return 语句。将它们更改为 break 语句。

switch(theCommand2) {
case "LIST":
    listReservations(request, response);
    break; // not return.
case "ADD":
    addReservation(request, response);
    break; // not return..
// ...

【讨论】:

  • 我试过了,但它会让我在响应提交后无法转发,它不会工作
  • 将会/做什么/在哪里? return 表示它不会执行您的下一个 switch 块 - 这是您所要求的。
  • 因此,如果我向该开关添加 break 语句,它将在我运行我的应用程序时抛出此异常 java.lang.IllegalStateException: Cannot forward after response has been commited,这是关于 RequestDispatcher 的事情,我真的不得到它
  • 您的方法似乎转发到第一个块中的响应,例如 - listReservations 以转发到最终状态结束。你为什么这样做?
  • 您只能转发一次。我想你想包括。 stackoverflow.com/a/9433063/2970947
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2017-07-29
  • 2011-03-02
相关资源
最近更新 更多