2014-04-17 71 views
0

我試圖從一個servlet的doPost方法轉發到另一個servlet的doGet方法。但是,當我運行webapp時,URL不會更改。當我手動輸入第二個servlet的URL時,該servlet完美工作。當我在RequestDispatcher中輸入網頁時,它也可以工作。RequestDispatcher無法從servlet doPost工作到其他servlet doGet

第一個servlet是一個loginservlet。這個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> 

感謝您的幫助。

+0

請問您的第二個servlet既有doGet和doPost方法或只的doGet? – developerwjk

+0

兩者,我會註釋掉doPost方法,看看它給了什麼。謝謝。 – DaanCelie

+0

我在問更多的暗示,你想要做的事情沒有意義。如果請求是POST並且您轉發它,它仍然是POST。您無法通過轉發將其從POST更改爲GET。 – developerwjk

回答

0

將其重定向到的doGet唯一的辦法是讓你的doPost調用doGet,這使得他們都做同樣的事情:

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