一、问题由来

  最近在测试Servlet的请求转发功能,准备抽取一个公共的PageJumpTestServlet,用来做页面跳转功能。

这样不用每次在测试的时候,都单独写一个Servlet用来做页面跳转。自己最初的设想时,在路径配置的

时候使用/toPage/*,访问地址示例http://localhost:8080/javaWeb/toPage/login,修改最后一级路径即可。

然后在doGet()方法中,截取最后一级路径,使用请求转发到指定的页面路径即可,完整代码如下

@WebServlet("/toPage/*")
public class PageJumpTestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String requestURL = req.getRequestURL().toString();
        if(requestURL != null && requestURL.lastIndexOf("/") > 0){
            String pagePath = requestURL.substring(requestURL.lastIndexOf("/"));
            System.out.println("pagePath-->" + "WEB-INF/pages" + pagePath + ".html");
            req.getRequestDispatcher("WEB-INF/pages" + pagePath + ".html").forward(req, resp);
            return;
        }

        // 错误提示信息
        resp.setCharacterEncoding("UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.println("请求路径错误!");
        writer.flush();
    }
}

代码写好之后,自己就开始测试,一测试的时候就出现内存溢出。

如下图所示:

往后面翻看的时候,发现有内存溢出的问题.

 

这就是一个简单的页面跳转,怎么会出现这个奇怪的问题呢?让自己感到很困惑。然后自己去网上找答案,

使用百度开发者搜索,

用前面三行错误信息进行搜索,没有找到一圈没有找到自己想要的答案。

然后使用谷歌搜索。

找到一篇博客和自己遇到的问题非常类似,

提问题的博主同样在Servlet中配置路径时,配置了/*

并且同样是用来做页面转发,

和自己的情况非常类似。

好心的网友回答如下

使用百度翻译过来如下,

大致意思就是自己在配置路径时,配置的是/toPage/*,会匹配到所有包含/toPage/请求的路径,

访问地址http://localhost:8082/chapterNine/toPage/jqueryTest  时,Servlet的doGet()方法视图将请求转发到

自己配置的路径中。只是在转发过程中,根据路径的配置,又会被定向到当前的Servlet中,最终造成死循环。

自己还做了另外一个测试,把/toPage/*改成/*效果是一模一样的。最终造成内存溢出。问题找到后就好解决了

地址如下:

https://stackoverflow.com/questions/43505168/stackoverflowerror-when-try-to-access-web-application

三、解决方案

问题找到之后,就好解决。自己换了一种方式,将请求参数放在get请求的地址栏中,然后在后台动态获取参数,

然后在进行页面跳转。这样在配置访问路径时,就可以配置为精确匹配,很好地解决了这个问题。最终代码如下,

@WebServlet("/toPage")
public class PageJumpServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String page = req.getParameter("page");
        if(page != null && !"".equals(page)){
            req.getRequestDispatcher("WEB-INF/pages/" + page + ".html").forward(req, resp);
            return;
        }
        // 错误提示信息
        resp.setCharacterEncoding("UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.println("请求路径错误!");
        writer.flush();
    }
}

通过这一个Servlet就解决了页面跳转问题,大大地提升了效率。

Servlet中访问路径配置为/*时,使用请求转发造成内存溢出的更多相关文章

  1. servlet中web.xml配置

    常见的Servlet中url-pattren的配置 1.固定配置, 如:/hi 引入通配符 * 2.以"/XXX"开头,以"*"结尾 3.以"*&qu ...

  2. Win7中的IIS配置asp时出现“出现403 文件夹禁止訪问错误”!

    Win7中的IIS配置asp时出现"出现403 文件夹禁止訪问错误"! 在[默认文档]中设一下启动文件即可了.

  3. Servlet+JSP 对外访问路径配置

    servlet类似 servlet配置为: <servlet>    <servlet-name>Demo01_OutWrite</servlet-name>    ...

  4. servlet中web.xml配置详解

    Web.xml常用元素 <web-app> 所有部署描述符文件的顶层(根)元素 <display-name></display-name>定义了WEB应用的名字 & ...

  5. 七、SpringBoot项目集成JSP以及项目不同启动方式及访问路径配置

    1.创建JSP目录 在src/main目录下创建目录webapp/WEB-INF/jsp用于存放jsp页面,如下图: 然后再改文件夹下面我们创建JSP文件: 大家在使用IDEA 的new菜单创建JSP ...

  6. Servlet----------在 Servlet 中的xml配置

    今天弄了大半天,才弄好了,还是请教了别人,主要原因在于把web.xml文件放在了WEB-INF文件夹下面了,正常的情况是在WebRoot下面的. 还有一个,我是在MyEclipse中操作的,起初不知道 ...

  7. Servlet中关于路径的小结

    URL(统一 资源定位符).URI(统一资源标识符)都是由资源路径和资源名称组成.   访问路径按照路径是否可以独立完成资源准确定位的判别标准,可以将访问路径分为绝对路径与相对路径. 关系:绝对路径 ...

  8. Servlet中Web.xml配置详解(二)

    5.2 分配JSP初始化参数给JSP页面提供初始化参数在三个方面不同于给servlet提供初始化参数.1)使用jsp-file而不是servlet-class.因此,WEB-INF/web.xml文件 ...

  9. Jenkins访问路径配置自定义的相对路径

    Jenkins安装时没有配置自定义的相对访问路径,例如配置的端口是29957,那访问路径就是http://localhost:29957.以下介绍把访问路径改成http://localhost:299 ...

  10. Servlet中相对路径与绝对路径

    相对路径与绝对路径: 相对路径:相对路径指的是相对于当前文件所在目录的路径! http://localhost:8080/servlet01/ http://localhost:8080/servle ...

随机推荐

  1. 通过Demo学WPF—数据绑定(一)✨

    前言 想学习WPF,但是看视频教程觉得太耗时间,直接看文档又觉得似懂非懂,因此想通过看Demo代码+文档的方式进行学习. 准备 微软官方其实提供了WPF的一些Demo,地址为:microsoft/WP ...

  2. python自动化高效办公第二期,带你项目实战【一】{excel数据处理、批量化生成word模板、pdf和ppt等自动化操作}

    相关文章和数据源: Python自动化办公--Pandas玩转Excel[一] Python自动化办公--Pandas玩转Excel数据分析[二] Python自动化办公--Pandas玩转Excel ...

  3. Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--打开大文件处理

    项目地址: Pdfium.Net:https://github.com/1000374/Pdfium.Net PdfiumViewer:https://github.com/1000374/Pdfiu ...

  4. 4、Web前端学习规划:JavaScript - 学习规划系列文章

    JavaScript作为Web前端里的第3重要的语言,笔者认为该重点进行学习.因为JavaScript衍生出来的框架和类库有不少,而且很强大.所以JavaScript的学习要抓好重点,在基本的语法及应 ...

  5. WPF性能优化:形状(Shape)、几何图形(Geometry)和图画(Drawing)的使用

    在用户界面技术中,绘图是一个绕不开的话题.WPF提供了多种可根据应用程序要求进行优化的2D图形和图像的处理功能,包括画刷(Brush).形状(Shape).几何图形(Geometry).图画(Draw ...

  6. 哈希表(HashMap)与字符串哈希

    哈希表 哈希表是一种通过映射来快速查找的数据结构.其通过键值对(key-value)来存储.一个数据通过哈希函数的运算来生成一个属于他自己的键值,尔后将其与键值绑定.当我们想查找这个数据时,就可以直接 ...

  7. NC22544 车站

    题目链接 题目 题目描述 一个国家有n个城市,有n-1条道路连接,保证联通.还有m条铁路,从1~m编号,第i条铁路是从ui到vi的简单路径,多次询问一段区间的铁路的车站. 一个点可以作为区间[L,R] ...

  8. Vue+SpringBoot+ElementUI实战学生管理系统-8.班级管理模块

    1.章节介绍 前一篇介绍了专业管理模块,这一篇编写班级管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 班级列表 修改班级 4.模块 ...

  9. 使用JS实现博客搜索关键字高亮

    说明 最近博客添加了搜索功能,有个需求是要针对搜索结果中搜索关键字需要高亮显示. 以便用户可以更快速的挑选自己中意的文章. 原理就是在渲染列表数据中给含有关键字的文本标签添加自定义class,渲染完毕 ...

  10. 使用spring boot jpa进行增删改查

    项目地址:https://gitee.com/indexman/spring_boot_in_action 编写实体类User package com.laoxu.springboot.entity; ...