java - RequestDispatcher 无法从 servlet doPost 到其他 servlet doGet

标签 java jsp servlets

我正在尝试从一个 servlet 的 doPost 方法转发到另一个 servlet 的 doGet 方法。但是,当我运行 web 应用程序时,URL 不会更改。当我手动输入第二个 servlet 的 URL 时,该 servlet 工作正常。当我在 RequestDispatcher 中输入网页时,它也可以工作。

第一个 servlet 是登录servlet。该servlet 的doPost 方法为用户处理数据库查找。接下来,根据用户的类型(艺术家、听众或管理员),servlet 通过第二个 servlet 的 doGet 方法重定向到其相应的主页。最后一步是必需的,不能跳过,因为我将在此方法中编写更多代码。

这是登录 servlet:

public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 req.getRequestDispatcher("/login.jsp").forward(req, resp);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    if(request.getParameter("username") != null && request.getParameter("password") != null &&
            request.getParameter("username") != "" && request.getParameter("password") != ""){
    //Check if username exists
    UserHelper helper = new UserHelper();


    if(helper.userExists(request.getParameter("username")) == 1){
        User user = helper.getUserByUsername(request.getParameter("username"));
        if(user.getUserPassword().equals(helper.hashPassword(request.getParameter("password")))){
            HttpSession session = request.getSession();
            session.setAttribute("user", request.getParameter("username"));

            if(user instanceof Artist){

            Artist artist = new Artist();
            artist = (Artist) user;
            session.setAttribute("Artist", artist);
            System.out.println("OK");
            request.getRequestDispatcher("/artist/artistpanel").forward(request, response);
            }
            if(user instanceof Listener){
            Listener listener = new Listener();
            listener = (Listener) user;
            session.setAttribute("Listener", listener);
            request.getRequestDispatcher("/listener/store.jsp").forward(request, response);
            }
            if(user instanceof Admin){
            Admin admin = new Admin();
            admin = (Admin) admin;
            session.setAttribute("Admin", admin);

            }

            /*response.sendRedirect("artist/artisthome.jsp?success=login");*/
        }else{
            request.setAttribute("error", "U gaf een foutief passwoord op. Probeer nogmaals."); 
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }else{
        request.setAttribute("error", "Er bestaat geen gebruiker met die username."); 
        request.getRequestDispatcher("/login.jsp").forward(request, response);
    }
}else{
    request.setAttribute("error", "Beide velden moeten worden ingevuld."); 
    request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}

这是 ControlPanel servlet 代码:

package Controller.Servlets;

import Model.Artist;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*
* @author Daan
*/
public class ArtistPanelServlet extends HttpServlet {

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

    Artist artist = new Artist();

    HttpSession session = request.getSession();
    artist = (Artist) session.getAttribute("Artist");

    session.setAttribute("Artist", artist);
    request.setAttribute("ArtistName", artist.getArtistName());

    request.getRequestDispatcher("/artist/artisthome.jsp").forward(request, response);
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
}


@Override
public String getServletInfo() {
    return "Short description";
}
}

这是我的 servlet 映射的一部分。

<servlet>
    <servlet-name>ArtistPanelServlet</servlet-name>
    <servlet-class>Controller.Servlets.ArtistPanelServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ArtistPanelServlet</servlet-name>
    <url-pattern>/artist/artistpanel</url-pattern>
</servlet-mapping>

感谢您的帮助。

最佳答案

将其重定向到 doGet 的唯一方法是让您的 doPost 调用 doGet,这使得它们都执行相同的操作:

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

关于java - RequestDispatcher 无法从 servlet doPost 到其他 servlet doGet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23138803/

相关文章:

java - 在运行通用图像加载器时添加 imageUrl?

javascript - 理想的网站导航设计

java - Servlet response.sendRedirect 编码问题

java - 如何使用计算机名而不是 IP 地址从另一台设备访问 Tomcat 服务器?

java - 荣格 : Changing the vertex colour

java - 从请求或响应 header 中隐藏 cookie

java - 在数组中搜索元素,然后返回带有索引的新数组

java - 如何在eclipse项目中编译并运行单个jsp文件

java - 如何使用 java 表达式语言执行此操作

java - 如果通过 java 代码访问 URL,Spring 身份验证会失败