当前位置: 首页 > news >正文

JSP相关Bug解决

1 发现使用“out”报错

在tomcat下找到下面两个jar包,放到lib下面。

接着,右键,add as Library

最后得到下图所示即可解决问题。

2 静态include的变量重复定义

如果你在主体中有变量num,然后在foot或者head中也有同名变量,将会报如下错误。

An error occurred at line: [15] in the jsp file: [/footer.jsp]
Duplicate local variable num

3 一个超蠢版本问题(2024.11.09更)

在写简单的登录页面demo的过程中发生了一个404问题。

HTTP Status 404 – Not Found
Type Status Report
​
Message /JSPTest1/loginServlet
​
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
​
Apache Tomcat/8.5.31

这里是因为是用的8.5,JavaEE被Oracle捐献给Apache了。目前JavaEE的最高版本是 JavaEE8;Apache把JavaEE换名了,以后不叫JavaEE了,以后叫做 jakarta EE。所以JavaEE8版本升级之后叫做JakartaEE9

JavaEE8的时候对应的Servlet类名是:javax.servlet

JakartaEE9的时候对应的Servlet类名是:jakarta.servlet

在Tomcat9之前是javax,Tomcat9之后是Jakarta。如果不替换Tomcat版本将出现以下问题:

javax.servlet.ServletException: Class [LoginServlet] is not a Servletorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.base/java.lang.Thread.run(Thread.java:1623)

所以最好的办法就是下个Tomcat9之后的版本然后配置一下就没问题了,很蠢的问题,花了我十多分钟。。。。。记录一下自己的傻逼时刻。

补充:可以使用

@WebServlet("/loginServlet")

也可以在web.xml中配置:

    <servlet><servlet-name>LoginServlet</servlet-name><servlet-class>LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/loginServlet</url-pattern></servlet-mapping>

4 JSTL导包问题

如果使用Tomcat8的话,直接去官网下载前面的版本即可。但是

如果使用的是Tomcat10的话,不要下载1.1.2了,要用以下两个包(Jakarta的,官网那个是javax的。直接点击下面两个网址就能下载):

https://repo.maven.apache.org/maven2/jakarta/servlet/jsp/jstl/jakarta.servlet.jsp.jstl-api/2.0.0/jakarta.servlet.jsp.jstl-api-2.0.0.jar

https://repo.maven.apache.org/maven2/org/glassfish/web/jakarta.servlet.jsp.jstl/2.0.0/jakarta.servlet.jsp.jstl-2.0.0.jar

5 项目重命名问题

一个很简单的问题,大部分人也不会犯,但是我手贱试了一下,报错的时候还是有点慌的...

如果把项目重命名,如下:

会导致404,原因很简单,假设原项目是JspLearn,被你改成了JspLearnTest,那么原本你的web项目的路径都是原来的,比如说是xxx/xxx/JspLearn路径下,但是你在xxx/xxx/JspLearnTest路径下会找不到,很合理。这个时候只需要把web重新配置即可,如下图:

把Artifacts重新创建,在Module里面重新添加web配置,最后把tomcat原来的Development和Server重新添加即可。

6 究极奇葩问题mybatis

首先,网上有很多其他方法,但是我试了都不行。最后发现了一个这样的小bug。

下面是我报错的一个测试代码

public class Test {public static void main(String[] args) {SqlSession session = GetSqlSession.createSqlSession();UserMapper userMapper = session.getMapper(UserMapper.class);User user = userMapper.queryUserByName("admin");System.out.println(user);}
}

如果你发现报错:Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ynu.edu.mapper.UserMapper.queryUserByName

尝试一下把创建包名改成:com/ynu/edu/mapper,而不是com.ynu.edu.mapeer

7 简单问题——请求乱码

在 Java Web 开发中,HTTP 请求的字符编码可能会导致乱码问题,尤其是在处理中文或其他非 ASCII 字符时。乱码问题的出现通常与以下因素有关:

  • Tomcat 版本:Tomcat 8 及以上版本对字符编码的处理与 Tomcat 7 及以下版本不同。

  • 请求类型:POST 请求和 GET 请求的字符编码处理方式不同。


POST 请求的乱码处理:

无论是 Tomcat 8 及以上版本,还是 Tomcat 7 及以下版本,POST 请求都可能出现乱码。

