ユーザーに関する情報を検証したいと思います。ユーザーが入力して/login
ページを入力しようとしている場合は、ユーザーページに転送してください。メソッドの終了後、doSostlet()はStartServletでこのメソッドを呼び出さずにメソッドdoGet()を実行します
StartServlet
public class StartServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
UserDTO userDTO = (UserDTO) req.getSession().getAttribute("userDTO");
if (userDTO == null) {
req.getRequestDispatcher(req.getContextPath() + "/WEB-INF/pages/login.jspx").forward(req, resp);
} else {
req.getRequestDispatcher(req.getContextPath() + "/checklogin").forward(req, resp);
}
}
}
ValidateServlet
public class ValidateServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String email = req.getParameter("email");
String password = req.getParameter("password");
UserDTO userDTO = (UserDTO) req.getSession().getAttribute("userDTO");
if (userDTO == null) {
userDTO = UserService.getInstance().validateUserDTO(email, password);
}
if (userDTO != null) {
req.getSession().setAttribute("userDTO", userDTO);
if (userDTO.getRole() == Role.ADMINISTRATOR || userDTO.getRole() == Role.SUPERADMINISTRATOR) {
req.getRequestDispatcher(req.getContextPath() + "/admin/catalog").forward(req, resp);
} else {
req.getRequestDispatcher(req.getContextPath() + "/WEB-INF/pages/user/catalog/catalog.jspx").forward(req, resp);
}
} else {
String errorMsg = "Email or password is incorrect";
req.setAttribute("error", errorMsg);
req.getRequestDispatcher(req.getContextPath() + "/WEB-INF/pages/login.jspx").forward(req, resp);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
AdminCatalogServlet
public class AdminCatalogServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<ItemDTO> itemsDTO = ItemService.getInstance().getAllItemsDTO();
req.setAttribute("itemsDTO", itemsDTO);
req.getRequestDispatcher(req.getContextPath() + "/WEB-INF/pages/admin/catalog/catalog.jspx").forward(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
012:
この瞬間のように私は、この持っています
web.xmlの
<servlet>
<servlet-name>StartServlet</servlet-name>
<servlet-class>...StartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StartServlet</servlet-name>
<url-pattern>/</url-pattern>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateServlet</servlet-name>
<servlet-class>...ValidateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateServlet</servlet-name>
<url-pattern>/checklogin</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AdminCatalogServlet</servlet-name>
<servlet-class>...AdminCatalogServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdminCatalogServlet</servlet-name>
<url-pattern>/admin/catalog</url-pattern>
</servlet-mapping>
問題:/
または/login
を呼び出すときに私たちは、StartServlet
から始まります。次に、ログイン、フォームにパスワード(method = POST)を入力し、ValidateServlet
に送信します。
AdminCatalogServlet
(Adminの予定より)に転送した後。その後、jsp
と私たちのブラウザが私たちに表示されますページに転送します。 (データベースへの要求は2回でした)、ユーザーおよびアイテムです。私はそれだと思っていますが、それから... tomcatが再びをStartServlet
に入れて、セッションからユーザーを取り込み、メソッドGetにValidateServlet
に転送します。アイテムのデータベースへの繰り返し要求。
どうしてですか?ありがとう。
UPDATE:はValidateServlet
またはAdminCatalogServlet
からの削除のdoGet()メソッドならば、問題は消えていますが、ログインしたとき/login
に入力しようとすると、その後は動作しません
アップデート2:私は、コメントにアドバイスされているように(たぶん正しいわけではない)、トレースしてきました。最初に最初の要求(POST
)、次にブートストラップの追加データのセット。最後にGET
メソッドを使用した/validate
の2番目のリクエストがあります。
アップデート2:この問題を解決するために、私は/
から""
にStartServlet
マッピングを変更しました。つまり、host:port/
へのリクエストはこのサーブレットにリダイレクトされます。 問題は、ブートストラップが接続されているため、ブラウザがfavicon、cssなどのリクエストをhost:port/favicon
に送信したためです。 StartServlet
は/
にマップされていたため、この要求を受け取り、メソッドGET
が開始されました。 詳細については、DefaultServlet
をTomcatで読むことができます。
ブラウザで実際に実行しているすべての要求(Dev Tools - > Network、 "Preserve Log"チェックボックスを有効にする)を追跡したいと思うかもしれません。 –
_ "ログインしたときに/ loginしようとすると動作しません"と仮定しています。これは 'StartServlet'' req.getRequestDispatcher(req.getContextPath()+)/ checklogin ").forward(req、resp);'あなたに 'ValidateServlet.doGet'を渡します。 –
ありがとうございます。 :)質問は、他の人に尋ねられました。 – AlexBal