在IDEA中遇到request.getParameter或者out.print爆红的情况

在IDEA中遇到request.getParameter或者out.print爆红的情况原因是什么?遇到这种情况该如何去解决?
报错的tomcat版本:10.0.2

使用的IDEA版本:2020.1.3

上个月开始学习JavaWeb,老师教学时用的eclipse,我在eclipse上做的项目运行起来也没有问题,但是把那个项目复制到IDEA上就出现了request.getParameter跟out.print爆红的情况,如下图所示:

在这里插入图片描述

将鼠标悬浮在request上有如下显示:
在这里插入图片描述

看了网上许多关于这个问题的解答都是说导入jsp-api.jar跟servlet-api.jar这两个包到lib下或者清理缓存,但是我照做了,问题却并没有解决,我被这个问题困扰了差不多一个星期,想起之前在2020-12版本的eclipse中我也遇到过一个很难解决的问题,如下图:
在这里插入图片描述

什么都没写,光是创建一个jsp文件它就会报错,而且它跟这里要解决的问题的报错类似,都是找不到javax.servlet.http.HttpServlet不过那个问题已经解决了,把原先的2020-12版本的eclipse卸载了去官网下载了2021-3的版本,然后问题就已经解决了:
在这里插入图片描述

受到这个问题解决方式的启发,我便开始考虑是否是由于tomcat版本的问题,于是去tomcat官网看了一下,果然下载的时候光顾着下载了都没注意看主页的信息:
在这里插入图片描述

翻译出来后比较重要的就是画红线的那里,在tomcat10以上的版本的servlet-api.jar包里解压出来的文件夹已经不是javax文件夹了而是jakarta文件夹:
在这里插入图片描述

在IDEA中创建一个Servlet也可以发现它没有javax.servlet这个包:
在这里插入图片描述

后来看了这篇文章才明白是怎么回事: https://blog.csdn.net/cunfen3485/article/details/112545102?utm_medium=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-1.control&dist_request_id=1328689.8464.16165516936258507&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-1.control

现在已经知道了为什么一直找不到javax.servlet.http.HttpServlet的原因是什么了,因为tomcat10以上的版本的servlet-api.jar里的javax已经改名为jakarta,而IDEA要调用的是javax的那个包所以解决的方法就是将tomcat10版本换成一个9版本或9以下的版本的tomcat就可以解决了,也可以不移除原先的10版本直接加一个低版本的如果选择直接加一个tomcat的话记得把第二个tomcat的端口配置成与第一个tomcat不一样的,否则会有端口冲突,配置完成后也不要忘了将第二个tomcat也加到下图这里:在这里插入图片描述

运行时选择tomcat9,到这里问题已经解决了request.getParameter已经不爆红了:
在这里插入图片描述

再创建一个Servlet也已经有javax.servlet这个包了:

在这里插入图片描述

通过这次也是吸取了个教训,并不是最新版的就是最好的,用稳定版才是王道啊!
————————————————
版权声明:本文为CSDN博主「江户川同学」的原创文章,遵循CC 4.0 BY原文链接:https://blog.csdn.net/weixin_52328526/article/details/116506581@TOC

package com.cyh.www; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "cyh", urlPatterns = "/abcde") public class cyh extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 首次访问时显示输入表单 if (req.getParameter("num1") == null) { RequestDispatcher dispatcher = req.getRequestDispatcher("index.jsp"); dispatcher.forward(req, resp); return; } try { // 获取用户输入 double num1 = Double.parseDouble(req.getParameter("num1")); double num2 = Double.parseDouble(req.getParameter("num2")); String operator = req.getParameter("operator"); // 创建Third实例并调用计算方法 Third calculator = new Third(); // 正常实例化 double result = calculator.calculate(num1, num2, operator); // 设置结果属性 req.setAttribute("num1", num1); req.setAttribute("num2", num2); req.setAttribute("operator", operator); req.setAttribute("result", result); // 转发到结果页面 RequestDispatcher dispatcher = req.getRequestDispatcher("result.jsp"); dispatcher.forward(req, resp); } catch (NumberFormatException e) { req.setAttribute("error", "请输入有效的数字"); RequestDispatcher dispatcher = req.getRequestDispatcher("index.jsp"); dispatcher.forward(req, resp); } catch (Exception e) { req.setAttribute("error", e.getMessage()); RequestDispatcher dispatcher = req.getRequestDispatcher("index.jsp"); dispatcher.forward(req, resp); } } // 添加doPost方法以支持表单提交 @Override protected void doPost 为什么请求的资源[/untitled1_war_exploded/webapp/abcde]不可用
最新发布
07-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值