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

使用JSP踩过的坑

虽然说jsp已经过时了,但是有时维护比较老的项目还是需要的。

下面说下,我使用jsp踩过的坑:

1.关于打印输出

在jsp中输出使用

out.println("hello");

而不是

System.out.println("hello");

如果在定义函数部分需要打印输出,需要注入JspWriter个对象。

<%! // 示例方法:模拟获取用户信息的方法String getUserInfo(String token, JspWriter out) {// 你的实际逻辑return "username";}
%>
<%String user = getUserInfo(token, out);
%>

2.关于页面跳转

response.sendRedirect(url);

如果使用该函数进行跳转,有个问题需要注意:就是现在很多应用都是单页面应用(SPA),如果遇到URL路径中有“#”的情况下,服务端会忽略掉“#”后面的片段再进行跳转,这样会导致无法跳转到正常的页面上。

这时候建议使用前端跳转,例如:

<!-- 统一由前端跳转 -->
<script>
window.location.href = '<%= redirectUrl %>';
</script>

3.关于return

在java代码部分,如果提前return,那么不止后面java代码的命令不会被执行了,连前端代码也不会被执行了。jsp页面会终止所有输出。

之前我一直以为只会终止java代码部分,不会终止前端代码部分。导致前端代码一直没被执行,排查了好久,才将问题排除出来。

4.参数获取

request.getParameter 方法可以 统一获取请求中的参数值,不论是通过 GET 还是 POST 方式提交的请求。

  • 对于 GET 请求:参数在 URL 的查询字符串中(即 ?name=value 那部分)。
  • 对于 POST 请求:如果是表单提交,参数通常在请求体中。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>获取参数示例</title>
</head>
<body>
<%// 获取名为paramName的参数值String paramValue = request.getParameter("paramName");if (paramValue != null && !paramValue.isEmpty()) {out.println("参数值为: " + paramValue);} else {out.println("没有提供参数或者参数为空。");}
%>
</body>
</html>

5.关于<%! %><% %>

之前我一直以为两个标签是一个意思,所以把代码放一起像js那样使用,把声明和调用按顺序排下来。后来发现代码不生效,才发现两者是两码事。

<%! %>:这个标签用于声明类级别的变量和方法。任何在<%! %>标签内定义的内容都会被插入到由JSP生成的Servlet类的主体中,但位于类的任意一个方法之外。这意味着你可以在<%! %>标签内声明实例变量、静态变量以及方法。

<% %>:这个标签被称为JSP Scriptlet,允许你在JSP页面中嵌入Java代码段。Scriptlet中的代码会被直接插入到由JSP生成的Servlet类的_jspService()方法中。这意味着任何在Scriptlet中声明的变量都是局部变量,仅在该Scriptlet的作用域内有效。

总结来说,<%! %>用于声明在整个JSP页面范围内都可以访问的方法或变量(即类级别),而<% %>则用于编写具体的Java代码块,这些代码块将作为Servlet的服务方法的一部分被执行(即方法级别)。两者的主要区别在于它们定义的位置和作用范围。

相关文章:

  • Double使用注意事项
  • 【编程实践】利用open3d对点云进行聚类并可视化
  • Kotlin IR编译器插件开发指南
  • 互联网大厂Java求职面试:短视频平台大规模实时互动系统架构设计
  • Eigen 库实现最小二乘算法(Least Squares)
  • Unity基础学习(九)Resources资源同步与异步加载
  • 如何在 Linux 系统中永久禁用交换分区 ?
  • 实验绘图参考-0525版(自用)
  • PostgreSQL 与 MongoDB:为您的数据项目选择合适的数据库
  • 记录第一次正式收到SCI期刊论文的审稿
  • Ubantu22.04离线安装、卸载mysql8.0.39并设置开机自启
  • 深入理解 Linux 的 set、env 和 printenv 命令
  • 使用粘滞键修改windows密码
  • 医学写作供应商管理全流程优化
  • 前端课设Web2
  • 微服务——网关
  • 第九章 云平台开发
  • 测试工程师如何通俗理解和入门RAG:从“查资料”到“写答案”的智能升级
  • 如何使用Webpack实现异步加载?
  • OC语言学习——Foundation框架回顾及考核补缺
  • 做策划的网站推广/免费域名申请的方法
  • 深圳企业网站建设报价/域名批量查询工具
  • 迈肯奇迹做网站/三十个知识点带你学党章
  • 电子商务网站开发技术解决方案/谷歌收录提交入口
  • 教你用模板做网站/北京seo包年
  • 网站建设任务书/百度seo排名培训 优化