JSP 核心基础|动作标签与内置对象全解析

张开发
2026/4/6 12:23:48 15 分钟阅读

分享文章

JSP 核心基础|动作标签与内置对象全解析
目录一、JSP 核心基础二、JSP 动作元素1. include 动作标签案例1被包含页面includedemo.jsp2主包含页面testinclude.jsp2. forward 动作标签案例JSP 页面转发与参数传递1转发控制页forward.jsp2 目标页面 1big.jsp3目标页面 2small.jsp核心知识点三、JSP常用内置对象1. 常用内置对象案例JSP 用户登录注册功能2登录验证页userinfo.jsp3首页main.jsp4注册页面register.jsp5注册结果页doreg.jsp核心知识点2. out对象案例out对象显示当前时间3. pageContext对象三大核心职能四大作用域核心案例pageContext 的三大核心能力4. exception对象expection对象常用方法案例1出错页面errorpage.jsp2错误页面error.jsp一、JSP 核心基础简单说JSP就是嵌了Java 代码的网页运行在服务器端能够动态生成页面内容最终会被服务器翻译成Servlet来执行。二、JSP 动作元素JSP 动作元素是标准的 XML 格式标签用于控制服务器行为实现动态功能比如包含页面、跳转、操作 JavaBean 等替代繁琐的 Java 脚本代码% %。语法格式jsp:动作名 属性值/ // 无内部子标签时使用 jsp:动作名 属性值 // 有jsp:param等子标签时使用 jsp:param name参数名 value参数值 / /jsp:动作名1. include动作标签运行时动态嵌入另一个页面的内容把多个页面拼成一个页面。语法格式jsp:include page页面路径/或 jsp:include page页面路径 jsp:param name参数名1 value参数值1 / jsp:param name参数名n value参数值n / /jsp:include案例1被包含页面includedemo.jsp% page contentTypetext/html;charsetUTF-8 languagejava % 测试测试O(∩_∩)O被包含页面不需要写完整HTML结构只写内容就行不然页面会嵌套两层结构。2主包含页面testinclude.jsp% page contentTypetext/html;charsetUTF-8 languagejava % html head titleinclude动作标签测试/title /head body h2include动作标签测试/h2 hr/ h2jsp:include pageincludedemo.jsp/jsp:include/h2 /body /html2. forward 动作标签服务器端将请求转给另一个页面由它来响应浏览器用户完全感知不到跳转地址栏不变相当于Servlet的请求转发。语法格式jsp:forward page目标页面路径 / 或 jsp:forward page目标页面路径 jsp:param name转发参数名 value转发参数值 / /jsp:forward案例JSP 页面转发与参数传递根据生成的随机数转发到不同页面并传递参数。目标页面通过request.getParameter(num)获取参数。1转发控制页forward.jsp% page contentTypetext/html;charsetUTF-8 languagejava importjava.util.*% html head title页面转发案例/title /head body % // 生成0-9的随机数 int s (int) (Math.random()*10); if ( s5 ) { % !-- 转发到big.jsp传递num参数 -- jsp:forward pagebig.jsp jsp:param namenum value%s % / /jsp:forward % }else{ % !-- 转发到small.jsp传递num参数 -- jsp:forward pagesmall.jsp jsp:param namenum value%s % / /jsp:forward % } % /body /html2 目标页面 1big.jsp% page contentTypetext/html;charsetUTF-8 languagejava % html head title大于等于5/title /head body !-- 接收转发传递的num参数 -- % request.getParameter(num)% 大于等于5 /body /html3目标页面 2small.jsp% page contentTypetext/html;charsetUTF-8 languagejava % html head title小于5/title /head body % request.getParameter(num)% 小于5 /body /html核心知识点jsp:forward服务器端跳转终止当前页面执行跳转到目标页面jsp:param传递键值对参数目标页面通过request.getParameter(参数名)获取三、JSP常用内置对象JSP 内置对象由Web容器自动创建无需手动定义可直接使用用来简化页面开发。1. 常用内置对象对象名对应 Servlet 类型核心作用生命周期requestHttpServletRequest封装浏览器的一次请求获取参数、存数据、转发一次请求responseHttpServletResponse封装服务器给浏览器的响应重定向、设置编码一次请求sessionHttpSession跟踪同一个用户的多次请求存用户登录信息一次会话浏览器打开到关闭applicationServletContext代表整个 Web 应用所有用户共享全局数据服务器启动到关闭outJspWriter向浏览器输出内容替代 response.getWriter ()当前页面pageContextPageContext页面上下文可获取所有内置对象、操作四大作用域属性当前页面exceptionThrowable封装页面运行时的异常信息用于错误页显示异常详情当前页面仅在isErrorPagetrue页面可用案例JSP 用户登录注册功能1登录页面login.jsp提供表单输入用户名、密码提交到登录验证页2登录验证页userinfo.jsp校验用户名密码通过则重定向到首页失败则返回登录页3首页main.jsp从会话中获取用户名展示欢迎信息4注册页面register.jsp用户填写注册信息把数据发给 doreg.jsp 做后续判断和处理5注册结果页doreg.jsp接收注册表单参数3 秒自动跳转登录页核心知识点分类代码语句功能说明表单提交form action methodpost提交数据到后台处理编码处理request.setCharacterEncoding(UTF-8)解决中文乱码获取参数request.getParameter()获取单个表单值request.getParameterValues()获取多值复选框会话session.setAttribute()存储用户登录信息session.getAttribute()获取登录用户名页面跳转response.sendRedirect()重定向跳转response.setHeader(refresh,3;url)定时自动跳转导入类% page import包.类 %导入 Java 工具类页面输出out.print()向网页输出内容2. out对象out 是 JSP的内置输出对象无需创建直接使用用于向网页动态输出内容。案例out对象显示当前时间每次刷新页面都会更新当前时间out.print()与% 变量 %功能等价均用于向页面输出内容前者可输出拼接字符串后者更简洁。3. pageContext对象pageContext 是 JSP 页面上下文对象相当于当前页面的总控中心可管理数据、调取其他内置对象、实现页面跳转仅在当前页面生效页面执行完毕便自动销毁。三大核心职能管数据统一操作 page、request、session、application 四大作用域完成数据存取与检索。管对象作为入口获取 request、response、session 等所有 JSP 内置对象。管页面提供 forward、include 方法实现页面请求转发与包含。四大作用域核心pageContext 可以统一操作 4 个不同范围的数据作用域有效范围关键字page仅当前 JSP 页面PAGE_SCOPErequest一次请求内有效REQUEST_SCOPEsession一次会话浏览器打开→关闭内有效SESSION_SCOPEapplication整个 Web 项目运行期间有效APPLICATION_SCOPE案例pageContext 的三大核心能力验证 pageContext 可以获取内置对象演示四大作用域的存值、取值演示findAttribute()自动查找属性4. exception对象exception是 JSP 内置异常对象封装页面运行时抛出的错误信息仅在开启isErrorPagetrue的错误页面中可用普通 JSP 页面无法直接使用。expection对象常用方法exception.getMessage()获取简短异常描述信息exception.toString()获取异常类型 完整信息exception.printStackTrace()打印异常堆栈后台控制台看详情案例1出错页面errorpage.jsp% page contentTypetext/html;charsetUTF-8 languagejava errorPage/myjsp/error.jsp % !-- errorPage 出错自动跳转到错误页 -- html head titleTitle/title /head body % int[] anew int[5]; a[5]100; // 数组下标越界产生异常 % /body /html2错误页面error.jsp% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8% % page isErrorPagetrue % !-- 开启exception对象没有这句就不能用 -- !DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title页面出错了 | Error/title style * { margin: 0; padding: 0; box-sizing: border-box; font-family: Segoe UI, Roboto, Microsoft YaHei, sans-serif; } body { background-color: #f8f9fc; display: flex; align-items: center; justify-content: center; min-height: 100vh; padding: 20px; } .error-container { text-align: center; max-width: 600px; width: 100%; background: #fff; padding: 60px 40px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); animation: fadeIn 0.6s ease forwards; } keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .error-code { font-size: 80px; font-weight: 900; color: #ff6b6b; margin-bottom: 20px; } .error-title { font-size: 24px; color: #333; margin-bottom: 12px; } .error-desc { font-size: 16px; color: #666; line-height: 1.6; margin-bottom: 30px; } .error-msg { background: #fdf0f0; color: #d32f2f; padding: 12px 16px; border-radius: 8px; margin-bottom: 30px; font-size: 14px; word-break: break-all; } .btn-group { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; } .btn { padding: 12px 24px; border-radius: 8px; text-decoration: none; font-weight: 500; transition: all 0.3s; cursor: pointer; border: none; font-size: 15px; } .btn-home { background: #409eff; color: white; } .btn-home:hover { background: #3385e0; } .btn-back { background: #e5e7eb; color: #333; } .btn-back:hover { background: #d1d5db; } media (max-width: 576px) { .error-code { font-size: 60px; } .error-container { padding: 40px 20px; } } /style /head body div classerror-container div classerror-code % response.getStatus() % %--把错误对应的HTTP数字状态码比如500展示在页面上--% /div h2 classerror-title抱歉页面好像出错了/h2 p classerror-desc 服务器遇到了意外情况无法完成你的请求。br 你可以返回首页或稍后再试。 /p % if (exception ! null) { % div classerror-msg % exception.getMessage() % %--获取异常的简短提示信息--% /div % } % div classbtn-group button classbtn btn-home onclickwindow.location.href/返回首页/button button classbtn btn-back onclickhistory.back()返回上一页/button /div /div /body /html

更多文章