IDEA部署Java Web项目,能访问servlet,但是访问jsp或者html页面都是空白页

作者揭示了在安卓应用中遇到的问题,试图加载网页却收到application/json响应,经分析发现是Servlet基类中的WebServlet注解导致。通过新建项目和代码迁移测试,发现问题是代码中不当的注解配置。解决方法是移除Servlet基类的WebServlet注解,理解了与Filter无关的错误原因。
摘要由CSDN通过智能技术生成

前言

最近在写个安卓私人助手应用,“关于本软件”页面我想直接加载一个网页,没想到接下来的事情让我很不解:输入网页的地址,没有报任何错,但是页面一直是空白的。按F12打开开发人员工具,如下图,也不见有什么报错呀!在这里插入图片描述
其实这里已经有一点线索了,那就是响应头中Content-Type居然是application/json。纳尼?我不是要打开一个网页吗?为什么服务端给我返回application/json的数据,而不是text/html?
不过一开始我并没有抓住好这个关键点,就一直百度百度百度再百度。。。有说是过滤器的问题,有说是jar包冲突的问题,有说是Application contex的问题…总之五花八门,但就是和我的问题不沾边。无奈之下,我只能采用测试大法了。

测试寻找问题的过程

  1. 首先,我新建了一个web项目,里面没有什么内容,跑起来是可以打开网页的,由此可以推断,我的电脑环境没有什么问题。
  2. 然后尝试在里面导入所需的jar包,跑起来也没有什么问题,还是能打开网页。由此可以推断跟什么jar包冲突没有关系。
  3. 复制原来的项目中src下的所有代码至测试项目,再跑起来,发现打开的网页是空白的。没错,问题就在这了,是我写的代码有问题。
  4. 到这里其实我已经猜到bug在哪里了,就是我写了一个Servlet的基类,代码如下:
@WebServlet("/*")
public class LyyBaseServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;chartset=utf-8");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    protected void jsonResponse(HttpServletResponse response,Object o) throws IOException {
        ObjectMapper mapper=new ObjectMapper();
        mapper.writeValue(response.getOutputStream(),o);
    }
}

为了减少重复代码,我把一些常用方法写在这个基类里了,但是这个类的注解@WebServlet("/*")是不应该写上的,你写上了的话,你访问的jsp、html其实都会进入到这个基类,这个基类没有返回任何内容,里面的application/json;chartset=utf-8就是F12开发人员工具里面的Content-Type。

结论

问题出现的原因是我写了一个Servlet的基类,并加上了WebServlet注解。解决页面空白的方法,就是去掉这个注解,与过滤器Filter无关。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值