• 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项目,在浏览器中访问不要添加应用名称。

  • 相关阅读:
    git 常用命令
    PHP打印日志类
    如何从总账获取分类账信息
    AP -> GL 数据流动
    JDeveloper 速度慢问题
    JDeveloper 滚轮不受控制
    MyBatis 环境搭建
    初识 MyBatis
    Linux 中设置 MySQL 字符集为 UTF-8
    Linux 安装 MySQL 详解(rpm 包)
  • 原文地址:https://www.cnblogs.com/zhima-hu/p/8127318.html
Copyright © 2020-2023  润新知