在 Servlet 中,通过 request.setCharacterEncoding("UTF-8"); 设置请求的字符编码为 UTF-8。这行代码需要在获取请求参数之前调用,通常在 doPost 方法的最开始部分。

代码

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8"); // 设置请求编码为 UTF-8String name = request.getParameter("name"); // 获取参数// 其他逻辑
}

GET 请求的乱码处理

Tomcat 8 及以上版本:GET 请求默认不会出现乱码,不需要额外处理。

Tomcat 7 及以下版本:GET 请求可能会出现乱码,需要手动处理。

对于 Tomcat 7 及以下版本,GET 请求的参数需要手动进行字符编码转换。

使用 new String(request.getParameter("参数名").getBytes("ISO-8859-1"), "UTF-8"); 将参数从 ISO-8859-1 编码转换为 UTF-8 编码。

代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name"); // 获取参数if (isTomcat7OrBelow()) { // 判断是否是 Tomcat 7 及以下版本name = new String(name.getBytes("ISO-8859-1"), "UTF-8"); // 转换编码}// 其他逻辑
}

POST 请求

无论 Tomcat 版本如何,都需要调用 request.setCharacterEncoding("UTF-8"); 来设置请求编码。

GET 请求

如果是 Tomcat 8 及以上版本,不需要额外处理。

如果是 Tomcat 7 及以下版本,需要手动将参数从 ISO-8859-1 编码转换为 UTF-8 编码。

8 奇葩问题 —— Session自动创建三次

原因

当使用 IntelliJ IDEA 启动 Tomcat 时,IDEA 会自动连接到 Tomcat 并访问项目,这会创建一个 Session。

如果你在 IDEA 中配置了多个部署目标(例如多个浏览器或工具),IDEA 可能会多次访问项目,导致多个 Session 被创建。

解决方法

取消 IDEA 的 After launch 选项的勾选,避免 IDEA 自动连接到项目。

操作步骤:

  1. 打开 IDEA 的 Run/Debug Configurations

  2. 找到你的 Tomcat 配置。

  3. 取消勾选 After launch 选项。

  4. 保存并重新启动 Tomcat。

http://www.lryc.cn/news/611275.html

相关文章:

  • AutoSar AP LT规范中 建模消息和非建模消息都可以使用LogInfo() API吗?
  • 达芬奇31-40
  • stm32F407 硬件COM事件触发六步换相
  • AI赋能复合材料与智能增材制造:前沿技术研修重磅
  • 智能融合:增材制造多物理场AI建模与工业应用实战
  • 【面向对象】面向对象七大原则
  • linux nfs+autofs
  • 注意点:Git 从安装到分支协作、冲突解决的完整步骤 ---待修改,没看这个步骤,需要重新整理步骤
  • ara::log::LogStream::WithTag的概念和使用案例
  • 跨域场景下的Iframe事件监听
  • Nature Neuroscience | 如何在大规模自动化MRI分析中规避伪影陷阱?
  • Android 开发中,HandlerThread、IntentService 和 AsyncTask区别对比
  • 性能测试终极指南:从指标到实战
  • 《传统企业如何借助数字化转型实现企业增长》
  • 机器学习通关秘籍|Day 03:决策树、随机森林与线性回归
  • 分布式微服务--Nacos持久化
  • Python-机器学习初识
  • 机器学习——集成学习(Ensemble Learning):随机森林(Random Forest),AdaBoost、Gradient Boosting,Stacking
  • 论文阅读笔记:《Curriculum Coarse-to-Fine Selection for High-IPC Dataset Distillation》
  • 2.4 组件通信
  • 高阶 RAG :技术体系串联与实际落地指南​
  • 计算机网络 第2章通信基础(竟成)
  • PYQT的QMessageBox使用示例
  • 深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理
  • 注意点:如何使用conda创建虚拟环境并使用虚拟环境以及当安装相关库时,如何指定安装到那个环境里面 ---待看
  • LINUX-进程管理及基础管理
  • Java开发时出现的问题---并发与资源管理深层问题
  • OpenSpeedy绿色免费版下载,提升下载速度,网盘下载速度等游戏变速工具
  • day25 进程
  • FastAPI快速入门P2:与SpringBoot比较