JSP程序设计教程核心语法:标签库与内置对象用法全解析

admin javascript教程 3


很多新手学 JSP 时,都会被一堆尖括号和对象名搞得晕头转向:<% %> 和 <%@ %> 到底有啥区别?内置对象不用定义就能用,背后到底咋回事?标签库那么多,哪些才是真正常用的?其实啊,JSP 的核心语法就像搭积木的零件,标签库是 “标准模块”,内置对象是 “现成工具”,把这俩搞明白,写动态网页就会顺顺当当。今天兔子哥就掰开了揉碎了讲这两块,保证零基础的朋友也能看明白、用得溜。

标签库:让 JSP 代码更干净的 “语法模块”


JSP 能在 HTML 里写 Java 代码,但写多了就会乱糟糟,维护起来头疼。标签库就是为了让代码更整洁,把常用功能做成标签,不用写复杂 Java 代码也能实现功能。咱们重点学三类最常用的标签。

第一类:脚本元素标签 —— 直接插 Java 代码的 “通道”


这是最基础的标签,用来在 JSP 里写 Java 语句,新手刚开始接触最多的就是它们:
  • <% 代码 %>:写 Java 语句块,比如定义变量、循环、判断。jsp
    <%String name = "JSP学习者";int age = 20;if(age >= 18) {%>

    <%=name%>已成年

    <%}%>

    这种标签里的代码会被编译成 Servlet 的 service 方法里的代码,每次请求都会执行。
  • <%= 表达式 %>:输出内容到网页,相当于out.print(表达式),比写out.println简洁多了。上面例子里的<%=name%>就是输出变量值。
  • <%! 定义 %>:声明全局变量或方法,整个 JSP 页面都能用,编译后会变成 Servlet 类的成员。比如定义一个计算方法:jsp
    <%!int add(int a, int b) {return a + b;}%>

    3+5=<%=add(3,5)%>



有朋友会问,这三种标签能随便用吗?建议少用<%! %>定义全局变量,因为 JSP 是多线程的,全局变量可能会有线程安全问题,新手刚开始尽量用局部变量。

第二类:指令标签 —— 告诉服务器怎么 “处理” JSP


指令标签用来设置 JSP 页面的全局属性,格式是<%@ 指令名 属性=值 %>,最常用的有三个:
  • page指令:设置页面编码、导入类、指定错误页等。jsp
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ page import="java.util.Date, java.text.SimpleDateFormat" %><%@ page errorPage="error.jsp" %>

    编码设置一定要加,不然中文会乱码,这是新手最容易踩的坑。
  • include指令:静态包含其他页面,把被包含页面的内容直接合并到当前页面,编译成一个 Servlet。jsp
    <%@ include file="header.jsp" %>

    这是正文内容

    <%@ include file="footer.jsp" %>

    适合包含固定不变的内容,比如网站头部尾部。
  • taglib指令:引入标签库,比如后面要讲的 JSTL 标签库就需要用它引入。

第三类:JSTL 标签库 —— 让代码 “去 Java 化” 的利器


JSTL(JSP 标准标签库)是官方提供的标签库,能替代大部分 Java 脚本,让 JSP 页面更像 HTML,推荐新手多使用。用之前得先在页面顶部引入:
jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

常用的核心标签有:
  • :输出内容,比<%= %>更安全,能自动转义特殊字符。jsp

  • :条件判断,不用写<% if %>这种混合代码了。jsp

    已成年


  • :循环遍历集合,比如遍历列表、数组。jsp
    <%List fruits = new ArrayList<>();fruits.add("苹果");fruits.add("香蕉");request.setAttribute("fruits", fruits); // 存到request里%>
    • ${fruit}


为什么推荐用 JSTL?因为它让代码更整洁,而且避免了在 JSP 里写大量 Java 代码,后期维护起来方便多了。我之前接手一个老项目,全是<% %>脚本,改个逻辑得翻半天,换成 JSTL 后清爽多了。

内置对象:不用声明就能用的 “现成工具”


JSP 有 9 个内置对象,这些对象由容器自动创建,不用我们new就能直接用,简直是懒人福音。新手先掌握这 5 个最常用的就行。

1. out 对象:往网页 “写内容” 的笔


out对象用来输出内容到网页,常用out.print()out.println()方法,和<%= %>功能类似,但out可以在脚本块里灵活使用。
jsp
<%out.print("Hello ");out.println("JSP!"); // println会换行,但在HTML里要靠
才显示换行%>

注意out输出的内容会先放到缓冲区,满了才会输出到网页,而<%= %>是直接输出,一般情况下用<%= %>更简单。

2. request 对象:接收用户 “输入” 的信使


用户通过表单、URL 参数传过来的数据,都靠request对象获取。常用方法:
  • getParameter(String name):获取单个参数值,比如表单里的用户名。
  • getParameterValues(String name):获取多个参数值,比如复选框选中的多个选项。
  • setAttribute(String name, Object value):存数据到 request 域,在转发的页面里能取到。
  • getRequestDispatcher(String path).forward(request, response):转发到其他页面。

示例:处理登录表单提交的数据
jsp
<%String username = request.getParameter("username");String[] hobbies = request.getParameterValues("hobby"); // 获取复选框的值request.setAttribute("user", username); // 存数据// 转发到欢迎页request.getRequestDispatcher("welcome.jsp").forward(request, response);%>

3. response 对象:给用户 “发响应” 的快递员


response对象用来处理服务器对客户端的响应,常用方法:
  • sendRedirect(String path):重定向到其他页面,和 request 转发不同,重定向后地址栏会变,而且 request 里的数据会丢失。
  • setContentType(String type):设置响应内容类型,比如response.setContentType("text/html;charset=UTF-8")
  • addCookie(Cookie cookie):添加 Cookie 到客户端。

什么时候用转发,什么时候用重定向?表单提交后一般用重定向,防止用户刷新页面重复提交;而需要带数据到下一个页面时用转发。

4. session 对象:记住用户 “状态” 的会员卡


session对象用来存储用户的会话信息,比如登录状态,在整个会话期间(默认 30 分钟)都有效。常用方法:
  • setAttribute(String name, Object value):存数据到 session 域。
  • getAttribute(String name):取数据。
  • invalidate():销毁 session,比如用户退出登录。

登录功能示例:
jsp
<%String username = request.getParameter("username");if("admin".equals(username)) {session.setAttribute("loginUser", username); // 标记用户已登录response.sendRedirect("index.jsp");}%>

在其他页面判断用户是否登录:
jsp
<%if(session.getAttribute("loginUser") == null) {response.sendRedirect("login.jsp"); // 没登录就跳回登录页}%>

5. application 对象:全局共享的 “公告板”


application对象代表整个 Web 应用,所有用户共享,服务器启动时创建,关闭时销毁。适合存全局数据,比如网站访问量。
jsp
<%Integer count = (Integer)application.getAttribute("visitCount");if(count == null) {count = 1;} else {count++;}application.setAttribute("visitCount", count); // 累加访问量%>

本站访问量:<%=count%>


内置对象对比表


对象名称作用范围常用场景数据生命周期
out页面内输出内容到网页单次请求
request单次请求接收参数、转发数据转发内有效,请求结束失效
response单次响应重定向、设置响应头响应结束失效
session用户会话存储登录状态、用户偏好会话超时或销毁后失效
application整个应用存储全局数据、网站配置服务器运行期间有效

实战小技巧:标签库与内置对象怎么结合用?


最好的用法是用 JSTL 标签配合内置对象的域数据,减少 Java 脚本。比如用遍历request里的集合,用判断session里的登录状态:
jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>请登录

欢迎您,${sessionScope.loginUser}

退出

${product.name} - 价格:${product.price}


这样的代码几乎看不到 Java 脚本,干净又好维护,这才是 JSP 的最佳实践。
兔子哥觉得,学 JSP 核心语法不用死记硬背,多写几个小例子自然就熟了。标签库要优先用 JSTL,少写 Java 脚本;内置对象要分清它们的作用范围,别存错了地方。刚开始可能会混淆 request 和 session 的用法,没关系,多试几次就知道:短期用的数据存 request,用户专属的数据存 session,全局数据存 application。
其实 JSP 的核心就是 “用标签简化代码,用内置对象处理数据和交互”,掌握了这个逻辑,不管做登录、列表展示还是数据提交,都能举一反三。希望这篇教程能帮到刚开始学 JSP 的朋友,动手写起来比光看教程有用多啦!

标签: 晕头转向 out.println

发布评论 1条评论)

  • Refresh code

评论列表

2025-10-25 07:26:04

核心语法标签库内置对象全解析