我遇到一个问题,我有3个servlet,一个控制主页,一个控制登录过程,以及一个在用户成功登录后控制页面的小servlet。
HomeServlet:
package com.example; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.RequestDispatcher; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns="") public class HomeServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp"); requestDispatcher.forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { RequestDispatcher requestDispatcher = this.getServletContext().getNamedDispatcher("com.example.LoginServlet"); requestDispatcher.forward(request, response); } }
LoginServlet:
package com.example; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.RequestDispatcher; import javax.servlet.annotation.WebServlet; import javax.servlet.annotation.WebInitParam; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns={"/login"}, initParams={ @WebInitParam(name="username", value="admin"), @WebInitParam(name="password", value="admin") }) public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); String correctUsername = this.getServletConfig().getInitParameter("username"); String correctPassword = this.getServletConfig().getInitParameter("password"); if (username.equals(correctUsername) && password.equals(correctPassword)) { Cookie loginCookie = new Cookie("username", username); loginCookie.setMaxAge(30 * 60); response.addCookie(loginCookie); response.sendRedirect("login-success.html"); } else { PrintWriter out = response.getWriter(); out.println("<font color=red>Either username or password is wrong.</font>"); RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp"); requestDispatcher.include(request, response); } } }
LoginSuccessServlet
package com.example; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.RequestDispatcher; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns={"/login-success.html"}) public class LoginSuccessServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String username = null; Cookie[] cookies = request.getCookies(); for (Cookie cookie: cookies) { if (cookie.getName().equals("username")) { username = cookie.getValue(); } } if (username == null) { response.sendRedirect("login"); } else { RequestDispatcher requestDispatcher = this.getServletContext().getNamedDispatcher("default"); requestDispatcher.forward(request, response); } } }
目前,这3个servlet均正常工作,但是例如,如果我要将LoginSuccessServlet的urlPattern从“ /login-success.html”更改为“ login-success.html”。从字面上看,我尝试访问的每个路径都会给我一个404错误。例如,在进行更改之前,加载Web应用程序后,HomeServlet将加载“ index.jsp”,更改之后,我无法直接访问index.jsp(它不在WEB-INF中),也无法使用HomeServlet或LoginServlet。我也无法访问“ login-success.html”,该文件也不位于WEB-INF中。
从我对Servlet中的URL模式的了解(可能是错误的,如果我做出了错误的假设,请更正我)
我真的可以在这方面使用帮助,因为我一直在试图弄清楚为什么从1个servlet中删除“ /”会影响我尝试访问的单个servlet /文件。
我遇到一个问题,我有3个servlet,一个控制主页,一个控制登录过程,一个在用户成功登录后控制页面的HomeServlet:...
例如,如果要更改LoginSuccessServlet的urlPattern 从“ /login-success.html”到“ login-success.html”。从字面上看 我尝试访问的单个路径给我一个404错误。