servlet運行“/*”引起的java.lang.StackOverflowError


1     <servlet>
2         <servlet-name>login</servlet-name>
3         <servlet-class>com.jd.login.UI.LoginUIServlet</servlet-class>
4     </servlet>
5     <servlet-mapping>
6         <servlet-name>login</servlet-name>
7         <url-pattern>/*</url-pattern>
8     </servlet-mapping>

若將servlet的url-pattern配置為“/*”時會攔截內部所有請求,使所有請求都由com.jd.login.UI.LoginUIServlet來處理,所以當項目跑起來后會出現棧溢出錯誤:java.lang.StackOverflowError

 1 @WebServlet(name = "LoginUIServlet",value="/servlet/LoginUIServlet")
 2 public class LoginUIServlet extends HttpServlet {
 3     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 4        //出現死循環,因為所有請求都被攔截
 5        request.getRequestDispatcher("/WEB-INF/pages/login.jsp").forward(request,response);
 6     }
 7 
 8     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 9         this.doPost(request,response);
10     }
11 }

棧溢出異常如下:

解決:

將web.xml中的servlet的url-pattern配置為具體的路徑

1     <servlet>
2         <servlet-name>login</servlet-name>
3         <servlet-class>com.jd.login.UI.LoginUIServlet</servlet-class>
4     </servlet>
5     <servlet-mapping>
6         <servlet-name>login</servlet-name>
7         <url-pattern>/servlet/LoginUIServlet</url-pattern>
8     </servlet-mapping>

檢驗:

在瀏覽器中輸入localhost/servlet/LoginUIServlet,結果如下

備注:在IDEA中跑起來的web項目,在瀏覽器中訪問不要添加應用名稱。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM