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>
感謝您的幫助。
請問您的第二個servlet既有doGet和doPost方法或只的doGet? – developerwjk
兩者,我會註釋掉doPost方法,看看它給了什麼。謝謝。 – DaanCelie
我在問更多的暗示,你想要做的事情沒有意義。如果請求是POST並且您轉發它,它仍然是POST。您無法通過轉發將其從POST更改爲GET。 – developerwjk