jsp基础语法实例教程新手常用代码详解

admin 综合编程开发技术 3


是不是刚学会搭建 JSP 环境,一写代码就懵了?看着教程里满屏的 “<% %>” 符号,不知道它们到底啥意思;写了几行代码,要么输出乱码,要么报错 “找不到变量”;好不容易运行起来,页面显示的内容和预期完全不一样。新手学 JSP,环境搭建只是第一步,搞懂基础语法才是写出动态网页的关键。今天兔子哥就带大家吃透 JSP 常用语法,每个语法都配实例代码,跟着练,你也能轻松写出带动态效果的 JSP 页面!

为啥 JSP 语法看起来这么怪?它和 HTML 有啥不一样?


可能有朋友会问:“HTML 标签多好懂,JSP 为啥非要用‘<%’这种奇怪的符号?” 其实 JSP 是 “Java 服务器页面”,这些符号是用来区分 HTML 和 Java 代码的。HTML 负责页面的样子,比如文字大小、颜色;而 JSP 语法包裹的 Java 代码负责动态内容,比如显示当前时间、计算结果,或者根据用户输入展示不同内容。
网友 “刚入门的小郑” 说:“刚开始觉得这些符号好难记,后来发现常用的就几个,多写几次就记住了,现在看到‘<%=’就知道是要输出内容了。” 确实,JSP 语法看着复杂,其实核心就 4 种,只要搞懂它们的作用和用法,写代码会越来越顺。


语法 1:页面指令,告诉服务器怎么处理页面


页面指令是 JSP 的 “开场白”,用来设置页面的基本属性,最常用的是<%@ page %>指令,一般放在页面最开头。

必学属性:处理编码和语言


jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>

  • language="java":告诉服务器这个页面用 Java 语言,目前 JSP 只支持 Java,这行可以省略,但新手最好加上,看得更清楚。
  • charset=UTF-8pageEncoding="UTF-8":这两行是解决中文乱码的关键!没它们,页面里的中文会显示成 “???”,新手一定要记住加这行,不然排错能排到崩溃。

其他常用属性:控制错误页面和会话


jsp
<%@ page errorPage="error.jsp" %><%@ page session="true" %>

errorPage 很实用,比如代码报错时,不会显示一堆乱码的错误信息,而是跳转到自己写的友好提示页面。


语法 2:脚本片段,在网页里写 Java 代码


脚本片段用<% %>包裹,里面可以写任何 Java 代码,比如定义变量、循环、判断,这是实现动态效果的核心。

定义变量和输出内容


jsp
<%// 定义变量String username = "JSP新手";int age = 20;// 输出内容到页面out.println("

用户名:" + username + "

");out.println("

年龄:" + age + "

");%>

运行后页面会显示:
  • 用户名:JSP 新手
  • 年龄:20

这里的out.println()就像 “打印” 功能,能把内容显示在网页上,注意字符串拼接要用+号,结尾要加分号。

循环和判断语句


jsp
<%// 循环输出out.println("

循环输出数字:

");for(int i=1; i<=3; i++){out.println("第" + i + "个数
");}// 判断语句out.println("

年龄判断:

");if(age >= 18){out.println("已成年");} else {out.println("未成年");}%>

这段代码会循环输出 3 个数字,再根据 age 变量的值显示 “已成年” 或 “未成年”,这就是动态效果的魅力,内容会根据变量变化。


语法 3:表达式,简化输出不用写 out.println


表达式用<%= %>包裹,专门用来输出变量或计算结果,比脚本片段的out.println()更简洁。

基本用法:输出变量和表达式


jsp

用户名:<%= username %>

年龄加5:<%= age + 5 %>

当前时间:<%= new java.util.Date() %>


这段代码和脚本片段里的out.println()效果一样,但代码更短。注意哦,表达式里不能加分号,加了会报错!很多新手刚开始总忘,写一句错一句,多练几次就记住了。

和 HTML 结合:动态设置属性


表达式还能给 HTML 标签的属性赋值,比如动态设置图片路径或文字颜色:
jsp

">年龄状态


这里用三元表达式判断,如果 age 大于 18,文字颜色设为绿色,否则设为红色,非常灵活。


语法 4:声明,定义全局变量和方法


声明用<%! %>包裹,用来定义整个页面都能用的全局变量或方法,和脚本片段里的局部变量不一样。

定义全局变量和方法


jsp
<%!// 全局变量,所有用户共享int visitCount = 0;// 定义方法public String getWelcome(String name){return "欢迎你," + name + "!";}%><%visitCount++; // 每次访问页面,计数器加1%>

访问次数:<%= visitCount %>

<%= getWelcome(username) %>


  • 全局变量visitCount所有用户共享,每次有人访问页面就会加 1,而脚本片段里的变量只能在当前代码块里用。
  • 定义的getWelcome方法可以在页面任何地方调用,不用重复写代码,很方便。

语法符号作用写法注意新手易错点
<%@ page %>设置页面属性放在页面开头,有多个属性漏写编码导致中文乱码
<% %>写 Java 代码片段可以有变量、循环、判断忘记加分号或括号不匹配
<%= %>输出内容直接写变量或表达式多加分号导致报错
<%! %>定义全局元素可以定义变量和方法把局部变量放这里导致数据混乱

兔子哥提示:写 JSP 时别把这几种语法弄混了,多写几个例子对比,慢慢就分清了。比如看到<%=就知道是输出内容,看到<%!就知道是定义全局的东西。


实战:用四种语法做个用户信息页


把上面学的语法结合起来,做个完整的用户信息页,代码能直接运行:
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>用户信息页

用户信息展示

<%!int visitCount = 0;public String getGreet(String name){return "Hello," + name + "!今天也要加油哦~";}%><%String username = "张三";int age = 22;String[] hobbies = {"看书", "跑步", "编程"};visitCount++;%>

<%= getGreet(username) %>

年龄:<%= age %>岁

爱好:

    <%for(String hobby : hobbies){%>
  • <%= hobby %>
  • <%}%>

访问次数:<%= visitCount %>


运行后页面会显示欢迎语、年龄、爱好列表和访问次数,每次刷新页面,访问次数都会增加,这就是 JSP 动态网页的效果。


自问自答:新手学 JSP 语法常见问题


脚本片段里的变量和声明里的变量有啥区别?


脚本片段里的变量是 “局部变量”,每个用户访问页面时都会重新创建,互不影响;声明里的变量是 “全局变量”,所有用户共享,一个用户改了,其他用户看到的结果也会变。比如 visitCount 放在声明里,才能统计总访问次数,放脚本片段里就只能统计当前用户的访问次数。

表达式里能写循环或判断吗?


不能!表达式只能写简单的变量或计算,不能写循环、判断这些复杂代码。如果要循环输出,得用脚本片段的<% %>包裹循环语句,里面再用表达式或out.println()输出内容,就像上面实战案例里的爱好列表那样。

为啥有时候变量明明定义了,却提示 “找不到符号”?


这大概率是变量的作用域问题。如果变量在脚本片段里定义,就只能在那个片段里用,换个片段就找不到了;如果在声明里定义,整个页面都能用。还有可能是变量名写错了,Java 是区分大小写的,“username” 和 “UserName” 是两个不同的变量。


最后说点实在话


JSP 语法刚开始学确实容易搞混,我第一次写的时候,总在表达式里加分号,报错了半天不知道为啥;把局部变量和全局变量弄混,统计访问次数时结果一直不对。但写得多了就会发现,常用的语法就那几个,记住它们的作用和写法,写代码会越来越顺。
其实学语法最有效的方法就是 “边学边练”,看完一个语法就写个小例子测试,比如学完表达式,就试试输出不同的变量和计算结果;学完循环,就试试输出 1 到 10 的数字。遇到报错别慌,仔细看错误提示,大部分时候都是语法细节没注意,比如少个分号、多了个空格。
JSP 语法是写动态网页的基础,学好了后面学 Servlet、SSM 框架会更轻松。现在就打开编辑器,把今天的例子敲一遍,改改变量值,看看页面变化,你会发现 JSP 其实没那么难,动态网页开发也挺有趣的!

标签: pageEncoding contentType

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~